mirror of https://github.com/apache/nifi.git
NIFI-6364 - Add CLI commands for parameter contexts
This closes #3628. Signed-off-by: Mark Payne <markap14@hotmail.com>
This commit is contained in:
parent
bd8342c5e0
commit
16f3dbdc6a
|
@ -25,6 +25,7 @@ import org.apache.nifi.toolkit.cli.impl.client.nifi.ControllerServicesClient;
|
|||
import org.apache.nifi.toolkit.cli.impl.client.nifi.FlowClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientConfig;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.PoliciesClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ProcessGroupClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ReportingTasksClient;
|
||||
|
@ -260,6 +261,21 @@ public class NiFiClientFactory implements ClientFactory<NiFiClient> {
|
|||
return wrappedClient.getReportingTasksClientForToken(token);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParamContextClient getParamContextClient() {
|
||||
return wrappedClient.getParamContextClientForProxiedEntities(proxiedEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParamContextClient getParamContextClientForProxiedEntities(String... proxiedEntity) {
|
||||
return wrappedClient.getParamContextClientForProxiedEntities(proxiedEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParamContextClient getParamContextClientForToken(String token) {
|
||||
return wrappedClient.getParamContextClientForToken(token);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
wrappedClient.close();
|
||||
|
|
|
@ -129,6 +129,14 @@ public interface NiFiClient extends Closeable {
|
|||
|
||||
ReportingTasksClient getReportingTasksClientForToken(String token);
|
||||
|
||||
// ----- ParamContextClient -----
|
||||
|
||||
ParamContextClient getParamContextClient();
|
||||
|
||||
ParamContextClient getParamContextClientForProxiedEntities(String ... proxiedEntity);
|
||||
|
||||
ParamContextClient getParamContextClientForToken(String token);
|
||||
|
||||
/**
|
||||
* The builder interface that implementations should provide for obtaining the client.
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.client.nifi;
|
||||
|
||||
import org.apache.nifi.web.api.entity.ParameterContextEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextUpdateRequestEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextsEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public interface ParamContextClient {
|
||||
|
||||
ParameterContextsEntity getParamContexts() throws NiFiClientException, IOException;
|
||||
|
||||
ParameterContextEntity getParamContext(String id) throws NiFiClientException, IOException;
|
||||
|
||||
ParameterContextEntity createParamContext(ParameterContextEntity paramContext) throws NiFiClientException, IOException;
|
||||
|
||||
ParameterContextEntity deleteParamContext(String id, String version) throws NiFiClientException, IOException;
|
||||
|
||||
ParameterContextUpdateRequestEntity updateParamContext(ParameterContextEntity paramContext) throws NiFiClientException, IOException;
|
||||
|
||||
ParameterContextUpdateRequestEntity getParamContextUpdateRequest(String contextId, String updateRequestId) throws NiFiClientException, IOException;
|
||||
|
||||
ParameterContextUpdateRequestEntity deleteParamContextUpdateRequest(String contextId, String updateRequestId) throws NiFiClientException, IOException;
|
||||
|
||||
}
|
|
@ -27,6 +27,7 @@ import org.apache.nifi.toolkit.cli.impl.client.nifi.ControllerServicesClient;
|
|||
import org.apache.nifi.toolkit.cli.impl.client.nifi.FlowClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientConfig;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.PoliciesClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ProcessGroupClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ReportingTasksClient;
|
||||
|
@ -267,6 +268,23 @@ public class JerseyNiFiClient implements NiFiClient {
|
|||
return new JerseyReportingTasksClient(baseTarget, headers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParamContextClient getParamContextClient() {
|
||||
return new JerseyParamContextClient(baseTarget);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParamContextClient getParamContextClientForProxiedEntities(String... proxiedEntity) {
|
||||
final Map<String, String> headers = getHeaders(proxiedEntity);
|
||||
return new JerseyParamContextClient(baseTarget, headers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParamContextClient getParamContextClientForToken(String base64token) {
|
||||
final Map<String, String> headers = getHeadersWithToken(base64token);
|
||||
return new JerseyParamContextClient(baseTarget, headers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
if (this.client != null) {
|
||||
|
|
|
@ -0,0 +1,157 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.client.nifi.impl;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextUpdateRequestEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextsEntity;
|
||||
|
||||
import javax.ws.rs.client.Entity;
|
||||
import javax.ws.rs.client.WebTarget;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
public class JerseyParamContextClient extends AbstractJerseyClient implements ParamContextClient {
|
||||
|
||||
private final WebTarget flowTarget;
|
||||
private final WebTarget paramContextTarget;
|
||||
|
||||
public JerseyParamContextClient(final WebTarget baseTarget) {
|
||||
this(baseTarget, Collections.emptyMap());
|
||||
}
|
||||
|
||||
public JerseyParamContextClient(final WebTarget baseTarget, final Map<String,String> headers) {
|
||||
super(headers);
|
||||
this.flowTarget = baseTarget.path("/flow");
|
||||
this.paramContextTarget = baseTarget.path("/parameter-contexts");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterContextsEntity getParamContexts() throws NiFiClientException, IOException {
|
||||
return executeAction("Error retrieving parameter contexts", () -> {
|
||||
final WebTarget target = flowTarget.path("/parameter-contexts");
|
||||
return getRequestBuilder(target).get(ParameterContextsEntity.class);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterContextEntity getParamContext(final String id) throws NiFiClientException, IOException {
|
||||
if (StringUtils.isBlank(id)) {
|
||||
throw new IllegalArgumentException("Parameter context id cannot be null or blank");
|
||||
}
|
||||
|
||||
return executeAction("Error retrieving parameter context", () -> {
|
||||
final WebTarget target = paramContextTarget.path("{id}")
|
||||
.resolveTemplate("id", id);
|
||||
return getRequestBuilder(target).get(ParameterContextEntity.class);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterContextEntity createParamContext(final ParameterContextEntity paramContext) throws NiFiClientException, IOException {
|
||||
if (paramContext == null) {
|
||||
throw new IllegalArgumentException("Parameter context cannot be null or blank");
|
||||
}
|
||||
|
||||
return executeAction("Error creating parameter context", () -> {
|
||||
final WebTarget target = paramContextTarget;
|
||||
return getRequestBuilder(target).post(
|
||||
Entity.entity(paramContext, MediaType.APPLICATION_JSON),
|
||||
ParameterContextEntity.class
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterContextEntity deleteParamContext(final String id, final String version) throws NiFiClientException, IOException {
|
||||
if (StringUtils.isBlank(id)) {
|
||||
throw new IllegalArgumentException("Parameter context id cannot be null or blank");
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(version)) {
|
||||
throw new IllegalArgumentException("Version cannot be null or blank");
|
||||
}
|
||||
|
||||
return executeAction("Error deleting parameter context", () -> {
|
||||
final WebTarget target = paramContextTarget.path("{id}")
|
||||
.resolveTemplate("id", id)
|
||||
.queryParam("version", version);
|
||||
return getRequestBuilder(target).delete(ParameterContextEntity.class);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterContextUpdateRequestEntity updateParamContext(final ParameterContextEntity paramContext)
|
||||
throws NiFiClientException, IOException {
|
||||
if (paramContext == null) {
|
||||
throw new IllegalArgumentException("Parameter context entity cannot be null");
|
||||
}
|
||||
|
||||
if (paramContext.getComponent() == null) {
|
||||
throw new IllegalArgumentException("Parameter context DTO cannot be null");
|
||||
}
|
||||
|
||||
final String paramContextId = paramContext.getComponent().getId();
|
||||
if (StringUtils.isBlank(paramContextId)) {
|
||||
throw new IllegalArgumentException("Parameter context id cannot be null or blank");
|
||||
}
|
||||
|
||||
return executeAction("Error creating parameter context update request", () -> {
|
||||
final WebTarget target = paramContextTarget.path("{id}/update-requests")
|
||||
.resolveTemplate("id", paramContextId);
|
||||
return getRequestBuilder(target).post(
|
||||
Entity.entity(paramContext, MediaType.APPLICATION_JSON),
|
||||
ParameterContextUpdateRequestEntity.class
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterContextUpdateRequestEntity getParamContextUpdateRequest(final String contextId, final String updateRequestId)
|
||||
throws NiFiClientException, IOException {
|
||||
if (StringUtils.isBlank(updateRequestId)) {
|
||||
throw new IllegalArgumentException("Parameter context update request id cannot be null or blank");
|
||||
}
|
||||
|
||||
return executeAction("Error retrieving parameter context", () -> {
|
||||
final WebTarget target = paramContextTarget.path("{context-id}/update-requests/{request-id}")
|
||||
.resolveTemplate("context-id", contextId)
|
||||
.resolveTemplate("request-id", updateRequestId);
|
||||
return getRequestBuilder(target).get(ParameterContextUpdateRequestEntity.class);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterContextUpdateRequestEntity deleteParamContextUpdateRequest(final String contextId, final String updateRequestId)
|
||||
throws NiFiClientException, IOException {
|
||||
if (StringUtils.isBlank(updateRequestId)) {
|
||||
throw new IllegalArgumentException("Parameter context update request id cannot be null or blank");
|
||||
}
|
||||
|
||||
return executeAction("Error deleting parameter context update request", () -> {
|
||||
final WebTarget target = paramContextTarget.path("{context-id}/update-requests/{request-id}")
|
||||
.resolveTemplate("context-id", contextId)
|
||||
.resolveTemplate("request-id", updateRequestId);
|
||||
return getRequestBuilder(target).delete(ParameterContextUpdateRequestEntity.class);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@ import org.apache.commons.cli.HelpFormatter;
|
|||
import org.apache.commons.cli.MissingOptionException;
|
||||
import org.apache.commons.cli.Option;
|
||||
import org.apache.commons.cli.Options;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.apache.nifi.toolkit.cli.api.Command;
|
||||
|
@ -27,8 +28,14 @@ import org.apache.nifi.toolkit.cli.api.Context;
|
|||
import org.apache.nifi.toolkit.cli.api.Result;
|
||||
import org.apache.nifi.toolkit.cli.api.ResultType;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
|
@ -205,6 +212,10 @@ public abstract class AbstractCommand<R extends Result> implements Command<R> {
|
|||
}
|
||||
}
|
||||
|
||||
protected boolean hasArg(final Properties properties, final CommandOption option) {
|
||||
return properties.containsKey(option.getLongName());
|
||||
}
|
||||
|
||||
protected boolean isVerbose(final Properties properties) {
|
||||
return properties.containsKey(CommandOption.VERBOSE.getLongName());
|
||||
}
|
||||
|
@ -213,4 +224,30 @@ public abstract class AbstractCommand<R extends Result> implements Command<R> {
|
|||
return getContext().isInteractive();
|
||||
}
|
||||
|
||||
protected void printIfInteractive(final String val) {
|
||||
if (isInteractive()) {
|
||||
print(val);
|
||||
}
|
||||
}
|
||||
|
||||
protected void printlnIfInteractive(final String val) {
|
||||
if (isInteractive()) {
|
||||
println(val);
|
||||
}
|
||||
}
|
||||
|
||||
protected String getInputSourceContent(String inputFile) throws IOException {
|
||||
String contents;
|
||||
try {
|
||||
// try a public resource URL
|
||||
URL url = new URL(inputFile);
|
||||
contents = IOUtils.toString(url, StandardCharsets.UTF_8);
|
||||
} catch (MalformedURLException e) {
|
||||
// assume a local file then
|
||||
URI uri = Paths.get(inputFile).toAbsolutePath().toUri();
|
||||
contents = IOUtils.toString(uri, StandardCharsets.UTF_8);
|
||||
}
|
||||
return contents;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -102,6 +102,16 @@ public enum CommandOption {
|
|||
// NiFi - Templates
|
||||
TEMPLATE_ID("tid", "templateId", "The id of a template", true),
|
||||
|
||||
// NiFI - Parameter Contexts
|
||||
PARAM_CONTEXT_ID("pcid", "paramContextId", "The id of a parameter context", true),
|
||||
PARAM_CONTEXT_NAME("pcn", "paramContextName", "The name of a parameter context", true),
|
||||
PARAM_CONTEXT_DESC("pcd", "paramContextDescription", "The description of a parameter context", true),
|
||||
|
||||
PARAM_NAME("pn", "paramName", "The name of the parameter", true),
|
||||
PARAM_DESC("pd", "paramDescription", "The description of the parameter", true),
|
||||
PARAM_VALUE("pv", "paramValue", "The value of a parameter", true),
|
||||
PARAM_SENSITIVE("ps", "paramSensitive", "Whether or not the parameter is sensitive", true),
|
||||
|
||||
// Security related
|
||||
KEYSTORE("ks", "keystore", "A keystore to use for TLS/SSL connections", true),
|
||||
KEYSTORE_TYPE("kst", "keystoreType", "The type of key store being used (JKS or PKCS12)", true),
|
||||
|
@ -160,4 +170,7 @@ public enum CommandOption {
|
|||
return Option.builder(shortName).longOpt(longName).desc(description).hasArg(hasArg).build();
|
||||
}
|
||||
|
||||
public Option createOption(final String description) {
|
||||
return Option.builder(shortName).longOpt(longName).desc(description).hasArg(hasArg).build();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -160,6 +160,7 @@ public class CommandProcessor {
|
|||
for (ResolvedReference resolvedRef : resolvedReferences) {
|
||||
out.println();
|
||||
out.printf("Using a positional back-reference for '%s'%n", resolvedRef.getDisplayName());
|
||||
out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,16 +37,26 @@ import org.apache.nifi.toolkit.cli.impl.command.nifi.nodes.DeleteNode;
|
|||
import org.apache.nifi.toolkit.cli.impl.command.nifi.nodes.DisconnectNode;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.nodes.GetNode;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.nodes.GetNodes;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.params.ExportParamContext;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.params.ImportParamContext;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.params.SetParam;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.params.DeleteParam;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.params.DeleteParamContext;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.params.GetParamContext;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.params.ListParamContexts;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.params.MergeParamContext;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGChangeVersion;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGCreateControllerService;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGDisableControllerServices;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGEnableControllerServices;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGGetAllVersions;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGGetControllerServices;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGGetParamContext;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGGetVars;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGGetVersion;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGImport;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGList;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGSetParamContext;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGSetVar;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGStart;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGStatus;
|
||||
|
@ -65,6 +75,7 @@ import org.apache.nifi.toolkit.cli.impl.command.nifi.tenants.CreateUserGroup;
|
|||
import org.apache.nifi.toolkit.cli.impl.command.nifi.tenants.ListUserGroups;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.tenants.ListUsers;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.tenants.UpdateUserGroup;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.params.CreateParamContext;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -110,6 +121,8 @@ public class NiFiCommandGroup extends AbstractCommandGroup {
|
|||
commands.add(new PGCreateControllerService());
|
||||
commands.add(new PGEnableControllerServices());
|
||||
commands.add(new PGDisableControllerServices());
|
||||
commands.add(new PGGetParamContext());
|
||||
commands.add(new PGSetParamContext());
|
||||
commands.add(new GetControllerServices());
|
||||
commands.add(new GetControllerService());
|
||||
commands.add(new CreateControllerService());
|
||||
|
@ -130,6 +143,15 @@ public class NiFiCommandGroup extends AbstractCommandGroup {
|
|||
commands.add(new ListTemplates());
|
||||
commands.add(new DownloadTemplate());
|
||||
commands.add(new UploadTemplate());
|
||||
commands.add(new ListParamContexts());
|
||||
commands.add(new GetParamContext());
|
||||
commands.add(new CreateParamContext());
|
||||
commands.add(new DeleteParamContext());
|
||||
commands.add(new SetParam());
|
||||
commands.add(new DeleteParam());
|
||||
commands.add(new ExportParamContext());
|
||||
commands.add(new ImportParamContext());
|
||||
commands.add(new MergeParamContext());
|
||||
return new ArrayList<>(commands);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.command.nifi.params;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.nifi.toolkit.cli.api.Result;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.AbstractNiFiCommand;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextUpdateRequestEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
public abstract class AbstractUpdateParamContextCommand<R extends Result> extends AbstractNiFiCommand<R> {
|
||||
|
||||
public AbstractUpdateParamContextCommand(final String name, final Class<R> resultClass) {
|
||||
super(name, resultClass);
|
||||
}
|
||||
|
||||
protected ParameterContextUpdateRequestEntity performUpdate(final ParamContextClient client, final ParameterContextEntity parameterContextEntity,
|
||||
final ParameterContextUpdateRequestEntity updateRequestEntity)
|
||||
throws NiFiClientException, IOException {
|
||||
|
||||
final AtomicBoolean cancelled = new AtomicBoolean(false);
|
||||
|
||||
// poll the update request for up to 30 seconds to see if it has completed
|
||||
// if it doesn't complete then an exception will be thrown, but in either case the request will be deleted
|
||||
final String contextId = parameterContextEntity.getId();
|
||||
final String updateRequestId = updateRequestEntity.getRequest().getRequestId();
|
||||
try {
|
||||
boolean completed = false;
|
||||
for (int i = 0; i < 30; i++) {
|
||||
final ParameterContextUpdateRequestEntity retrievedUpdateRequest = client.getParamContextUpdateRequest(contextId, updateRequestId);
|
||||
if (retrievedUpdateRequest != null && retrievedUpdateRequest.getRequest().isComplete()) {
|
||||
completed = true;
|
||||
break;
|
||||
} else {
|
||||
try {
|
||||
if (getContext().isInteractive()) {
|
||||
println("Waiting for update request to complete...");
|
||||
}
|
||||
Thread.sleep(2000);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!completed) {
|
||||
cancelled.set(true);
|
||||
}
|
||||
|
||||
} finally {
|
||||
final ParameterContextUpdateRequestEntity deleteUpdateRequest = client.deleteParamContextUpdateRequest(contextId, updateRequestId);
|
||||
|
||||
final String failureReason = deleteUpdateRequest.getRequest().getFailureReason();
|
||||
if (!StringUtils.isBlank(failureReason)) {
|
||||
throw new NiFiClientException(failureReason);
|
||||
}
|
||||
|
||||
if (cancelled.get()) {
|
||||
throw new NiFiClientException("Unable to update parameter context, cancelling update request");
|
||||
}
|
||||
|
||||
return deleteUpdateRequest;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.command.nifi.params;
|
||||
|
||||
import org.apache.commons.cli.MissingOptionException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.nifi.toolkit.cli.api.CommandException;
|
||||
import org.apache.nifi.toolkit.cli.api.Context;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.AbstractNiFiCommand;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.StringResult;
|
||||
import org.apache.nifi.web.api.dto.ParameterContextDTO;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.Properties;
|
||||
|
||||
public class CreateParamContext extends AbstractNiFiCommand<StringResult> {
|
||||
|
||||
public CreateParamContext() {
|
||||
super("create-param-context", StringResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Creates a parameter context with the given name. " +
|
||||
"After creating the parameter context, parameters can be added using the set-param command.";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInitialize(Context context) {
|
||||
super.doInitialize(context);
|
||||
addOption(CommandOption.PARAM_CONTEXT_NAME.createOption());
|
||||
addOption(CommandOption.PARAM_CONTEXT_DESC.createOption());
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringResult doExecute(final NiFiClient client, final Properties properties)
|
||||
throws NiFiClientException, IOException, MissingOptionException, CommandException {
|
||||
|
||||
final String paramContextName = getRequiredArg(properties, CommandOption.PARAM_CONTEXT_NAME);
|
||||
final String paramContextDesc = getArg(properties, CommandOption.PARAM_CONTEXT_DESC);
|
||||
|
||||
final ParameterContextDTO paramContextDTO = new ParameterContextDTO();
|
||||
paramContextDTO.setName(paramContextName);
|
||||
paramContextDTO.setParameters(Collections.emptySet());
|
||||
|
||||
if (!StringUtils.isBlank(paramContextDesc)) {
|
||||
paramContextDTO.setDescription(paramContextDesc);
|
||||
}
|
||||
|
||||
final ParameterContextEntity paramContextEntity = new ParameterContextEntity();
|
||||
paramContextEntity.setComponent(paramContextDTO);
|
||||
paramContextEntity.setRevision(getInitialRevisionDTO());
|
||||
|
||||
final ParamContextClient paramContextClient = client.getParamContextClient();
|
||||
final ParameterContextEntity createdParamContext = paramContextClient.createParamContext(paramContextEntity);
|
||||
return new StringResult(createdParamContext.getId(), isInteractive());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.command.nifi.params;
|
||||
|
||||
import org.apache.commons.cli.MissingOptionException;
|
||||
import org.apache.nifi.toolkit.cli.api.CommandException;
|
||||
import org.apache.nifi.toolkit.cli.api.Context;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.VoidResult;
|
||||
import org.apache.nifi.web.api.dto.ParameterContextDTO;
|
||||
import org.apache.nifi.web.api.dto.ParameterDTO;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextUpdateRequestEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.Optional;
|
||||
import java.util.Properties;
|
||||
|
||||
public class DeleteParam extends AbstractUpdateParamContextCommand<VoidResult> {
|
||||
|
||||
public DeleteParam() {
|
||||
super("delete-param", VoidResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Deletes a given parameter from the given parameter context.";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInitialize(Context context) {
|
||||
super.doInitialize(context);
|
||||
addOption(CommandOption.PARAM_CONTEXT_ID.createOption());
|
||||
addOption(CommandOption.PARAM_NAME.createOption());
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoidResult doExecute(final NiFiClient client, final Properties properties)
|
||||
throws NiFiClientException, IOException, MissingOptionException, CommandException {
|
||||
|
||||
// Required args...
|
||||
final String paramContextId = getRequiredArg(properties, CommandOption.PARAM_CONTEXT_ID);
|
||||
final String paramName = getRequiredArg(properties, CommandOption.PARAM_NAME);
|
||||
|
||||
// Ensure the context exists...
|
||||
final ParamContextClient paramContextClient = client.getParamContextClient();
|
||||
final ParameterContextEntity existingEntity = paramContextClient.getParamContext(paramContextId);
|
||||
|
||||
// Determine if this is an existing param or a new one...
|
||||
final Optional<ParameterDTO> existingParam = existingEntity.getComponent().getParameters().stream()
|
||||
.map(p -> p.getParameter())
|
||||
.filter(p -> p.getName().equals(paramName))
|
||||
.findFirst();
|
||||
|
||||
if (!existingParam.isPresent()) {
|
||||
throw new NiFiClientException("Unable to delete parameter, no parameter found with name '" + paramName + "'");
|
||||
}
|
||||
|
||||
// Construct the objects for the update, a NULL value indicates to the server to removes the parameter...
|
||||
final ParameterDTO parameterDTO = existingParam.get();
|
||||
parameterDTO.setValue(null);
|
||||
parameterDTO.setDescription(null);
|
||||
parameterDTO.setSensitive(null);
|
||||
|
||||
final ParameterEntity parameterEntity = new ParameterEntity();
|
||||
parameterEntity.setParameter(parameterDTO);
|
||||
|
||||
final ParameterContextDTO parameterContextDTO = new ParameterContextDTO();
|
||||
parameterContextDTO.setId(existingEntity.getId());
|
||||
parameterContextDTO.setParameters(Collections.singleton(parameterEntity));
|
||||
|
||||
final ParameterContextEntity updatedParameterContextEntity = new ParameterContextEntity();
|
||||
updatedParameterContextEntity.setId(paramContextId);
|
||||
updatedParameterContextEntity.setComponent(parameterContextDTO);
|
||||
updatedParameterContextEntity.setRevision(existingEntity.getRevision());
|
||||
|
||||
// Submit the update request...
|
||||
final ParameterContextUpdateRequestEntity updateRequestEntity = paramContextClient.updateParamContext(updatedParameterContextEntity);
|
||||
performUpdate(paramContextClient, updatedParameterContextEntity, updateRequestEntity);
|
||||
|
||||
if (isInteractive()) {
|
||||
println();
|
||||
}
|
||||
|
||||
return VoidResult.getInstance();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.command.nifi.params;
|
||||
|
||||
import org.apache.commons.cli.MissingOptionException;
|
||||
import org.apache.nifi.toolkit.cli.api.CommandException;
|
||||
import org.apache.nifi.toolkit.cli.api.Context;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.AbstractNiFiCommand;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.StringResult;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
public class DeleteParamContext extends AbstractNiFiCommand<StringResult> {
|
||||
|
||||
public DeleteParamContext() {
|
||||
super("delete-param-context", StringResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Deletes a parameter context.";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInitialize(Context context) {
|
||||
super.doInitialize(context);
|
||||
addOption(CommandOption.PARAM_CONTEXT_ID.createOption());
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringResult doExecute(NiFiClient client, Properties properties)
|
||||
throws NiFiClientException, IOException, MissingOptionException, CommandException {
|
||||
final String paramContextId = getRequiredArg(properties, CommandOption.PARAM_CONTEXT_ID);
|
||||
|
||||
final ParamContextClient paramContextClient = client.getParamContextClient();
|
||||
final ParameterContextEntity existingParamContext = paramContextClient.getParamContext(paramContextId);
|
||||
|
||||
final String version = String.valueOf(existingParamContext.getRevision().getVersion());
|
||||
paramContextClient.deleteParamContext(paramContextId, version);
|
||||
return new StringResult(paramContextId, isInteractive());
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,130 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.command.nifi.params;
|
||||
|
||||
import org.apache.commons.cli.MissingOptionException;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.apache.nifi.toolkit.cli.api.CommandException;
|
||||
import org.apache.nifi.toolkit.cli.api.Context;
|
||||
import org.apache.nifi.toolkit.cli.api.WritableResult;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.AbstractNiFiCommand;
|
||||
import org.apache.nifi.toolkit.cli.impl.util.JacksonUtils;
|
||||
import org.apache.nifi.web.api.dto.ParameterContextDTO;
|
||||
import org.apache.nifi.web.api.dto.ParameterDTO;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterEntity;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.util.Comparator;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
public class ExportParamContext extends AbstractNiFiCommand<ExportParamContext.ExportedParamContextResult> {
|
||||
|
||||
public ExportParamContext() {
|
||||
super("export-param-context", ExportedParamContextResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Exports a given parameter context to a json representation, with the option of writing to a file. ";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInitialize(Context context) {
|
||||
addOption(CommandOption.PARAM_CONTEXT_ID.createOption());
|
||||
addOption(CommandOption.OUTPUT_FILE.createOption());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExportedParamContextResult doExecute(final NiFiClient client, final Properties properties)
|
||||
throws NiFiClientException, IOException, MissingOptionException, CommandException {
|
||||
final String paramContextId = getRequiredArg(properties, CommandOption.PARAM_CONTEXT_ID);
|
||||
final String outputFilename = getArg(properties, CommandOption.OUTPUT_FILE);
|
||||
|
||||
// retrieve the context by id
|
||||
final ParamContextClient paramContextClient = client.getParamContextClient();
|
||||
final ParameterContextEntity parameterContextEntity = paramContextClient.getParamContext(paramContextId);
|
||||
|
||||
// clear out values that don't make sense for importing to next environment
|
||||
final ParameterContextDTO parameterContext = parameterContextEntity.getComponent();
|
||||
parameterContext.setId(null);
|
||||
parameterContext.setBoundProcessGroups(null);
|
||||
|
||||
for (final ParameterEntity parameterEntity : parameterContext.getParameters()) {
|
||||
final ParameterDTO parameterDTO = parameterEntity.getParameter();
|
||||
parameterDTO.setReferencingComponents(null);
|
||||
if (parameterDTO.getSensitive()) {
|
||||
parameterDTO.setValue(null);
|
||||
}
|
||||
parameterEntity.setCanWrite(null);
|
||||
}
|
||||
|
||||
// sort the entities so that each export is in consistent order
|
||||
final Comparator<ParameterEntity> entityComparator = (p1, p2) ->{
|
||||
final String p1Name = p1.getParameter().getName();
|
||||
final String p2Name = p2.getParameter().getName();
|
||||
return p1Name.compareTo(p2Name);
|
||||
};
|
||||
|
||||
final Set<ParameterEntity> sortedEntities = new TreeSet<>(entityComparator);
|
||||
sortedEntities.addAll(parameterContext.getParameters());
|
||||
parameterContext.setParameters(sortedEntities);
|
||||
|
||||
return new ExportedParamContextResult(parameterContext, outputFilename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Result for writing the exported param context.
|
||||
*/
|
||||
public static class ExportedParamContextResult implements WritableResult<ParameterContextDTO> {
|
||||
|
||||
private final ParameterContextDTO parameterContext;
|
||||
private final String outputFilename;
|
||||
|
||||
public ExportedParamContextResult(final ParameterContextDTO parameterContext, final String outputFilename) {
|
||||
this.parameterContext = parameterContext;
|
||||
this.outputFilename = outputFilename;
|
||||
Validate.notNull(this.parameterContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(final PrintStream output) throws IOException {
|
||||
if (outputFilename != null) {
|
||||
try (final OutputStream resultOut = new FileOutputStream(outputFilename)) {
|
||||
JacksonUtils.write(parameterContext, resultOut);
|
||||
}
|
||||
} else {
|
||||
JacksonUtils.write(parameterContext, output);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterContextDTO getResult() {
|
||||
return parameterContext;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.command.nifi.params;
|
||||
|
||||
import org.apache.commons.cli.MissingOptionException;
|
||||
import org.apache.nifi.toolkit.cli.api.CommandException;
|
||||
import org.apache.nifi.toolkit.cli.api.Context;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.AbstractNiFiCommand;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.nifi.ParamContextResult;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
public class GetParamContext extends AbstractNiFiCommand<ParamContextResult> {
|
||||
|
||||
public GetParamContext() {
|
||||
super("get-param-context", ParamContextResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Retrieves a parameter context by id and list each parameter and it's value.";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInitialize(Context context) {
|
||||
addOption(CommandOption.PARAM_CONTEXT_ID.createOption());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParamContextResult doExecute(final NiFiClient client, final Properties properties)
|
||||
throws NiFiClientException, IOException, MissingOptionException, CommandException {
|
||||
final String paramContextId = getRequiredArg(properties, CommandOption.PARAM_CONTEXT_ID);
|
||||
final ParamContextClient paramContextClient = client.getParamContextClient();
|
||||
final ParameterContextEntity parameterContext = paramContextClient.getParamContext(paramContextId);
|
||||
return new ParamContextResult(getResultType(properties), parameterContext);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.command.nifi.params;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.apache.commons.cli.MissingOptionException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.nifi.toolkit.cli.api.CommandException;
|
||||
import org.apache.nifi.toolkit.cli.api.Context;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.AbstractNiFiCommand;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.StringResult;
|
||||
import org.apache.nifi.toolkit.cli.impl.util.JacksonUtils;
|
||||
import org.apache.nifi.web.api.dto.ParameterContextDTO;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
public class ImportParamContext extends AbstractNiFiCommand<StringResult> {
|
||||
|
||||
public ImportParamContext() {
|
||||
super("import-param-context", StringResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Imports a parameter context using the output from the export-param-context command as the context to import. " +
|
||||
"If the context name and context description arguments are specified, they will override what is in the context json. ";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInitialize(Context context) {
|
||||
super.doInitialize(context);
|
||||
addOption(CommandOption.PARAM_CONTEXT_NAME.createOption());
|
||||
addOption(CommandOption.PARAM_CONTEXT_DESC.createOption());
|
||||
addOption(CommandOption.INPUT_SOURCE.createOption());
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringResult doExecute(final NiFiClient client, final Properties properties)
|
||||
throws NiFiClientException, IOException, MissingOptionException, CommandException {
|
||||
// optional params
|
||||
final String paramContextName = getArg(properties, CommandOption.PARAM_CONTEXT_NAME);
|
||||
final String paramContextDesc = getArg(properties, CommandOption.PARAM_CONTEXT_DESC);
|
||||
|
||||
// read the content of the input source into memory
|
||||
final String inputSource = getRequiredArg(properties, CommandOption.INPUT_SOURCE);
|
||||
final String paramContextJson = getInputSourceContent(inputSource);
|
||||
|
||||
// unmarshall the content into the DTO object
|
||||
final ObjectMapper objectMapper = JacksonUtils.getObjectMapper();
|
||||
final ParameterContextDTO paramContext = objectMapper.readValue(paramContextJson, ParameterContextDTO.class);
|
||||
|
||||
// override context name if specified
|
||||
if (!StringUtils.isBlank(paramContextName)) {
|
||||
paramContext.setName(paramContextName);
|
||||
}
|
||||
|
||||
// override context description if specified
|
||||
if (!StringUtils.isBlank(paramContextDesc)) {
|
||||
paramContext.setDescription(paramContextDesc);
|
||||
}
|
||||
|
||||
// create the entity to wrap the context
|
||||
final ParameterContextEntity paramContextEntity = new ParameterContextEntity();
|
||||
paramContextEntity.setComponent(paramContext);
|
||||
paramContextEntity.setRevision(getInitialRevisionDTO());
|
||||
|
||||
// create the context and return the id
|
||||
final ParamContextClient paramContextClient = client.getParamContextClient();
|
||||
final ParameterContextEntity createdParamContext = paramContextClient.createParamContext(paramContextEntity);
|
||||
return new StringResult(createdParamContext.getId(), isInteractive());
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.command.nifi.params;
|
||||
|
||||
import org.apache.commons.cli.MissingOptionException;
|
||||
import org.apache.nifi.toolkit.cli.api.CommandException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.AbstractNiFiCommand;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.nifi.ParamContextsResult;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextsEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
public class ListParamContexts extends AbstractNiFiCommand<ParamContextsResult> {
|
||||
|
||||
public ListParamContexts() {
|
||||
super("list-param-contexts", ParamContextsResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Lists the parameter contexts that the current user is authorized to retrieve.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParamContextsResult doExecute(final NiFiClient client, final Properties properties)
|
||||
throws NiFiClientException, IOException, MissingOptionException, CommandException {
|
||||
final ParamContextClient contextClient = client.getParamContextClient();
|
||||
final ParameterContextsEntity contexts = contextClient.getParamContexts();
|
||||
return new ParamContextsResult(getResultType(properties), contexts);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,136 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.command.nifi.params;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.apache.commons.cli.MissingOptionException;
|
||||
import org.apache.nifi.toolkit.cli.api.CommandException;
|
||||
import org.apache.nifi.toolkit.cli.api.Context;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.VoidResult;
|
||||
import org.apache.nifi.toolkit.cli.impl.util.JacksonUtils;
|
||||
import org.apache.nifi.web.api.dto.ParameterContextDTO;
|
||||
import org.apache.nifi.web.api.dto.ParameterDTO;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextUpdateRequestEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Optional;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
|
||||
public class MergeParamContext extends AbstractUpdateParamContextCommand<VoidResult> {
|
||||
|
||||
public MergeParamContext() {
|
||||
super("merge-param-context", VoidResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Adds any parameters that exist in the exported context that don't exist in the existing context.";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInitialize(Context context) {
|
||||
super.doInitialize(context);
|
||||
addOption(CommandOption.PARAM_CONTEXT_ID.createOption());
|
||||
addOption(CommandOption.INPUT_SOURCE.createOption());
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoidResult doExecute(final NiFiClient client, final Properties properties)
|
||||
throws NiFiClientException, IOException, MissingOptionException, CommandException {
|
||||
|
||||
final String existingContextId = getRequiredArg(properties, CommandOption.PARAM_CONTEXT_ID);
|
||||
|
||||
// read the content of the input source into memory
|
||||
final String inputSource = getRequiredArg(properties, CommandOption.INPUT_SOURCE);
|
||||
final String paramContextJson = getInputSourceContent(inputSource);
|
||||
|
||||
// unmarshall the content into the DTO object
|
||||
final ObjectMapper objectMapper = JacksonUtils.getObjectMapper();
|
||||
final ParameterContextDTO incomingContext = objectMapper.readValue(paramContextJson, ParameterContextDTO.class);
|
||||
if (incomingContext.getParameters() == null) {
|
||||
incomingContext.setParameters(new LinkedHashSet<>());
|
||||
}
|
||||
|
||||
// retrieve the existing context by id
|
||||
final ParamContextClient paramContextClient = client.getParamContextClient();
|
||||
final ParameterContextEntity existingContextEntity = paramContextClient.getParamContext(existingContextId);
|
||||
|
||||
final ParameterContextDTO existingContext = existingContextEntity.getComponent();
|
||||
if (existingContext.getParameters() == null) {
|
||||
existingContext.setParameters(new LinkedHashSet<>());
|
||||
}
|
||||
|
||||
final Set<ParameterEntity> createdParameters = new LinkedHashSet<>();
|
||||
|
||||
// determine which incoming params are not in the set of existing params
|
||||
for (final ParameterEntity incomingParameterEntity : incomingContext.getParameters()) {
|
||||
final ParameterDTO incomingParameter = incomingParameterEntity.getParameter();
|
||||
final String parameterName = incomingParameter.getName();
|
||||
|
||||
final Optional<ParameterDTO> existingParameter = existingContext.getParameters().stream()
|
||||
.map(p -> p.getParameter())
|
||||
.filter(p -> p.getName().equals(parameterName))
|
||||
.findFirst();
|
||||
|
||||
if (!existingParameter.isPresent()) {
|
||||
final ParameterEntity createdParam = createParameter(incomingParameter);
|
||||
createdParameters.add(createdParam);
|
||||
}
|
||||
}
|
||||
|
||||
// create a new entity to issue an update request with the newly added params
|
||||
final ParameterContextDTO updatedContextDto = new ParameterContextDTO();
|
||||
updatedContextDto.setId(existingContext.getId());
|
||||
updatedContextDto.setParameters(createdParameters);
|
||||
|
||||
final ParameterContextEntity updatedContextEntity = new ParameterContextEntity();
|
||||
updatedContextEntity.setId(existingContext.getId());
|
||||
updatedContextEntity.setComponent(updatedContextDto);
|
||||
updatedContextEntity.setRevision(existingContextEntity.getRevision());
|
||||
|
||||
// Submit the update request...
|
||||
final ParameterContextUpdateRequestEntity updateRequestEntity = paramContextClient.updateParamContext(updatedContextEntity);
|
||||
performUpdate(paramContextClient, updatedContextEntity, updateRequestEntity);
|
||||
|
||||
printlnIfInteractive("");
|
||||
return VoidResult.getInstance();
|
||||
}
|
||||
|
||||
private ParameterEntity createParameter(final ParameterDTO incomingParam) throws CommandException {
|
||||
final String parameterName = incomingParam.getName();
|
||||
printlnIfInteractive("Found parameter to add - '" + parameterName + "'");
|
||||
|
||||
final ParameterDTO newParameter = new ParameterDTO();
|
||||
newParameter.setName(incomingParam.getName());
|
||||
newParameter.setDescription(incomingParam.getDescription());
|
||||
newParameter.setSensitive(incomingParam.getSensitive());
|
||||
newParameter.setValue(incomingParam.getValue());
|
||||
|
||||
final ParameterEntity newParameterEntity = new ParameterEntity();
|
||||
newParameterEntity.setParameter(newParameter);
|
||||
return newParameterEntity;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,129 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.command.nifi.params;
|
||||
|
||||
import org.apache.commons.cli.MissingOptionException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.nifi.toolkit.cli.api.CommandException;
|
||||
import org.apache.nifi.toolkit.cli.api.Context;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ParamContextClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.VoidResult;
|
||||
import org.apache.nifi.web.api.dto.ParameterContextDTO;
|
||||
import org.apache.nifi.web.api.dto.ParameterDTO;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextUpdateRequestEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.Optional;
|
||||
import java.util.Properties;
|
||||
|
||||
public class SetParam extends AbstractUpdateParamContextCommand<VoidResult> {
|
||||
|
||||
public SetParam() {
|
||||
super("set-param", VoidResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Creates or updates a parameter in the given parameter context.";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInitialize(Context context) {
|
||||
super.doInitialize(context);
|
||||
addOption(CommandOption.PARAM_CONTEXT_ID.createOption());
|
||||
addOption(CommandOption.PARAM_NAME.createOption());
|
||||
addOption(CommandOption.PARAM_DESC.createOption());
|
||||
addOption(CommandOption.PARAM_VALUE.createOption());
|
||||
addOption(CommandOption.PARAM_SENSITIVE.createOption());
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoidResult doExecute(final NiFiClient client, final Properties properties)
|
||||
throws NiFiClientException, IOException, MissingOptionException, CommandException {
|
||||
|
||||
// Required args...
|
||||
final String paramContextId = getRequiredArg(properties, CommandOption.PARAM_CONTEXT_ID);
|
||||
final String paramName = getRequiredArg(properties, CommandOption.PARAM_NAME);
|
||||
|
||||
// Optional args...
|
||||
final String paramValue = getArg(properties, CommandOption.PARAM_VALUE);
|
||||
final String paramDesc = getArg(properties, CommandOption.PARAM_DESC);
|
||||
final String paramSensitive = getArg(properties, CommandOption.PARAM_SENSITIVE);
|
||||
if (!StringUtils.isBlank(paramSensitive) && !"true".equals(paramSensitive) && !"false".equals(paramSensitive)) {
|
||||
throw new IllegalArgumentException("Parameter sensitive flag must be one of 'true' or 'false'");
|
||||
}
|
||||
|
||||
// Ensure the context exists...
|
||||
final ParamContextClient paramContextClient = client.getParamContextClient();
|
||||
final ParameterContextEntity existingParameterContextEntity = paramContextClient.getParamContext(paramContextId);
|
||||
final ParameterContextDTO existingParameterContextDTO = existingParameterContextEntity.getComponent();
|
||||
|
||||
// Determine if this is an existing param or a new one...
|
||||
final Optional<ParameterDTO> existingParam = existingParameterContextDTO.getParameters().stream()
|
||||
.map(p -> p.getParameter())
|
||||
.filter(p -> p.getName().equals(paramName))
|
||||
.findFirst();
|
||||
|
||||
if (!existingParam.isPresent() && paramValue == null) {
|
||||
throw new IllegalArgumentException("A parameter value is required when creating a new parameter");
|
||||
}
|
||||
|
||||
// Construct the objects for the update...
|
||||
final ParameterDTO parameterDTO = existingParam.isPresent() ? existingParam.get() : new ParameterDTO();
|
||||
parameterDTO.setName(paramName);
|
||||
|
||||
if (paramValue != null) {
|
||||
parameterDTO.setValue(paramValue);
|
||||
}
|
||||
|
||||
if (paramDesc != null) {
|
||||
parameterDTO.setDescription(paramDesc);
|
||||
}
|
||||
|
||||
if (!StringUtils.isBlank(paramSensitive)) {
|
||||
parameterDTO.setSensitive(Boolean.valueOf(paramSensitive));
|
||||
}
|
||||
|
||||
final ParameterEntity parameterEntity = new ParameterEntity();
|
||||
parameterEntity.setParameter(parameterDTO);
|
||||
|
||||
final ParameterContextDTO parameterContextDTO = new ParameterContextDTO();
|
||||
parameterContextDTO.setId(existingParameterContextEntity.getId());
|
||||
parameterContextDTO.setParameters(Collections.singleton(parameterEntity));
|
||||
|
||||
final ParameterContextEntity updatedParameterContextEntity = new ParameterContextEntity();
|
||||
updatedParameterContextEntity.setId(paramContextId);
|
||||
updatedParameterContextEntity.setComponent(parameterContextDTO);
|
||||
updatedParameterContextEntity.setRevision(existingParameterContextEntity.getRevision());
|
||||
|
||||
// Submit the update request...
|
||||
final ParameterContextUpdateRequestEntity updateRequestEntity = paramContextClient.updateParamContext(updatedParameterContextEntity);
|
||||
performUpdate(paramContextClient, updatedParameterContextEntity, updateRequestEntity);
|
||||
|
||||
if (isInteractive()) {
|
||||
println();
|
||||
}
|
||||
|
||||
return VoidResult.getInstance();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.command.nifi.pg;
|
||||
|
||||
import org.apache.commons.cli.MissingOptionException;
|
||||
import org.apache.nifi.toolkit.cli.api.CommandException;
|
||||
import org.apache.nifi.toolkit.cli.api.Context;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ProcessGroupClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.AbstractNiFiCommand;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.StringResult;
|
||||
import org.apache.nifi.util.StringUtils;
|
||||
import org.apache.nifi.web.api.dto.ParameterContextReferenceDTO;
|
||||
import org.apache.nifi.web.api.dto.ProcessGroupDTO;
|
||||
import org.apache.nifi.web.api.entity.ProcessGroupEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
public class PGGetParamContext extends AbstractNiFiCommand<StringResult> {
|
||||
|
||||
public PGGetParamContext() {
|
||||
super("pg-get-param-context", StringResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Gets the id of the parameter context that is bound to the given process group.";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInitialize(Context context) {
|
||||
super.doInitialize(context);
|
||||
addOption(CommandOption.PG_ID.createOption());
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringResult doExecute(final NiFiClient client, final Properties properties)
|
||||
throws NiFiClientException, IOException, MissingOptionException, CommandException {
|
||||
final String pgId = getRequiredArg(properties, CommandOption.PG_ID);
|
||||
final ProcessGroupClient pgClient = client.getProcessGroupClient();
|
||||
final ProcessGroupEntity pgEntity = pgClient.getProcessGroup(pgId);
|
||||
|
||||
final String paramContextId = getParamContextId(pgEntity.getComponent());
|
||||
return new StringResult(paramContextId, isInteractive());
|
||||
}
|
||||
|
||||
private String getParamContextId(final ProcessGroupDTO processGroup) {
|
||||
if (processGroup == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
final ParameterContextReferenceDTO parameterContextReference = processGroup.getParameterContext();
|
||||
if (parameterContextReference == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
final String paramContextId = parameterContextReference.getId();
|
||||
if (StringUtils.isBlank(paramContextId)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return paramContextId;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.command.nifi.pg;
|
||||
|
||||
import org.apache.commons.cli.MissingOptionException;
|
||||
import org.apache.nifi.toolkit.cli.api.CommandException;
|
||||
import org.apache.nifi.toolkit.cli.api.Context;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
|
||||
import org.apache.nifi.toolkit.cli.impl.client.nifi.ProcessGroupClient;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.nifi.AbstractNiFiCommand;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.VoidResult;
|
||||
import org.apache.nifi.web.api.dto.ParameterContextReferenceDTO;
|
||||
import org.apache.nifi.web.api.dto.ProcessGroupDTO;
|
||||
import org.apache.nifi.web.api.entity.ProcessGroupEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
public class PGSetParamContext extends AbstractNiFiCommand<VoidResult> {
|
||||
|
||||
public PGSetParamContext() {
|
||||
super("pg-set-param-context", VoidResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Sets the parameter context bound to the given process group.";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInitialize(Context context) {
|
||||
super.doInitialize(context);
|
||||
addOption(CommandOption.PG_ID.createOption());
|
||||
addOption(CommandOption.PARAM_CONTEXT_ID.createOption());
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoidResult doExecute(final NiFiClient client, final Properties properties)
|
||||
throws NiFiClientException, IOException, MissingOptionException, CommandException {
|
||||
|
||||
final String pgId = getRequiredArg(properties, CommandOption.PG_ID);
|
||||
final String paramContextId = getRequiredArg(properties, CommandOption.PARAM_CONTEXT_ID);
|
||||
|
||||
final ProcessGroupClient pgClient = client.getProcessGroupClient();
|
||||
final ProcessGroupEntity pgEntity = pgClient.getProcessGroup(pgId);
|
||||
|
||||
final ParameterContextReferenceDTO parameterContextReference = new ParameterContextReferenceDTO();
|
||||
parameterContextReference.setId(paramContextId);
|
||||
|
||||
final ProcessGroupDTO updatedDTO = new ProcessGroupDTO();
|
||||
updatedDTO.setId(pgId);
|
||||
updatedDTO.setParameterContext(parameterContextReference);
|
||||
|
||||
final ProcessGroupEntity updatedEntity = new ProcessGroupEntity();
|
||||
updatedEntity.setId(pgId);
|
||||
updatedEntity.setComponent(updatedDTO);
|
||||
updatedEntity.setRevision(pgEntity.getRevision());
|
||||
|
||||
pgClient.updateProcessGroup(updatedEntity);
|
||||
return VoidResult.getInstance();
|
||||
}
|
||||
|
||||
}
|
|
@ -18,7 +18,6 @@ package org.apache.nifi.toolkit.cli.impl.command.registry.flow;
|
|||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.apache.commons.cli.ParseException;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.nifi.registry.client.FlowClient;
|
||||
import org.apache.nifi.registry.client.FlowSnapshotClient;
|
||||
import org.apache.nifi.registry.client.NiFiRegistryClient;
|
||||
|
@ -33,11 +32,6 @@ import org.apache.nifi.toolkit.cli.impl.result.StringResult;
|
|||
import org.apache.nifi.toolkit.cli.impl.util.JacksonUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
|
@ -67,16 +61,7 @@ public class ImportFlowVersion extends AbstractNiFiRegistryCommand<StringResult>
|
|||
final String flowId = getRequiredArg(properties, CommandOption.FLOW_ID);
|
||||
final String inputFile = getRequiredArg(properties, CommandOption.INPUT_SOURCE);
|
||||
|
||||
String contents;
|
||||
try {
|
||||
// try a public resource URL
|
||||
URL url = new URL(inputFile);
|
||||
contents = IOUtils.toString(url, StandardCharsets.UTF_8);
|
||||
} catch (MalformedURLException e) {
|
||||
// assume a local file then
|
||||
URI uri = Paths.get(inputFile).toAbsolutePath().toUri();
|
||||
contents = IOUtils.toString(uri, StandardCharsets.UTF_8);
|
||||
}
|
||||
final String contents = getInputSourceContent(inputFile);
|
||||
|
||||
final FlowClient flowClient = client.getFlowClient();
|
||||
final FlowSnapshotClient snapshotClient = client.getFlowSnapshotClient();
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.result.nifi;
|
||||
|
||||
import org.apache.nifi.toolkit.cli.api.ResultType;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.AbstractWritableResult;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.writer.DynamicTableWriter;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.writer.Table;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.writer.TableWriter;
|
||||
import org.apache.nifi.web.api.dto.ParameterContextDTO;
|
||||
import org.apache.nifi.web.api.dto.ParameterDTO;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextEntity;
|
||||
import org.apache.nifi.web.api.entity.ParameterEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class ParamContextResult extends AbstractWritableResult<ParameterContextEntity> {
|
||||
|
||||
private final ParameterContextEntity parameterContext;
|
||||
|
||||
public ParamContextResult(final ResultType resultType, final ParameterContextEntity parameterContext) {
|
||||
super(resultType);
|
||||
this.parameterContext = parameterContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeSimpleResult(final PrintStream output) throws IOException {
|
||||
final ParameterContextDTO parameterContextDTO = parameterContext.getComponent();
|
||||
|
||||
final Set<ParameterEntity> paramEntities = parameterContextDTO.getParameters() == null
|
||||
? Collections.emptySet() : parameterContextDTO.getParameters();
|
||||
|
||||
final Set<ParameterDTO> paramDTOs = paramEntities.stream()
|
||||
.map(p -> p.getParameter())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
final List<ParameterDTO> sortedParams =paramDTOs.stream()
|
||||
.sorted(Comparator.comparing(ParameterDTO::getName))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
final Table table = new Table.Builder()
|
||||
.column("#", 3, 3, false)
|
||||
.column("Name", 20, 60, false)
|
||||
.column("Value", 20, 80, false)
|
||||
.column("Sensitive", 10, 10, false)
|
||||
.column("Description", 20, 80, true)
|
||||
.build();
|
||||
|
||||
for (int i = 0; i < sortedParams.size(); i++) {
|
||||
final ParameterDTO r = sortedParams.get(i);
|
||||
table.addRow(String.valueOf(i+1), r.getName(), r.getValue(), r.getSensitive().toString(), r.getDescription());
|
||||
}
|
||||
|
||||
final TableWriter tableWriter = new DynamicTableWriter();
|
||||
tableWriter.write(table, output);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterContextEntity getResult() {
|
||||
return parameterContext;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.nifi.toolkit.cli.impl.result.nifi;
|
||||
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.apache.nifi.toolkit.cli.api.Context;
|
||||
import org.apache.nifi.toolkit.cli.api.ReferenceResolver;
|
||||
import org.apache.nifi.toolkit.cli.api.Referenceable;
|
||||
import org.apache.nifi.toolkit.cli.api.ResolvedReference;
|
||||
import org.apache.nifi.toolkit.cli.api.ResultType;
|
||||
import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.AbstractWritableResult;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.writer.DynamicTableWriter;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.writer.Table;
|
||||
import org.apache.nifi.toolkit.cli.impl.result.writer.TableWriter;
|
||||
import org.apache.nifi.web.api.dto.ParameterContextDTO;
|
||||
import org.apache.nifi.web.api.entity.ParameterContextsEntity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class ParamContextsResult extends AbstractWritableResult<ParameterContextsEntity> implements Referenceable {
|
||||
|
||||
private final ParameterContextsEntity parameterContexts;
|
||||
private final List<ParameterContextDTO> results;
|
||||
|
||||
public ParamContextsResult(final ResultType resultType, final ParameterContextsEntity parameterContexts) {
|
||||
super(resultType);
|
||||
this.parameterContexts = Validate.notNull(parameterContexts);
|
||||
this.results = new ArrayList<>();
|
||||
|
||||
// If there is a param context that the user doesn't have permissions to then the entity will be returned with
|
||||
// a null component so we need to create a place holder DTO that has only the id populated
|
||||
Optional.ofNullable(parameterContexts.getParameterContexts()).orElse(Collections.emptySet())
|
||||
.forEach(pc -> {
|
||||
if (pc.getComponent() == null) {
|
||||
final ParameterContextDTO dto = new ParameterContextDTO();
|
||||
dto.setId(pc.getId());
|
||||
dto.setName(pc.getId());
|
||||
results.add(dto);
|
||||
} else {
|
||||
results.add(pc.getComponent());
|
||||
}
|
||||
});
|
||||
|
||||
// NOTE: it is important that the order the contexts are printed is the same order for the ReferenceResolver
|
||||
Collections.sort(results, Comparator.comparing(ParameterContextDTO::getName));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeSimpleResult(final PrintStream output) throws IOException {
|
||||
final Table table = new Table.Builder()
|
||||
.column("#", 3, 3, false)
|
||||
.column("Id", 36, 36, false)
|
||||
.column("Name", 20, 60, true)
|
||||
.column("Description", 40, 60, true)
|
||||
.build();
|
||||
|
||||
for (int i = 0; i < results.size(); i++) {
|
||||
final ParameterContextDTO r = results.get(i);
|
||||
table.addRow("" + (i+1), r.getId(), r.getName(), r.getDescription());
|
||||
}
|
||||
|
||||
final TableWriter tableWriter = new DynamicTableWriter();
|
||||
tableWriter.write(table, output);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterContextsEntity getResult() {
|
||||
return parameterContexts;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReferenceResolver createReferenceResolver(final Context context) {
|
||||
final Map<Integer, ParameterContextDTO> backRefs = new HashMap<>();
|
||||
final AtomicInteger position = new AtomicInteger(0);
|
||||
results.forEach(pc -> backRefs.put(position.incrementAndGet(), pc));
|
||||
|
||||
return new ReferenceResolver() {
|
||||
@Override
|
||||
public ResolvedReference resolve(final CommandOption option, final Integer position) {
|
||||
final ParameterContextDTO parameterContext = backRefs.get(position);
|
||||
if (parameterContext != null) {
|
||||
return new ResolvedReference(option, position, parameterContext.getName(), parameterContext.getId());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return backRefs.isEmpty();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue