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 d83b360d Prepare to work in Openshift for #885 d83b360d is described below commit d83b360df306c0297ca8823852781a21f4fc665d Author: Marat Gubaidullin <ma...@talismancloud.io> AuthorDate: Sun Sep 17 13:52:03 2023 -0400 Prepare to work in Openshift for #885 --- .../karavan/kubernetes/KubernetesService.java | 39 ++++++++++++++++++---- .../camel/karavan/service/ProjectService.java | 12 +++++-- .../org/apache/camel/karavan/shared/Constants.java | 1 + .../snippets/openshift-application.properties | 2 +- .../src/main/resources/snippets/openshift-build.sh | 9 +++-- .../karavan/installer/resources/KaravanRole.java | 3 +- 6 files changed, 53 insertions(+), 13 deletions(-) diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java index d8068b0e..14a6d6a0 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/kubernetes/KubernetesService.java @@ -95,7 +95,8 @@ public class KubernetesService implements HealthCheck { KubernetesClient client = kubernetesClient(); SharedIndexInformer<Deployment> deploymentInformer = client.apps().deployments().inNamespace(getNamespace()) - .withLabels(labels).inform();deploymentInformer.addEventHandlerWithResyncPeriod(new DeploymentEventHandler(infinispanService, this), 30 * 1000L); + .withLabels(labels).inform(); + deploymentInformer.addEventHandlerWithResyncPeriod(new DeploymentEventHandler(infinispanService, this), 30 * 1000L); informers.add(deploymentInformer); SharedIndexInformer<Service> serviceInformer = client.services().inNamespace(getNamespace()) @@ -195,11 +196,37 @@ public class KubernetesService implements HealthCheck { } private Pod getBuilderPod(String name, List<String> env, Map<String, String> labels) { - List<EnvVar> envVars = env.stream().map(s -> s.split("=")).filter(s -> s.length > 0).map(parts -> { + List<EnvVar> envVars = new ArrayList<>(); + env.stream().map(s -> s.split("=")).filter(s -> s.length > 0).forEach(parts -> { String varName = parts[0]; String varValue = parts[1]; - return new EnvVarBuilder().withName(varName).withValue(varValue).build(); - }).toList(); + envVars.add(new EnvVarBuilder().withName(varName).withValue(varValue).build()); + }); + + envVars.add( + new EnvVar("IMAGE_REGISTRY", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("image-registry", KARAVAN_SECRET_NAME, false)).build()) + ); + envVars.add( + new EnvVar("IMAGE_REGISTRY_USERNAME", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("image-registry-username", KARAVAN_SECRET_NAME, false)).build()) + ); + envVars.add( + new EnvVar("IMAGE_REGISTRY_PASSWORD", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("image-registry-password", KARAVAN_SECRET_NAME, false)).build()) + ); + envVars.add( + new EnvVar("IMAGE_GROUP", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("image-group", KARAVAN_SECRET_NAME, false)).build()) + ); + envVars.add( + new EnvVar("GIT_REPOSITORY", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("git-repository", KARAVAN_SECRET_NAME, false)).build()) + ); + envVars.add( + new EnvVar("GIT_USERNAME", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("git-username", KARAVAN_SECRET_NAME, false)).build()) + ); + envVars.add( + new EnvVar("GIT_PASSWORD", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("git-password", KARAVAN_SECRET_NAME, false)).build()) + ); + envVars.add( + new EnvVar("GIT_BRANCH", null, new EnvVarSourceBuilder().withSecretKeyRef(new SecretKeySelector("git-branch", KARAVAN_SECRET_NAME, false)).build()) + ); ObjectMeta meta = new ObjectMetaBuilder() .withName(name) @@ -474,14 +501,14 @@ public class KubernetesService implements HealthCheck { public String getKaravanSecret(String key) { try (KubernetesClient client = kubernetesClient()) { - Secret secret = client.secrets().inNamespace(getNamespace()).withName("karavan").get(); + Secret secret = client.secrets().inNamespace(getNamespace()).withName("karavan").get(); Map<String, String> data = secret.getData(); return decodeSecret(data.get(key)); } } private String decodeSecret(String data) { - if (data != null){ + if (data != null) { return new String(Base64.getDecoder().decode(data.getBytes(StandardCharsets.UTF_8))); } return null; diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java index bb9d47d4..f838fdfb 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java @@ -125,15 +125,16 @@ public class ProjectService implements HealthCheck { ? tag : Instant.now().toString().substring(0, 19).replace(":", "-"); String script = codeService.getBuilderScript(); - List<String> env = getEnvForBuild(project, tag); + List<String> env = getProjectEnvForBuild(project, tag); if (ConfigService.inKubernetes()) { kubernetesService.runBuildProject(project, script, env, tag); } else { + env.addAll(getConnectionsEnvForBuild()); dockerForKaravan.runBuildProject(project, script, env, tag); } } - private List<String> getEnvForBuild(Project project, String tag) { + private List<String> getProjectEnvForBuild(Project project, String tag) { List<String> env = new ArrayList<>(); env.addAll(registryService.getEnvForBuild()); env.addAll(gitService.getEnvForBuild()); @@ -144,6 +145,13 @@ public class ProjectService implements HealthCheck { return env; } + private List<String> getConnectionsEnvForBuild() { + List<String> env = new ArrayList<>(); + env.addAll(registryService.getEnvForBuild()); + env.addAll(gitService.getEnvForBuild()); + return env; + } + public List<Project> getAllProjects(String type) { if (infinispanService.isReady()) { List<ProjectFile> files = infinispanService.getProjectFilesByName(PROJECT_COMPOSE_FILENAME); diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/Constants.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/Constants.java index 71c3af32..4cf59d2e 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/Constants.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/Constants.java @@ -28,6 +28,7 @@ public class Constants { public static final String BUILDER_SUFFIX = "-builder"; public static final String CAMEL_PREFIX = "camel"; + public static final String KARAVAN_SECRET_NAME = "karavan"; public static final String KARAVAN_SERVICE_ACCOUNT = "karavan"; public static final String KARAVAN_PREFIX = "karavan"; public static final String JBANG_CACHE_SUFFIX = "jbang-cache"; diff --git a/karavan-web/karavan-app/src/main/resources/snippets/openshift-application.properties b/karavan-web/karavan-app/src/main/resources/snippets/openshift-application.properties index ff0c5b6a..fe9786e0 100644 --- a/karavan-web/karavan-app/src/main/resources/snippets/openshift-application.properties +++ b/karavan-web/karavan-app/src/main/resources/snippets/openshift-application.properties @@ -12,7 +12,7 @@ camel.server.healthCheckEnabled=true camel.server.devConsoleEnabled=true camel.context.dev-console=true camel.main.beanIntrospectionExtendedStatistics=true -label.runtime=app.kubernetes.io/runtime +label.runtime=app.openshift.io/runtime jib.from.image=gcr.io/distroless/java17@sha256:3a4ea21bd7b412b8b6ae61313b39337d8f03bb6844013810e8e4625d8c765edb jkube.version=1.14.0 jkube.skip.build=true diff --git a/karavan-web/karavan-app/src/main/resources/snippets/openshift-build.sh b/karavan-web/karavan-app/src/main/resources/snippets/openshift-build.sh index f8edb112..fa2854d3 100644 --- a/karavan-web/karavan-app/src/main/resources/snippets/openshift-build.sh +++ b/karavan-web/karavan-app/src/main/resources/snippets/openshift-build.sh @@ -22,12 +22,15 @@ jbang -Dcamel.jbang.version=${CAMEL_VERSION} camel@apache/camel export --local-k export LAST_COMMIT=$(git rev-parse --short HEAD) export DATE=${TAG} +export CERT=$(cat /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt) export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) export NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace) -mvn package jib:build org.eclipse.jkube:openshift-maven-plugin:1.14.0:resource org.eclipse.jkube:openshift-maven-plugin:1.14.0:apply \ +sed -i 's/kubernetes-maven-plugin/openshift-maven-plugin/g' pom.xml + +mvn package jib:build oc:resource oc:apply \ -Djkube.namespace=${NAMESPACE} \ -Djib.allowInsecureRegistries=true \ -Djib.to.image=${IMAGE_REGISTRY}/${IMAGE_GROUP}/${PROJECT_ID}:${DATE} \ - -Djib.to.auth.username=${IMAGE_REGISTRY_USERNAME} \ - -Djib.to.auth.password=${IMAGE_REGISTRY_PASSWORD} \ No newline at end of file + -Djib.to.auth.username=${TOKEN} \ + -Djib.to.auth.password=${TOKEN} \ No newline at end of file diff --git a/karavan-web/karavan-installer/src/main/java/org/apache/camel/karavan/installer/resources/KaravanRole.java b/karavan-web/karavan-installer/src/main/java/org/apache/camel/karavan/installer/resources/KaravanRole.java index 5d01ddce..52eb3f49 100644 --- a/karavan-web/karavan-installer/src/main/java/org/apache/camel/karavan/installer/resources/KaravanRole.java +++ b/karavan-web/karavan-installer/src/main/java/org/apache/camel/karavan/installer/resources/KaravanRole.java @@ -33,7 +33,8 @@ public class KaravanRole { new PolicyRuleBuilder().withApiGroups("").withResources("persistentvolumes", "persistentvolumeclaims").withVerbs("*").build(), new PolicyRuleBuilder().withApiGroups("").withResources("pods", "services", "replicationcontrollers").withVerbs("*").build(), new PolicyRuleBuilder().withApiGroups("route.openshift.io").withResources("routes").withVerbs("*").build(), - new PolicyRuleBuilder().withApiGroups("apps").withResources("deployments").withVerbs("*").build() + new PolicyRuleBuilder().withApiGroups("apps").withResources("deployments").withVerbs("*").build(), + new PolicyRuleBuilder().withApiGroups("", "image.openshift.io").withResources("imagestreams/layers").withVerbs("get", "update").build() ) .build(); }