This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 77431d2597 NIFI-14645 Toolkit CLI - improve change version for
versioned PG and PG listing (#10002)
77431d2597 is described below
commit 77431d25971b2bd013007c5c06f646f6b5c803ce
Author: Pierre Villard <[email protected]>
AuthorDate: Wed Jun 11 04:40:32 2025 +0200
NIFI-14645 Toolkit CLI - improve change version for versioned PG and PG
listing (#10002)
- Add recursive flag support to PG List command
- Fix PG Change Version to account for the branch feature
- Made optional the Flow ID in PG Change All Versions so that it is
possible to upgrade all versioned flows to the latest available version
- Fix Upload Bundles command when recursive flag is set
- Add version control state to Process Groups Result to show if a process
group is versioned and if yes, what's the associated state
- Add branch name to Version Control Info Result to show the branch name,
if any
Signed-off-by: David Handermann <[email protected]>
---
.../impl/command/nifi/pg/PGChangeAllVersions.java | 50 ++++++++++++++++------
.../cli/impl/command/nifi/pg/PGChangeVersion.java | 3 +-
.../toolkit/cli/impl/command/nifi/pg/PGList.java | 18 +++++++-
.../command/registry/extension/UploadBundles.java | 2 +-
.../cli/impl/result/nifi/ProcessGroupsResult.java | 4 +-
.../nifi/ProcessGroupsVersionChangeResult.java | 4 +-
.../impl/result/nifi/VersionControlInfoResult.java | 2 +
7 files changed, 63 insertions(+), 20 deletions(-)
diff --git
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGChangeAllVersions.java
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGChangeAllVersions.java
index dee471522f..a2e7a19d0f 100644
---
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGChangeAllVersions.java
+++
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGChangeAllVersions.java
@@ -51,10 +51,12 @@ public class PGChangeAllVersions extends
AbstractNiFiCommand<ProcessGroupsVersio
public String getDescription() {
return "Changes the version for all of the controlled process group
instances for a given flow ID. "
+ "This can be used to upgrade all the instances of a
versioned flow to a new version, or "
- + "revert to a previous version. If no version is specified,
the latest version will be used. "
- + "If no process group ID is provided, the root process group
will be used to recursively "
- + "search for all instances of the Flow ID. It is possible to
force the recursive operation "
- + "and not stop the operation in case the upgrade of a process
group fails.";
+ + "revert to a previous version. If no flow ID is specified,
all versioned process groups will "
+ + "be upgraded to the latest version. If a flow ID is
specified and if no version is specified, "
+ + "the latest version will be used. If no process group ID is
provided, the root process group "
+ + "will be used to recursively search for all instances of the
Flow ID (or any process group "
+ + "with versioned control information). It is possible to
force the recursive operation and not "
+ + "stop the operation in case the upgrade of a process group
fails.";
}
@Override
@@ -70,7 +72,7 @@ public class PGChangeAllVersions extends
AbstractNiFiCommand<ProcessGroupsVersio
throws NiFiClientException, IOException, MissingOptionException,
CommandException {
final FlowClient flowClient = client.getFlowClient();
- final String flowId = getRequiredArg(properties,
CommandOption.FLOW_ID);
+ final String flowId = getArg(properties, CommandOption.FLOW_ID);
// get the optional id of the parent PG, otherwise fallback to the
root group
String parentPgId = getArg(properties, CommandOption.PG_ID);
@@ -86,6 +88,9 @@ public class PGChangeAllVersions extends
AbstractNiFiCommand<ProcessGroupsVersio
// new version, if specified in the arguments
String newVersion = getArg(properties, CommandOption.FLOW_VERSION);
+ if (newVersion != null && flowId == null) {
+ throw new CommandException("If a version is specified, then a flow
ID must also be specified.");
+ }
// force operation, if specified in the arguments
final boolean forceOperation =
properties.containsKey(CommandOption.FORCE.getLongName());
@@ -96,21 +101,38 @@ public class PGChangeAllVersions extends
AbstractNiFiCommand<ProcessGroupsVersio
for (final ProcessGroupDTO pgDTO : pgList) {
final VersionControlInformationEntity entity =
client.getVersionsClient().getVersionControlInfo(pgDTO.getId());
- if (entity.getVersionControlInformation() == null ||
!entity.getVersionControlInformation().getFlowId().equals(flowId)) {
- continue; // the process group is not version controlled or
does not match the provided
- // Flow ID
- }
-
- if (newVersion == null) {
- newVersion = doPGChangeVersion.getLatestVersion(client,
entity.getVersionControlInformation());
+ if (entity.getVersionControlInformation() == null || (flowId !=
null && !entity.getVersionControlInformation().getFlowId().equals(flowId))) {
+ // the process group is not version controlled or does not
match the provided
+ // Flow ID
+ continue;
}
+ final String previousVersion =
pgDTO.getVersionControlInformation().getVersion();
processGroups.add(pgDTO);
- final String previousVersion =
pgDTO.getVersionControlInformation().getVersion();
+ if (newVersion == null || flowId == null) {
+ try {
+ newVersion = doPGChangeVersion.getLatestVersion(client,
entity.getVersionControlInformation());
+ } catch (Exception e) {
+ changeVersionResults.put(pgDTO.getId(), new
ChangeVersionResult(previousVersion, null, e.getMessage()));
+ if (forceOperation) {
+ continue;
+ } else {
+ e.printStackTrace();
+ break;
+ }
+ }
+ }
+
if (previousVersion.equals(newVersion)) {
changeVersionResults.put(pgDTO.getId(), new
ChangeVersionResult(newVersion, newVersion, "Process group already at desired
version"));
- continue; // Process group already at desired version
+ continue;
+ }
+
+ final String currentState =
entity.getVersionControlInformation().getState();
+ if (!"STALE".equals(currentState)) {
+ changeVersionResults.put(pgDTO.getId(), new
ChangeVersionResult(previousVersion, newVersion, "Process group cannot be
upgraded because current state is " + currentState));
+ continue;
}
try {
diff --git
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGChangeVersion.java
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGChangeVersion.java
index 17cce7e000..02782eed4e 100644
---
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGChangeVersion.java
+++
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGChangeVersion.java
@@ -145,8 +145,9 @@ public class PGChangeVersion extends
AbstractNiFiCommand<VoidResult> {
final String registryId = existingVersionControlDTO.getRegistryId();
final String bucketId = existingVersionControlDTO.getBucketId();
final String flowId = existingVersionControlDTO.getFlowId();
+ final String branch = existingVersionControlDTO.getBranch();
- final VersionedFlowSnapshotMetadataSetEntity versions =
flowClient.getVersions(registryId, bucketId, flowId);
+ final VersionedFlowSnapshotMetadataSetEntity versions =
flowClient.getVersions(registryId, bucketId, flowId, branch);
if (versions.getVersionedFlowSnapshotMetadataSet() == null ||
versions.getVersionedFlowSnapshotMetadataSet().isEmpty()) {
throw new NiFiClientException("No versions available");
}
diff --git
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGList.java
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGList.java
index 9203fbb75a..ebcef2ff05 100644
---
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGList.java
+++
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGList.java
@@ -52,6 +52,7 @@ public class PGList extends
AbstractNiFiCommand<ProcessGroupsResult> {
@Override
protected void doInitialize(Context context) {
addOption(CommandOption.PG_ID.createOption());
+ addOption(CommandOption.RECURSIVE.createOption());
}
@Override
@@ -59,6 +60,7 @@ public class PGList extends
AbstractNiFiCommand<ProcessGroupsResult> {
throws NiFiClientException, IOException {
final FlowClient flowClient = client.getFlowClient();
+ final boolean recursive =
properties.containsKey(CommandOption.RECURSIVE.getLongName());
// get the optional id of the parent PG, otherwise fallback to the
root group
String parentPgId = getArg(properties, CommandOption.PG_ID);
@@ -66,7 +68,21 @@ public class PGList extends
AbstractNiFiCommand<ProcessGroupsResult> {
parentPgId = flowClient.getRootGroupId();
}
- return getList(client, properties, parentPgId);
+ if (recursive) {
+ final List<ProcessGroupDTO> pgList = new ArrayList<>();
+ recursivePGList(pgList, client, properties, parentPgId);
+ return new ProcessGroupsResult(getResultType(properties), pgList);
+ } else {
+ return getList(client, properties, parentPgId);
+ }
+ }
+
+ private void recursivePGList(final List<ProcessGroupDTO> pgList, final
NiFiClient client, final Properties properties, final String pgId) throws
NiFiClientException, IOException {
+ final ProcessGroupsResult result = getList(client, properties, pgId);
+ for (ProcessGroupDTO pgDTO : result.getResult()) {
+ pgList.add(pgDTO);
+ recursivePGList(pgList, client, properties, pgDTO.getId());
+ }
}
public ProcessGroupsResult getList(final NiFiClient client, final
Properties properties, final String pgID)
diff --git
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/extension/UploadBundles.java
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/extension/UploadBundles.java
index b17eedddff..1d2292f719 100644
---
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/extension/UploadBundles.java
+++
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/extension/UploadBundles.java
@@ -66,7 +66,7 @@ public class UploadBundles extends
AbstractNiFiRegistryCommand<StringResult> {
final String bucketId = getRequiredArg(properties,
CommandOption.BUCKET_ID);
final String bundleDir = getRequiredArg(properties,
CommandOption.EXT_BUNDLE_DIR);
final String fileExtension = getArg(properties,
CommandOption.FILE_EXTENSION);
- final boolean recursive =
properties.containsKey(CommandOption.RECURSIVE);
+ final boolean recursive =
properties.containsKey(CommandOption.RECURSIVE.getLongName());
final boolean skipSha256 =
properties.containsKey(CommandOption.SKIP_SHA_256.getLongName());
final boolean verbose = isVerbose(properties);
diff --git
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/result/nifi/ProcessGroupsResult.java
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/result/nifi/ProcessGroupsResult.java
index 6986072295..48a488706a 100644
---
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/result/nifi/ProcessGroupsResult.java
+++
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/result/nifi/ProcessGroupsResult.java
@@ -65,6 +65,7 @@ public class ProcessGroupsResult extends
AbstractWritableResult<List<ProcessGrou
.column("Stopped", 7, 7, false)
.column("Disabled", 8, 8, false)
.column("Invalid", 7, 7, false)
+ .column("Version Control", 36, 36, false)
.build();
for (int i = 0; i < processGroups.size(); i++) {
@@ -76,7 +77,8 @@ public class ProcessGroupsResult extends
AbstractWritableResult<List<ProcessGrou
String.valueOf(dto.getRunningCount()),
String.valueOf(dto.getStoppedCount()),
String.valueOf(dto.getDisabledCount()),
- String.valueOf(dto.getInvalidCount())
+ String.valueOf(dto.getInvalidCount()),
+ dto.getVersionControlInformation() != null ?
dto.getVersionControlInformation().getState() : "N/A"
);
}
diff --git
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/result/nifi/ProcessGroupsVersionChangeResult.java
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/result/nifi/ProcessGroupsVersionChangeResult.java
index 5a01ba11e2..45646fd745 100644
---
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/result/nifi/ProcessGroupsVersionChangeResult.java
+++
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/result/nifi/ProcessGroupsVersionChangeResult.java
@@ -64,8 +64,8 @@ public class ProcessGroupsVersionChangeResult extends
AbstractWritableResult<Lis
.column("#", 3, 3, false)
.column("Name", 20, 36, true)
.column("Id", 36, 36, false)
- .column("Prev Version", 15, 15, false)
- .column("New Version", 15, 15, false)
+ .column("Prev Version", 45, 45, false)
+ .column("New Version", 45, 45, false)
.column("Message", 100, 100, false)
.build();
diff --git
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/result/nifi/VersionControlInfoResult.java
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/result/nifi/VersionControlInfoResult.java
index 2ad39c1a77..c5a8d2e15f 100644
---
a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/result/nifi/VersionControlInfoResult.java
+++
b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/result/nifi/VersionControlInfoResult.java
@@ -56,6 +56,7 @@ public class VersionControlInfoResult extends
AbstractWritableResult<VersionCont
.column("Registry", 20, 30, true)
.column("Bucket", 20, 30, true)
.column("Flow", 20, 30, true)
+ .column("Branch", 20, 30, true)
.column("Ver", 3, 3, false)
.build();
@@ -63,6 +64,7 @@ public class VersionControlInfoResult extends
AbstractWritableResult<VersionCont
dto.getRegistryName(),
dto.getBucketName(),
dto.getFlowName(),
+ dto.getBranch(),
String.valueOf(dto.getVersion())
);