Skip to content

Commit 760c970

Browse files
committed
fix(#1280): Improve Camel JBang Kubernetes plugin builder API
1 parent 56a054a commit 760c970

File tree

10 files changed

+519
-535
lines changed

10 files changed

+519
-535
lines changed

endpoints/citrus-camel/src/main/java/org/citrusframework/camel/actions/AddCamelPluginAction.java

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616

1717
package org.citrusframework.camel.actions;
1818

19-
import org.citrusframework.context.TestContext;
20-
import org.slf4j.Logger;
21-
import org.slf4j.LoggerFactory;
22-
2319
import java.util.ArrayList;
2420
import java.util.Arrays;
2521
import java.util.List;
2622

23+
import org.citrusframework.context.TestContext;
24+
import org.slf4j.Logger;
25+
import org.slf4j.LoggerFactory;
26+
2727
/**
2828
* Install a specific plugin to a Camel JBang tooling.
2929
*/
@@ -46,26 +46,17 @@ public AddCamelPluginAction(AddCamelPluginAction.Builder builder) {
4646
this.args = builder.args;
4747
}
4848

49-
50-
public String getName() {
51-
return name;
52-
}
53-
5449
@Override
5550
public void doExecute(TestContext context) {
56-
logger.info("Adding Camel plugin '%s' ...".formatted(name));
51+
String pluginName = context.replaceDynamicContentInString(name);
5752
List<String> installedPlugins = camelJBang().getPlugins();
5853

59-
if (!installedPlugins.contains(name)) {
60-
List<String> fullArgs = new ArrayList<>();
61-
fullArgs.add("add");
62-
fullArgs.add(name);
63-
if (args != null){
64-
fullArgs.addAll(args);
65-
}
66-
camelJBang().camelApp().run("plugin", fullArgs.toArray(String[]::new));
54+
if (!installedPlugins.contains(pluginName)) {
55+
logger.info("Adding Camel plugin '%s' ...".formatted(pluginName));
56+
camelJBang().addPlugin(pluginName, context.resolveDynamicValuesInList(args).toArray(String[]::new));
57+
logger.info("Camel plugin '%s' successfully installed".formatted(pluginName));
6758
} else {
68-
logger.info("Adding Camel plugin '%s' skipped: already installed".formatted(name));
59+
logger.info("Camel plugin '%s' already installed".formatted(pluginName));
6960
}
7061

7162
}

endpoints/citrus-camel/src/main/java/org/citrusframework/camel/actions/CamelJBangActionBuilder.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -86,25 +86,22 @@ public CamelStopIntegrationAction.Builder stop(String name) {
8686
return builder;
8787
}
8888

89-
9089
/**
91-
* Add a plugin to Camel JBang.
90+
* Perform actions related to Camel JBang plugins.
91+
* @return
9292
*/
93-
public AddCamelPluginAction.Builder addPlugin() {
94-
AddCamelPluginAction.Builder builder = new AddCamelPluginAction.Builder();
95-
93+
public CamelPluginActionBuilder plugin() {
94+
CamelPluginActionBuilder builder = new CamelPluginActionBuilder();
9695
this.delegate = builder;
9796
return builder;
9897
}
9998

100-
101-
10299
/**
103-
* Export a Camel project given Camel integration.
100+
* Perform actions related to Camel JBang Kubernetes plugin.
101+
* @return
104102
*/
105-
public CamelKubernetesRunIntegrationAction.Builder exportKubernetesPlugin() {
106-
CamelKubernetesRunIntegrationAction.Builder builder = new CamelKubernetesRunIntegrationAction.Builder();
107-
103+
public CamelKubernetesPluginActionBuilder kubernetes() {
104+
CamelKubernetesPluginActionBuilder builder = new CamelKubernetesPluginActionBuilder();
108105
this.delegate = builder;
109106
return builder;
110107
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*
2+
* Copyright the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.citrusframework.camel.actions;
18+
19+
import org.citrusframework.spi.AbstractReferenceResolverAwareTestActionBuilder;
20+
import org.citrusframework.spi.ReferenceResolver;
21+
import org.citrusframework.util.ObjectHelper;
22+
23+
public class CamelKubernetesPluginActionBuilder extends AbstractReferenceResolverAwareTestActionBuilder<AbstractCamelJBangAction> {
24+
25+
/**
26+
* Build and deploy a Camel project to Kubernetes
27+
*/
28+
public CamelKubernetesRunIntegrationAction.Builder run() {
29+
CamelKubernetesRunIntegrationAction.Builder builder = new CamelKubernetesRunIntegrationAction.Builder();
30+
this.delegate = builder;
31+
return builder;
32+
}
33+
34+
/**
35+
* Delete a deployed Camel application using the previous exported Kubernetes manifest.
36+
*/
37+
public CamelKubernetesDeleteAction.Builder delete() {
38+
CamelKubernetesDeleteAction.Builder builder = new CamelKubernetesDeleteAction.Builder();
39+
this.delegate = builder;
40+
return builder;
41+
}
42+
43+
/**
44+
* Verify the Kubernetes pod status and logs of a deployed Camel integration.
45+
*/
46+
public CamelKubernetesVerifyAction.Builder verify() {
47+
CamelKubernetesVerifyAction.Builder builder = new CamelKubernetesVerifyAction.Builder();
48+
this.delegate = builder;
49+
return builder;
50+
}
51+
52+
/**
53+
* Export a Camel project from given Camel integration.
54+
*/
55+
public CamelKubernetesRunIntegrationAction.Builder export() {
56+
CamelKubernetesRunIntegrationAction.Builder builder = new CamelKubernetesRunIntegrationAction.Builder();
57+
this.delegate = builder;
58+
return builder;
59+
}
60+
61+
/**
62+
* Sets the bean reference resolver.
63+
* @param referenceResolver
64+
*/
65+
public CamelKubernetesPluginActionBuilder withReferenceResolver(ReferenceResolver referenceResolver) {
66+
this.referenceResolver = referenceResolver;
67+
return this;
68+
}
69+
70+
@Override
71+
public AbstractCamelJBangAction build() {
72+
ObjectHelper.assertNotNull(delegate, "Missing delegate action to build");
73+
return delegate.build();
74+
}
75+
76+
}

endpoints/citrus-camel/src/main/java/org/citrusframework/camel/actions/CamelPluginAction.java

Lines changed: 0 additions & 125 deletions
This file was deleted.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Copyright the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.citrusframework.camel.actions;
18+
19+
import org.citrusframework.spi.AbstractReferenceResolverAwareTestActionBuilder;
20+
import org.citrusframework.spi.ReferenceResolver;
21+
import org.citrusframework.util.ObjectHelper;
22+
23+
public class CamelPluginActionBuilder extends AbstractReferenceResolverAwareTestActionBuilder<AbstractCamelJBangAction> {
24+
25+
/**
26+
* Processor calling given Camel route as part of the message processing.
27+
* @return
28+
*/
29+
public AddCamelPluginAction.Builder add() {
30+
AddCamelPluginAction.Builder builder = new AddCamelPluginAction.Builder();
31+
this.delegate = builder;
32+
return builder;
33+
}
34+
35+
/**
36+
* Sets the bean reference resolver.
37+
* @param referenceResolver
38+
*/
39+
public CamelPluginActionBuilder withReferenceResolver(ReferenceResolver referenceResolver) {
40+
this.referenceResolver = referenceResolver;
41+
return this;
42+
}
43+
44+
@Override
45+
public AbstractCamelJBangAction build() {
46+
ObjectHelper.assertNotNull(delegate, "Missing delegate action to build");
47+
return delegate.build();
48+
}
49+
50+
}

endpoints/citrus-camel/src/main/java/org/citrusframework/camel/jbang/CamelJBang.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
import org.slf4j.Logger;
3939
import org.slf4j.LoggerFactory;
4040

41+
import static org.citrusframework.jbang.JBangSupport.OK_EXIT_CODE;
42+
4143
/**
4244
* Camel JBang app.
4345
*/
@@ -134,7 +136,7 @@ public ProcessAndOutput run(String name, String file, List<String> resources, St
134136
*/
135137
public void stop(Long pid) {
136138
ProcessAndOutput p = camelApp.run("stop", String.valueOf(pid)) ;
137-
if (p.getProcess().exitValue() != JBangSupport.OK_EXIT_CODE) {
139+
if (p.getProcess().exitValue() != OK_EXIT_CODE) {
138140
throw new CitrusRuntimeException(String.format("Failed to stop Camel K integration - exit code %d", p.getProcess().exitValue()));
139141
}
140142
}
@@ -259,5 +261,17 @@ public List<String> getPlugins() {
259261
}
260262
}
261263

264+
public void addPlugin(String pluginName, String ... args) {
265+
List<String> fullArgs = new ArrayList<>();
266+
fullArgs.add("add");
267+
fullArgs.add(pluginName);
268+
fullArgs.addAll(Arrays.asList(args));
269+
270+
ProcessAndOutput pao = camelApp.run("plugin", fullArgs);
271+
int exitValue = pao.getProcess().exitValue();
272+
if (exitValue != OK_EXIT_CODE && exitValue != 1) {
273+
throw new CitrusRuntimeException("Error while adding Camel JBang plugin. Exit code: " + exitValue);
274+
}
275+
}
262276

263277
}

0 commit comments

Comments
 (0)