You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2022/10/13 21:01:49 UTC
[camel-karavan] branch main updated: First version started on Openshift
This is an automated email from the ASF dual-hosted git repository.
marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
The following commit(s) were added to refs/heads/main by this push:
new 102167c First version started on Openshift
102167c is described below
commit 102167c4413bc7b11282ed2ee34a6df12bda84fa
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Thu Oct 13 17:01:41 2022 -0400
First version started on Openshift
---
.../camel/karavan/service/KubernetesService.java | 2 +-
.../java/org/apache/camel/karavan/Karavan.java | 9 ----
.../apache/camel/karavan/KaravanDeployment.java | 49 +++++++++++++++-------
.../apache/camel/karavan/KaravanReconciler.java | 41 +++++++++---------
.../org/apache/camel/karavan/KaravanRoute.java | 48 +++++++++++++++++++++
.../src/main/resources/application.properties | 8 ++++
6 files changed, 110 insertions(+), 47 deletions(-)
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
index ed8e785..7962f66 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
@@ -134,7 +134,7 @@ public class KubernetesService {
.withNamespace(namespace)
.build();
- PipelineRef ref = new PipelineRefBuilder().withName("karavan-quarkus").build();
+ PipelineRef ref = new PipelineRefBuilder().withName("karavan-pipeline-build-quarkus").build();
PipelineRunSpec spec = new PipelineRunSpecBuilder()
.withPipelineRef(ref)
diff --git a/karavan-operator/src/main/java/org/apache/camel/karavan/Karavan.java b/karavan-operator/src/main/java/org/apache/camel/karavan/Karavan.java
index ac95084..978b6c9 100644
--- a/karavan-operator/src/main/java/org/apache/camel/karavan/Karavan.java
+++ b/karavan-operator/src/main/java/org/apache/camel/karavan/Karavan.java
@@ -10,14 +10,5 @@ import io.fabric8.kubernetes.model.annotation.*;
@Plural(Constants.PLURAL_NAME)
public class Karavan extends CustomResource<KaravanSpec, KaravanStatus> implements Namespaced {
- @Override
- protected KaravanSpec initSpec() {
- return new KaravanSpec();
- }
-
- @Override
- protected KaravanStatus initStatus() {
- return new KaravanStatus();
- }
}
diff --git a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanDeployment.java b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanDeployment.java
index 979775d..1c6b6c9 100644
--- a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanDeployment.java
+++ b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanDeployment.java
@@ -1,12 +1,16 @@
package org.apache.camel.karavan;
+import io.fabric8.kubernetes.api.model.EnvVar;
+import io.fabric8.kubernetes.api.model.EnvVarBuilder;
import io.fabric8.kubernetes.api.model.EnvVarSourceBuilder;
+import io.fabric8.kubernetes.api.model.ObjectFieldSelector;
import io.fabric8.kubernetes.api.model.ObjectFieldSelectorBuilder;
import io.fabric8.kubernetes.api.model.OwnerReference;
import io.fabric8.kubernetes.api.model.OwnerReferenceBuilder;
import io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource;
import io.fabric8.kubernetes.api.model.Quantity;
import io.fabric8.kubernetes.api.model.ResourceRequirementsBuilder;
+import io.fabric8.kubernetes.api.model.SecretKeySelector;
import io.fabric8.kubernetes.api.model.VolumeBuilder;
import io.fabric8.kubernetes.api.model.VolumeMountBuilder;
import io.fabric8.kubernetes.api.model.apps.Deployment;
@@ -16,6 +20,8 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernete
import org.eclipse.microprofile.config.inject.ConfigProperty;
import javax.inject.Inject;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
public class KaravanDeployment extends CRUDKubernetesDependentResource<Deployment, Karavan> {
@@ -24,7 +30,7 @@ public class KaravanDeployment extends CRUDKubernetesDependentResource<Deploymen
String version;
@ConfigProperty(name = "karavan.image")
- String image;
+ String baseImage;
@Inject
KaravanReconciler karavanReconciler;
@@ -36,6 +42,31 @@ public class KaravanDeployment extends CRUDKubernetesDependentResource<Deploymen
@Override
@SuppressWarnings("unchecked")
public Deployment desired(Karavan karavan, Context<Karavan> context) {
+
+ String image = baseImage + ":" + version;
+ List<EnvVar> envVarList = new ArrayList<>();
+
+ envVarList.add(
+ new EnvVar("KUBERNETES_NAMESPACE", null, new EnvVarSourceBuilder().withFieldRef(new ObjectFieldSelector("","metadata.namespace")).build())
+ );
+ if (karavan.getSpec().getAuth() == "basic") {
+ image = baseImage + "-basic:" + version;
+ envVarList.add(
+ new EnvVar("MASTER_PASSWORD", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("master-password","karavan", false)).build())
+ );
+ } else if (karavan.getSpec().getAuth() == "oidc") {
+ image = baseImage + "-oidc:" + version;
+ envVarList.add(
+ new EnvVar("OIDC_FRONTEND_URL", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("oidc-frontend-url","karavan", false)).build())
+ );
+ envVarList.add(
+ new EnvVar("OIDC_SERVER_URL", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("oidc-server-url","karavan", false)).build())
+ );
+ envVarList.add(
+ new EnvVar("OIDC_SECRET", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("oidc-secret","karavan", false)).build())
+ );
+ }
+
return new DeploymentBuilder()
.withNewMetadata()
.withName(Constants.NAME)
@@ -58,13 +89,9 @@ public class KaravanDeployment extends CRUDKubernetesDependentResource<Deploymen
.withNewSpec()
.addNewContainer()
.withName(Constants.NAME)
-// .withImage(getImageName(karavan))
- .withImage("ghcr.io/apache/camel-karavan:3.18.4") // TODO: set correct version after
+ .withImage(image)
.withImagePullPolicy("Always")
- .addNewEnv()
- .withName("KUBERNETES_NAMESPACE")
- .withValueFrom(new EnvVarSourceBuilder().withFieldRef(new ObjectFieldSelectorBuilder().withFieldPath("metadata.namespace").build()).build())
- .endEnv()
+ .withEnv(envVarList)
.addNewPort()
.withContainerPort(8080)
.withName(Constants.NAME)
@@ -80,14 +107,6 @@ public class KaravanDeployment extends CRUDKubernetesDependentResource<Deploymen
.build();
}
- private String getImageName(Karavan karavan) {
- String auth = karavan.getSpec().getAuth();
- switch (auth){
- case "oidc": return image + "-oidc:" + version;
- case "basic": return image + "-basic:" + version;
- default: return image + ":" + version;
- }
- }
private OwnerReference createOwnerReference(Karavan resource) {
final var metadata = resource.getMetadata();
diff --git a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanReconciler.java b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanReconciler.java
index 50e85c0..761ddde 100644
--- a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanReconciler.java
+++ b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanReconciler.java
@@ -5,7 +5,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ContextInitializer;
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
@@ -16,31 +15,29 @@ import java.util.Map;
import static io.javaoperatorsdk.operator.api.reconciler.Constants.WATCH_ALL_NAMESPACES;
-@ControllerConfiguration(namespaces = WATCH_ALL_NAMESPACES, name = "karavan", dependents = {
- @Dependent(type = KaravanServiceAccount.class),
- @Dependent(type = KaravanRole.class),
- @Dependent(type = KaravanRoleBinding.class),
- @Dependent(type = KaravanRoleBindingView.class),
- @Dependent(type = KaravanPvcData.class, name = Constants.PVC_DATA),
- @Dependent(type = KaravanPvcM2Cache.class, name = Constants.PVC_M2_CACHE),
- @Dependent(type = KaravanPvcJbang.class, name = Constants.PVC_JBANG),
- @Dependent(type = KaravanTektonTask.class),
- @Dependent(type = KaravanTektonPipeline.class),
- @Dependent(type = KaravanDeployment.class),
- @Dependent(name = "service", type = KaravanService.class),
+@ControllerConfiguration(namespaces = WATCH_ALL_NAMESPACES, name = "camel-karavan-operator",
+ dependents = {
+ @Dependent(type = KaravanServiceAccount.class),
+ @Dependent(type = KaravanRole.class),
+ @Dependent(type = KaravanRoleBinding.class),
+ @Dependent(type = KaravanRoleBindingView.class),
+ @Dependent(type = KaravanPvcData.class, name = Constants.PVC_DATA),
+ @Dependent(type = KaravanPvcM2Cache.class, name = Constants.PVC_M2_CACHE),
+ @Dependent(type = KaravanPvcJbang.class, name = Constants.PVC_JBANG),
+ @Dependent(type = KaravanTektonTask.class),
+ @Dependent(type = KaravanTektonPipeline.class),
+ @Dependent(type = KaravanDeployment.class),
+ @Dependent(name = "service", type = KaravanService.class),
+ @Dependent(type = KaravanRoute.class, dependsOn = "service", reconcilePrecondition = KaravanRoute.class)
// @Dependent(type = IngressDependent.class, dependsOn = "service", readyPostcondition = IngressDependent.class)
-})
-public class KaravanReconciler implements Reconciler<Karavan>, ContextInitializer<Karavan> {
+ })
+public class KaravanReconciler implements Reconciler<Karavan> {
static final Logger log = LoggerFactory.getLogger(KaravanReconciler.class);
@ConfigProperty(name = "karavan.version")
String version;
- @Override
- public void initContext(Karavan karavan, Context<Karavan> context) {
-
- }
@Override
public UpdateControl<Karavan> reconcile(Karavan karavan, Context<Karavan> context) throws Exception {
@@ -53,8 +50,8 @@ public class KaravanReconciler implements Reconciler<Karavan>, ContextInitialize
//// final var url = IngressDependent.getExposedURL(
//// context.getSecondaryResource(Ingress.class).orElseThrow());
// log.info("App {} is exposed and ready to be used at {}", name, namespace);
- karavan.setStatus(new KaravanStatus(KaravanStatus.State.READY));
- return UpdateControl.updateStatus(karavan);
+ karavan.setStatus(new KaravanStatus(KaravanStatus.State.READY));
+ return UpdateControl.updateStatus(karavan);
// } else {
// final var duration = Duration.ofSeconds(5);
// log.info("App {} is not ready yet, rescheduling reconciliation after {}s", name, duration.toSeconds());
@@ -68,7 +65,7 @@ public class KaravanReconciler implements Reconciler<Karavan>, ContextInitialize
"app", name,
"app.kubernetes.io/name", name,
"app.kubernetes.io/version", version,
- "app.kubernetes.io/part-of", Constants.NAME
+ "app.kubernetes.io/part-of", Constants.NAME
));
result.putAll(labels);
return result;
diff --git a/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanRoute.java b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanRoute.java
new file mode 100644
index 0000000..9dff643
--- /dev/null
+++ b/karavan-operator/src/main/java/org/apache/camel/karavan/KaravanRoute.java
@@ -0,0 +1,48 @@
+package org.apache.camel.karavan;
+
+import io.fabric8.kubernetes.api.model.IntOrString;
+import io.fabric8.kubernetes.client.DefaultKubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.openshift.api.model.Route;
+import io.fabric8.openshift.api.model.RouteBuilder;
+import io.fabric8.openshift.api.model.RoutePort;
+import io.fabric8.openshift.api.model.RouteTargetReferenceBuilder;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.javaoperatorsdk.operator.api.reconciler.Context;
+import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
+import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition;
+
+import javax.inject.Inject;
+import java.util.Map;
+
+public class KaravanRoute extends CRUDKubernetesDependentResource<Route, Karavan> implements Condition<Route, Karavan> {
+
+ @Inject
+ KaravanReconciler karavanReconciler;
+
+ public KaravanRoute() {
+ super(Route.class);
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public Route desired(Karavan karavan, Context<Karavan> context) {
+ return new RouteBuilder()
+ .withNewMetadata()
+ .withName(Constants.NAME)
+ .withNamespace(karavan.getMetadata().getNamespace())
+ .withLabels(karavanReconciler.getLabels(Constants.NAME, Map.of()))
+ .endMetadata()
+ .withNewSpec()
+ .withPort(new RoutePort(new IntOrString(8080)))
+ .withTo(new RouteTargetReferenceBuilder().withKind("Service").withName(Constants.NAME).build())
+ .endSpec()
+ .build();
+ }
+
+ @Override
+ public boolean isMet(Karavan karavan, Route route, Context<Karavan> context) {
+ KubernetesClient kubernetesClient = new DefaultKubernetesClient();
+ return kubernetesClient.isAdaptable(OpenShiftClient.class);
+ }
+}
diff --git a/karavan-operator/src/main/resources/application.properties b/karavan-operator/src/main/resources/application.properties
index 4d1ad1f..792e254 100644
--- a/karavan-operator/src/main/resources/application.properties
+++ b/karavan-operator/src/main/resources/application.properties
@@ -1,6 +1,14 @@
# set to true to automatically apply CRDs to the cluster when they get regenerated
quarkus.operator-sdk.crd.apply=true
quarkus.operator-sdk.crd.validate=false
+quarkus.operator-sdk.crd.versions=v1
+quarkus.operator-sdk.crd.generate=true
+quarkus.operator-sdk.bundle.channels=alpha
+quarkus.operator-sdk.bundle.package-name=camel-karavan-operator
+
+quarkus.kubernetes-client.trust-certs=true
+quarkus.kubernetes.namespace=openshift-operators
+quarkus.kubernetes.service-account=camel-karavan-operator
quarkus.container-image.build=true
quarkus.container-image.builder=jib