Migrate Push Replication to Unidirectional Federation
Convert push-replicated local repositories to unidirectional Federated repositories using the JFrog CLI federation-migrator plugin.
Migrate local repositories that use push replication to unidirectional Federation across two JFrog Platform Deployments (JPDs). The migration tool converts each repository on the source and target JPDs to Federated, removes the legacy replication configuration, and configures the target member in receiving-only mode so artifacts flow from source to target only.
Note
This procedure covers push replication from a source local repository to a target local repository. It doesn't migrate pull replication or remote-repository pull setups. Pull replication migration is planned for separate support. Until then, if your topology uses pull replication, plan a manual Federation setup instead. For more information, see Configure Receiving-Only Mode.
This topic covers the following tasks:
- Prerequisites
- Install the Migration Plugin
- Prepare the Repository List
- Run the Migration
- Review the Results Report
- Verify Federation Health
Who can perform this task: Platform Administrators
Prerequisites
Before you run the migration, confirm the following:
- Artifactory Federation Service (RTFS) is installed and connected on the source and target JPDs. See Artifactory Federation Service (RTFS).
- Trust between JPDs is established using binding tokens or a Circle of Trust. See Prerequisites for Federated Repositories.
- Admin permissions on both JPDs, including access to create or update repositories and configure Federation members.
- Access tokens for the source and target JPDs with permissions to read and update repository configuration.
- JFrog CLI is installed. See JFrog CLI.
- Federation Migrator plugin 2.4 or later is installed.
- Source repositories are local repositories with push replication configured to the target JPD.
- Target repositories are local or don't yet exist. The tool creates missing target repositories from the source configuration.
- No Full Sync operations are in progress on repositories you plan to migrate.
Important
Unidirectional Federation isn't identical to legacy push replication. Receiving-only members block local write operations on the target JPD. If spokes must accept local uploads without replicating them back to the hub, use bidirectional Federation with permissions instead of receiving-only mode. For more information, see Configure Receiving-Only Mode.
Install the Migration Plugin
Install the JFrog CLI federation-migrator plugin, which installs the required migration components and runs the repository operations.
To install the migration plugin:
-
Run the following command to install the plugin from the official registry of JFrog CLI plugins:
jf plugin install federation-migrator -
Verify the installation:
jf federation-migrator -v
Note
If a previous installation of the plugin exists, remove or uninstall it before running the plugin installer. On rare occasions, the previous installation can cause the plugin installer to fail.
Prepare the Repository List
Identify the local repositories on the source JPD that currently use push replication to the target JPD.
Supported repository selection
| Input method | Flag | Description |
|---|---|---|
| Comma-separated list | --repos and -r | One or more repository keys, for example libs-release-local,libs-snapshot-local |
| Text file | --repo-list-file and -rlf | One repository key per line. Blank lines and lines starting with # are ignored |
Use only one input method. --repos and --repo-list-file are mutually exclusive.
Example repository list file
# Production release repositories
libs-release-local
libs-release-prod
# Snapshots
libs-snapshot-localRepositories skipped by default
The tool skips a repository when any of the following is true:
- The source repository doesn't exist or isn't a local repository.
- The target repository exists but isn't a local repository.
- The source repository replicates to more than one target unless you pass
--allow-multiple-replications.
Review your replication topology before running the migration, especially if you use multi-push replication.
Warning
The tool processes every repository key you provide when the source and target are eligible local repositories. It doesn't verify that the source currently has a push replication relationship with the specified target. Verify each repository key and target URL before you run the command.
If you use
--allow-multiple-replications, the tool configures only the target passed in<target base url without /artifactory>. Converting the source repository to Federated removes its existing replication definitions, including definitions for other targets. Migrate additional targets separately or add them as Federation members before you resume normal operations.
Run the Migration
Run the replication_to_federation command from a machine that can reach both JPDs.
To migrate push-replicated repositories to unidirectional Federation:
-
Run the following command:
jf federation-migrator replication_to_federation \ <source base url without /artifactory> \ <source access token> \ <target base url without /artifactory> \ <target access token> \ --repos <repo1,repo2,...>For example:
jf federation-migrator replication_to_federation \ https://source.example.com \ <source-token> \ https://target.example.com \ <target-token> \ --repos libs-release-local,libs-snapshot-local -
Alternatively, pass a repository list file:
jf federation-migrator replication_to_federation \ https://source.example.com \ <source-token> \ https://target.example.com \ <target-token> \ --repo-list-file ./repos-to-migrate.txt
What the Tool Does
For each repository in your list, the migration tool performs these steps:
- Validates that the source repository is a local repository.
- Creates the target local repository from the source configuration if it doesn't exist.
- Converts the source and target repositories to Federated repositories in parallel.
- Configures Federation members so the source pushes to the target.
- Removes legacy push replication configuration as part of the Federated conversion.
- Triggers the initial Full Sync when Artifactory creates or updates the Federation membership.
By default, the target member is configured in receiving-only mode, which gives you unidirectional sync from source to target.
Command Options
| Option | Type | Description | Default |
|---|---|---|---|
-r, --repos | string | Comma-separated repository keys to convert. Mutually exclusive with --repo-list-file. | None. Required unless you use --repo-list-file. |
-rlf, --repo-list-file | string | Path to a text file with one repository key per line. Mutually exclusive with --repos. | None |
-amr, --allow-multiple-replications | boolean | Include repositories that replicate to more than one target. Default behavior is to skip them. | false |
-bd, --bidirectional | boolean | Configure Federation as bidirectional instead of unidirectional. | false |
-o, --output-file | string | Path for the per-repository results report. | ./replication-to-federation-results-<timestamp>.txt in the current working directory |
-cpi, --conversion-poll-interval | integer | Milliseconds to wait before retrying federation member assignment after HTTP 400 or 409 responses. | 2000 |
Tip
For information about advanced HTTP options and to confirm that your installed plugin includes this command, add
--helpafter the command:jf federation-migrator replication_to_federation --help
Review the Results Report
After the command completes, the tool writes a plain-text report listing the outcome for each repository.
The command can complete even when individual repositories fail or are skipped. Use the results report, rather than command completion alone, to determine whether every repository migrated successfully.
Report location
- Default:
replication-to-federation-results-<timestamp>.txtin the current working directory - Custom path: the file you set with
--output-file
Report columns
| Column | Description |
|---|---|
| Repository key | The repository processed |
| Status | SUCCESS, FAILED, or SKIPPED |
| Details | Additional context, such as created on target or the skip/failure reason |
Example report
libs-release-local SUCCESS created on target
libs-snapshot-local SUCCESS
legacy-multi-target SKIPPED source has multiple replication targets
remote-cache-local SKIPPED target is not a local repoImportant
If a repository fails partway through conversion, one or both JPDs can be left in a partially converted state. Review repository configuration and Federation membership on both JPDs before retrying. Don't assume a failed repository remains unchanged.
If the source and target repository states differ and retrying doesn't complete the conversion, contact JFrog Support before you change repository types or membership manually.
Verify Federation Health
After migration, confirm that each converted repository is healthy.
To verify Federation health:
- In the Administration module on the source JPD, open Platform Monitoring > Federation Status and confirm the converted repositories show connected members.
- On the target JPD, verify that migrated members appear in receiving-only mode if you used the default unidirectional configuration. See Configure Receiving-Only Mode.
- Confirm legacy replication definitions were removed from converted repositories.
- Wait for the automatic Full Sync to complete and confirm that the member state is healthy.
- Deploy or resolve a test artifact on the source repository and verify it appears on the target member.
- If synchronization doesn't complete as expected, review Troubleshooting Federated Repositories.
Frequently Asked Questions
This section provides answers to frequently asked questions.
FAQs
Q: Does this migration support pull replication?
A: No. The replication_to_federation plan converts local repositories that use push replication. Pull replication and remote-repository pull setups aren't supported by this command and are planned for separate support.
Q: What is the default sync direction after migration?
A: By default, the tool configures unidirectional Federation. The source member sends artifacts to the target, and the target member is set to receiving-only mode. Pass --bidirectional only if you intentionally want bidirectional sync.
Q: What happens if the target repository doesn't exist?
A: The tool creates a local repository on the target JPD using the source repository configuration, then converts both sides to Federated repositories.
Q: Why was my repository skipped with "source has multiple replication targets"?
A: By default, the tool skips repositories that push to more than one target. Use --allow-multiple-replications only after you confirm the repository should be converted in your topology.
Q: Is this the same tool used to migrate Legacy Federation to RTFS?
A: Both workflows use the federation-migrator JFrog CLI plugin, but different commands. Use migrate_rtfs for Legacy Federation to RTFS migration. Use replication_to_federation for push replication to Federation conversion. See Migrate to the Artifactory Federation Service.
Related Topics
Updated about 2 hours ago
