From 00b8e0e16af0d97898826d3c211edac613201849 Mon Sep 17 00:00:00 2001 From: carlosthe19916 <2582866+carlosthe19916@users.noreply.github.com> Date: Tue, 7 Mar 2023 13:37:41 +0100 Subject: [PATCH] ADD SSO --- README.md | 2 +- .../windup/operator/AppServerConfig.java | 11 ++++ .../operator/AppServerConfigProducer.java | 30 ++++++++++ .../org/jboss/windup/operator/Constants.java | 24 ++++---- .../operator/cdrs/v2alpha1/DBDeployment.java | 24 +++++++- .../v2alpha1/DBPersistentVolumeClaim.java | 4 +- .../cdrs/v2alpha1/ExecutorDeployment.java | 17 ++++++ .../WebConsolePersistentVolumeClaim.java | 1 + .../operator/cdrs/v2alpha1/WebDeployment.java | 57 ++++++++++++++++--- .../operator/cdrs/v2alpha1/WindupSpec.java | 56 +++++++++++++----- .../controllers/WindupDistConfigurator.java | 14 +++++ src/main/resources/windup.yml | 24 +++++++- 12 files changed, 224 insertions(+), 40 deletions(-) create mode 100644 src/main/java/org/jboss/windup/operator/AppServerConfig.java create mode 100644 src/main/java/org/jboss/windup/operator/AppServerConfigProducer.java diff --git a/README.md b/README.md index 5ccb1c7e..7ffcbfe0 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Start minikube ```shell -minikube start +minikube start --cpus=8 --memory=10g minikube addons enable ingress ``` diff --git a/src/main/java/org/jboss/windup/operator/AppServerConfig.java b/src/main/java/org/jboss/windup/operator/AppServerConfig.java new file mode 100644 index 00000000..e10dc717 --- /dev/null +++ b/src/main/java/org/jboss/windup/operator/AppServerConfig.java @@ -0,0 +1,11 @@ +package org.jboss.windup.operator; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class AppServerConfig { + private String[] webLivenessProbeCmd; + private String[] webReadinessProbeCmd; +} diff --git a/src/main/java/org/jboss/windup/operator/AppServerConfigProducer.java b/src/main/java/org/jboss/windup/operator/AppServerConfigProducer.java new file mode 100644 index 00000000..dbbb1355 --- /dev/null +++ b/src/main/java/org/jboss/windup/operator/AppServerConfigProducer.java @@ -0,0 +1,30 @@ +package org.jboss.windup.operator; + +import io.quarkus.arc.DefaultBean; +import io.quarkus.arc.profile.IfBuildProfile; + +import javax.enterprise.context.Dependent; +import javax.enterprise.inject.Produces; + +@Dependent +public class AppServerConfigProducer { + + @Produces + @DefaultBean + public AppServerConfig wildflyConfig() { + return AppServerConfig.builder() + .webLivenessProbeCmd(new String[]{"/bin/sh", "-c", "${JBOSS_HOME}/bin/jboss-cli.sh --connect --commands=ls | grep 'server-state=running'"}) + .webReadinessProbeCmd(new String[]{"/bin/sh", "-c", "${JBOSS_HOME}/bin/jboss-cli.sh --connect --commands='ls deployment' | grep 'api.war'"}) + .build(); + } + + @Produces + @IfBuildProfile("eap") + public AppServerConfig eapConfig() { + return AppServerConfig.builder() + .webLivenessProbeCmd(new String[]{"/bin/sh", "-c", "/opt/eap/bin/livenessProbe.sh"}) + .webReadinessProbeCmd(new String[]{"/bin/sh", "-c", "/opt/eap/bin/readinessProbe.sh"}) + .build(); + } + +} diff --git a/src/main/java/org/jboss/windup/operator/Constants.java b/src/main/java/org/jboss/windup/operator/Constants.java index 6f3f74d3..e0667e71 100644 --- a/src/main/java/org/jboss/windup/operator/Constants.java +++ b/src/main/java/org/jboss/windup/operator/Constants.java @@ -26,11 +26,13 @@ public class Constants { public static final String CONTEXT_CONFIG_KEY = "config"; public static final String CONTEXT_K8S_CLIENT_KEY = "k8sClient"; + // public static final String WINDUP_NAME = "windup"; public static final String WINDUP_WEB_NAME = "windup-web"; public static final String WINDUP_EXECUTOR_NAME = "windup-executor"; - public static final String WINDUP_DB_NAME = "windup-db"; + public static final String WINDUP_DB_NAME = "postgresql"; + // public static final Map DB_SELECTOR_LABELS = Map.of( "openubl-operator/group", "db" ); @@ -38,33 +40,29 @@ public class Constants { "openubl-operator/group", "web" ); - public static final Map DEFAULT_DIST_CONFIG = Map.of(); - + // public static final Integer HTTP_PORT = 8080; public static final Integer HTTPS_PORT = 8443; public static final String SERVICE_PROTOCOL = "TCP"; - public static final String WEB_SERVICE_SUFFIX = "-" + WINDUP_WEB_NAME + "-service"; - public static final String INGRESS_SUFFIX = "-" + WINDUP_WEB_NAME + "-ingress"; - public static final String SECRET_SUFFIX = "-" + WINDUP_WEB_NAME + "-secret"; - public static final String WEB_DEPLOYMENT_SUFFIX = "-" + WINDUP_WEB_NAME + "-deployment"; - + // public static final String DB_PVC_SUFFIX = "-" + WINDUP_DB_NAME + "-pvc"; public static final String DB_SECRET_SUFFIX = "-" + WINDUP_DB_NAME + "-secret"; public static final String DB_DEPLOYMENT_SUFFIX = "-" + WINDUP_DB_NAME + "-deployment"; public static final String DB_SERVICE_SUFFIX = "-" + WINDUP_DB_NAME + "-service"; public static final String WEB_PVC_SUFFIX = "-" + WINDUP_WEB_NAME + "-pvc"; + public static final String WEB_DEPLOYMENT_SUFFIX = "-" + WINDUP_WEB_NAME + "-deployment"; + public static final String WEB_SERVICE_SUFFIX = "-" + WINDUP_WEB_NAME + "-service"; public static final String EXECUTOR_DEPLOYMENT_SUFFIX = "-" + WINDUP_EXECUTOR_NAME + "-deployment"; - public static final String EXECUTOR_SERVICE_SUFFIX = "-" + WINDUP_EXECUTOR_NAME + "-service"; + public static final String INGRESS_SUFFIX = "-" + WINDUP_WEB_NAME + "-ingress"; + + // public static final String DB_SECRET_USERNAME = "username"; public static final String DB_SECRET_PASSWORD = "password"; public static final String DB_SECRET_DATABASE_NAME = "database"; - public static final String CERTIFICATES_FOLDER = "/mnt/certificates"; - public static final String WORKSPACES_FOLDER = "/mnt/workspace"; - - public static final String POSTGRESQL_PVC_SIZE = "1G"; + public static final String POSTGRESQL_PVC_SIZE = "10G"; } diff --git a/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/DBDeployment.java b/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/DBDeployment.java index 7374204a..a8186422 100644 --- a/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/DBDeployment.java +++ b/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/DBDeployment.java @@ -26,12 +26,15 @@ import io.fabric8.kubernetes.api.model.PodSpecBuilder; import io.fabric8.kubernetes.api.model.PodTemplateSpecBuilder; import io.fabric8.kubernetes.api.model.ProbeBuilder; +import io.fabric8.kubernetes.api.model.Quantity; +import io.fabric8.kubernetes.api.model.ResourceRequirementsBuilder; import io.fabric8.kubernetes.api.model.VolumeBuilder; import io.fabric8.kubernetes.api.model.VolumeMountBuilder; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder; import io.fabric8.kubernetes.api.model.apps.DeploymentSpec; import io.fabric8.kubernetes.api.model.apps.DeploymentSpecBuilder; +import io.fabric8.kubernetes.api.model.apps.DeploymentStrategyBuilder; import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.processing.dependent.Matcher; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; @@ -39,6 +42,7 @@ import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition; import org.jboss.windup.operator.Config; import org.jboss.windup.operator.Constants; +import org.jboss.windup.operator.utils.CRDUtils; import javax.enterprise.context.ApplicationScoped; import java.util.Arrays; @@ -114,7 +118,14 @@ private DeploymentSpec getDeploymentSpec(Windup cr, Context context) { String image = config.windup().dbImage(); String imagePullPolicy = config.windup().imagePullPolicy(); + WindupSpec.ResourcesLimitSpec resourcesLimitSpec = CRDUtils.getValueFromSubSpec(cr.getSpec().getDatabaseSpec(), WindupSpec.DatabaseSpec::getResourceLimitSpec) + .orElse(null); + return new DeploymentSpecBuilder() + .withStrategy(new DeploymentStrategyBuilder() + .withType("Recreate") + .build() + ) .withReplicas(1) .withSelector(new LabelSelectorBuilder() .withMatchLabels(selectorLabels) @@ -138,7 +149,7 @@ private DeploymentSpec getDeploymentSpec(Windup cr, Context context) { .withEnv(getEnvVars(cr, config)) .withPorts(new ContainerPortBuilder() .withName("tcp") - .withProtocol("TCP") + .withProtocol(Constants.SERVICE_PROTOCOL) .withContainerPort(5432) .build() ) @@ -171,6 +182,17 @@ private DeploymentSpec getDeploymentSpec(Windup cr, Context context) { .withMountPath("/var/lib/pgsql/data") .build() ) + .withResources(new ResourceRequirementsBuilder() + .withRequests(Map.of( + "cpu", new Quantity(CRDUtils.getValueFromSubSpec(resourcesLimitSpec, WindupSpec.ResourcesLimitSpec::getCpuRequest).orElse("0.5")), + "memory", new Quantity(CRDUtils.getValueFromSubSpec(resourcesLimitSpec, WindupSpec.ResourcesLimitSpec::getMemoryRequest).orElse("0.5Gi")) + )) + .withLimits(Map.of( + "cpu", new Quantity(CRDUtils.getValueFromSubSpec(resourcesLimitSpec, WindupSpec.ResourcesLimitSpec::getCpuLimit).orElse("2")), + "memory", new Quantity(CRDUtils.getValueFromSubSpec(resourcesLimitSpec, WindupSpec.ResourcesLimitSpec::getMemoryLimit).orElse("2Gi")) + )) + .build() + ) .build() ) .withVolumes(new VolumeBuilder() diff --git a/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/DBPersistentVolumeClaim.java b/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/DBPersistentVolumeClaim.java index 6fa3740d..ed16aec1 100644 --- a/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/DBPersistentVolumeClaim.java +++ b/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/DBPersistentVolumeClaim.java @@ -46,6 +46,7 @@ protected PersistentVolumeClaim desired(Windup cr, Context context) { return newPersistentVolumeClaim(cr, context); } + @SuppressWarnings("unchecked") private PersistentVolumeClaim newPersistentVolumeClaim(Windup cr, Context context) { final var labels = (Map) context.managedDependentResourceContext() .getMandatory(Constants.CONTEXT_LABELS_KEY, Map.class); @@ -73,12 +74,11 @@ private PersistentVolumeClaim newPersistentVolumeClaim(Windup cr, Context match(PersistentVolumeClaim actual, Windup cr, Context context) { final var desiredPersistentVolumeClaimName = getPersistentVolumeClaimName(cr); - Matcher.Result objectResult = Matcher.Result.nonComputed(actual + return Matcher.Result.nonComputed(actual .getMetadata() .getName() .equals(desiredPersistentVolumeClaimName) ); - return objectResult; } public static String getPersistentVolumeClaimName(Windup cr) { diff --git a/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/ExecutorDeployment.java b/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/ExecutorDeployment.java index 666a1e5a..afebfe3b 100644 --- a/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/ExecutorDeployment.java +++ b/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/ExecutorDeployment.java @@ -26,6 +26,8 @@ import io.fabric8.kubernetes.api.model.PodSpecBuilder; import io.fabric8.kubernetes.api.model.PodTemplateSpecBuilder; import io.fabric8.kubernetes.api.model.ProbeBuilder; +import io.fabric8.kubernetes.api.model.Quantity; +import io.fabric8.kubernetes.api.model.ResourceRequirementsBuilder; import io.fabric8.kubernetes.api.model.VolumeBuilder; import io.fabric8.kubernetes.api.model.VolumeMountBuilder; import io.fabric8.kubernetes.api.model.apps.Deployment; @@ -39,6 +41,7 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; import org.jboss.windup.operator.Config; import org.jboss.windup.operator.Constants; +import org.jboss.windup.operator.utils.CRDUtils; import javax.enterprise.context.ApplicationScoped; import java.util.Arrays; @@ -99,6 +102,9 @@ private DeploymentSpec getDeploymentSpec(Windup cr, Context context) { String image = config.windup().executorImage(); String imagePullPolicy = config.windup().imagePullPolicy(); + WindupSpec.ResourcesLimitSpec resourcesLimitSpec = CRDUtils.getValueFromSubSpec(cr.getSpec(), WindupSpec::getExecutorResourceLimitSpec) + .orElse(null); + return new DeploymentSpecBuilder() .withStrategy(new DeploymentStrategyBuilder() .withType("Recreate") @@ -164,6 +170,17 @@ private DeploymentSpec getDeploymentSpec(Windup cr, Context context) { .withMountPath("/opt/windup/data") .build() ) + .withResources(new ResourceRequirementsBuilder() + .withRequests(Map.of( + "cpu", new Quantity(CRDUtils.getValueFromSubSpec(resourcesLimitSpec, WindupSpec.ResourcesLimitSpec::getCpuRequest).orElse("0.5")), + "memory", new Quantity(CRDUtils.getValueFromSubSpec(resourcesLimitSpec, WindupSpec.ResourcesLimitSpec::getMemoryRequest).orElse("0.5Gi")) + )) + .withLimits(Map.of( + "cpu", new Quantity(CRDUtils.getValueFromSubSpec(resourcesLimitSpec, WindupSpec.ResourcesLimitSpec::getCpuLimit).orElse("4")), + "memory", new Quantity(CRDUtils.getValueFromSubSpec(resourcesLimitSpec, WindupSpec.ResourcesLimitSpec::getMemoryLimit).orElse("4Gi")) + )) + .build() + ) .build() ) .withVolumes(new VolumeBuilder() diff --git a/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/WebConsolePersistentVolumeClaim.java b/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/WebConsolePersistentVolumeClaim.java index aed42d23..ef3f335f 100644 --- a/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/WebConsolePersistentVolumeClaim.java +++ b/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/WebConsolePersistentVolumeClaim.java @@ -45,6 +45,7 @@ protected PersistentVolumeClaim desired(Windup cr, Context context) { return newPersistentVolumeClaim(cr, context); } + @SuppressWarnings("unchecked") private PersistentVolumeClaim newPersistentVolumeClaim(Windup cr, Context context) { final var labels = (Map) context.managedDependentResourceContext() .getMandatory(Constants.CONTEXT_LABELS_KEY, Map.class); diff --git a/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/WebDeployment.java b/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/WebDeployment.java index 934a5e1a..c25cb89a 100644 --- a/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/WebDeployment.java +++ b/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/WebDeployment.java @@ -21,25 +21,33 @@ import io.fabric8.kubernetes.api.model.EnvVar; import io.fabric8.kubernetes.api.model.ExecActionBuilder; import io.fabric8.kubernetes.api.model.LabelSelectorBuilder; +import io.fabric8.kubernetes.api.model.LifecycleBuilder; +import io.fabric8.kubernetes.api.model.LifecycleHandlerBuilder; import io.fabric8.kubernetes.api.model.PodSpecBuilder; import io.fabric8.kubernetes.api.model.PodTemplateSpecBuilder; import io.fabric8.kubernetes.api.model.ProbeBuilder; +import io.fabric8.kubernetes.api.model.Quantity; +import io.fabric8.kubernetes.api.model.ResourceRequirementsBuilder; import io.fabric8.kubernetes.api.model.Volume; import io.fabric8.kubernetes.api.model.VolumeMount; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder; import io.fabric8.kubernetes.api.model.apps.DeploymentSpec; import io.fabric8.kubernetes.api.model.apps.DeploymentSpecBuilder; +import io.fabric8.kubernetes.api.model.apps.DeploymentStrategyBuilder; import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.processing.dependent.Matcher; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition; +import org.jboss.windup.operator.AppServerConfig; import org.jboss.windup.operator.Config; import org.jboss.windup.operator.Constants; import org.jboss.windup.operator.controllers.WindupDistConfigurator; +import org.jboss.windup.operator.utils.CRDUtils; import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -50,6 +58,9 @@ public class WebDeployment extends CRUDKubernetesDependentResource implements Matcher, Condition { + @Inject + AppServerConfig appServerConfig; + public WebDeployment() { super(Deployment.class); } @@ -117,7 +128,14 @@ private DeploymentSpec getDeploymentSpec(Windup cr, Context context, Win List volumes = distConfigurator.getAllVolumes(); List volumeMounts = distConfigurator.getAllVolumeMounts(); + WindupSpec.ResourcesLimitSpec resourcesLimitSpec = CRDUtils.getValueFromSubSpec(cr.getSpec(), WindupSpec::getWebResourceLimitSpec) + .orElse(null); + return new DeploymentSpecBuilder() + .withStrategy(new DeploymentStrategyBuilder() + .withType("Recreate") + .build() + ) .withReplicas(1) .withSelector(new LabelSelectorBuilder() .withMatchLabels(selectorLabels) @@ -132,7 +150,7 @@ private DeploymentSpec getDeploymentSpec(Windup cr, Context context, Win .endMetadata() .withSpec(new PodSpecBuilder() .withRestartPolicy("Always") - .withTerminationGracePeriodSeconds(30L) + .withTerminationGracePeriodSeconds(70L) .withImagePullSecrets(cr.getSpec().getImagePullSecrets()) .withContainers(new ContainerBuilder() .withName(Constants.WINDUP_WEB_NAME) @@ -142,43 +160,66 @@ private DeploymentSpec getDeploymentSpec(Windup cr, Context context, Win .withPorts( new ContainerPortBuilder() .withName("http") - .withProtocol("TCP") + .withProtocol(Constants.SERVICE_PROTOCOL) .withContainerPort(8080) .build(), new ContainerPortBuilder() .withName("jolokia") - .withProtocol("TCP") + .withProtocol(Constants.SERVICE_PROTOCOL) .withContainerPort(8778) .build(), new ContainerPortBuilder() .withName("ping") - .withProtocol("TCP") + .withProtocol(Constants.SERVICE_PROTOCOL) .withContainerPort(8888) .build() ) .withReadinessProbe(new ProbeBuilder() .withExec(new ExecActionBuilder() - .withCommand("/bin/sh", "-c", "${JBOSS_HOME}/bin/jboss-cli.sh --connect --commands='/core-service=management:read-boot-errors()' | grep '\"result\" => \\[]' && ${JBOSS_HOME}/bin/jboss-cli.sh --connect --commands='ls deployment' | grep 'api.war'") + .withCommand(appServerConfig.getWebReadinessProbeCmd()) .build() ) .withInitialDelaySeconds(120) .withTimeoutSeconds(10) - .withPeriodSeconds(2) + .withPeriodSeconds(10) + .withSuccessThreshold(1) .withFailureThreshold(3) .build() ) .withLivenessProbe(new ProbeBuilder() .withExec(new ExecActionBuilder() - .withCommand("/bin/sh", "-c", "${JBOSS_HOME}/bin/jboss-cli.sh --connect --commands='/core-service=management:read-boot-errors()' | grep '\"result\" => \\[]' && ${JBOSS_HOME}/bin/jboss-cli.sh --connect --commands=ls | grep 'server-state=running'") + .withCommand(appServerConfig.getWebLivenessProbeCmd()) .build() ) .withInitialDelaySeconds(120) .withTimeoutSeconds(10) - .withPeriodSeconds(2) + .withPeriodSeconds(10) + .withSuccessThreshold(1) .withFailureThreshold(3) .build() ) + .withLifecycle(new LifecycleBuilder() + .withPreStop(new LifecycleHandlerBuilder() + .withExec(new ExecActionBuilder() + .withCommand("${JBOSS_HOME}/bin/jboss-cli.sh", "-c", ":shutdown(timeout=60)") + .build() + ) + .build() + ) + .build() + ) .withVolumeMounts(volumeMounts) + .withResources(new ResourceRequirementsBuilder() + .withRequests(Map.of( + "cpu", new Quantity(CRDUtils.getValueFromSubSpec(resourcesLimitSpec, WindupSpec.ResourcesLimitSpec::getCpuRequest).orElse("0.5")), + "memory", new Quantity(CRDUtils.getValueFromSubSpec(resourcesLimitSpec, WindupSpec.ResourcesLimitSpec::getMemoryRequest).orElse("0.5Gi")) + )) + .withLimits(Map.of( + "cpu", new Quantity(CRDUtils.getValueFromSubSpec(resourcesLimitSpec, WindupSpec.ResourcesLimitSpec::getCpuLimit).orElse("4")), + "memory", new Quantity(CRDUtils.getValueFromSubSpec(resourcesLimitSpec, WindupSpec.ResourcesLimitSpec::getMemoryLimit).orElse("4Gi")) + )) + .build() + ) .build() ) .withVolumes(volumes) diff --git a/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/WindupSpec.java b/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/WindupSpec.java index 7c593bc7..0d346ce4 100644 --- a/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/WindupSpec.java +++ b/src/main/java/org/jboss/windup/operator/cdrs/v2alpha1/WindupSpec.java @@ -19,7 +19,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyDescription; import io.fabric8.kubernetes.api.model.LocalObjectReference; -import io.fabric8.kubernetes.api.model.SecretKeySelector; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -37,7 +36,7 @@ public class WindupSpec { private int executorInstances = 1; @JsonPropertyDescription("Size of the PVC where the reports will be stored") - private String dataSize = "1G"; + private String dataSize = "20G"; @JsonPropertyDescription("Secret(s) that might be used when pulling an image from a private container image registry or repository.") private List imagePullSecrets; @@ -50,9 +49,17 @@ public class WindupSpec { @JsonPropertyDescription("In this section you can configure hostname and related properties.") private HostnameSpec hostnameSpec; - @JsonProperty("oidc") - @JsonPropertyDescription("In this section you can configure Oidc settings.") - private OidcSpec oidcSpec; + @JsonProperty("sso") + @JsonPropertyDescription("In this section you can configure SSO settings.") + private SSOSpec ssoSpec; + + @JsonProperty("webResourceLimits") + @JsonPropertyDescription("In this section you can configure resource limits settings for the Web Console.") + private ResourcesLimitSpec webResourceLimitSpec; + + @JsonProperty("executorResourceLimits") + @JsonPropertyDescription("In this section you can configure resource limits settings for the Executor.") + private ResourcesLimitSpec executorResourceLimitSpec; @Data @Builder @@ -61,6 +68,10 @@ public class WindupSpec { public static class DatabaseSpec { @JsonPropertyDescription("Size of the PVC to create.") private String size; + + @JsonProperty("resourceLimits") + @JsonPropertyDescription("In this section you can configure resource limits settings.") + private ResourcesLimitSpec resourceLimitSpec; } @Data @@ -76,18 +87,35 @@ public static class HostnameSpec { @Builder @AllArgsConstructor @NoArgsConstructor - public static class OidcSpec { - @JsonPropertyDescription("Enable Oidc Auth.") - private boolean enabled; - - @JsonPropertyDescription("Oidc server url.") + public static class SSOSpec { + @JsonPropertyDescription("Server url.") private String serverUrl; - @JsonPropertyDescription("Oidc client id.") - private String clientId; + @JsonPropertyDescription("Realm.") + private String realm; + + @JsonPropertyDescription("SSL required property. Valid values are: 'ALL', 'EXTERNAL', 'NONE'.") + private String sslRequired = "EXTERNAL"; - @JsonPropertyDescription("Oidc client id.") - private SecretKeySelector credentialsSecret; + @JsonPropertyDescription("Client id.") + private String clientId; } + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class ResourcesLimitSpec { + @JsonPropertyDescription("Requested CPU.") + private String cpuRequest; + + @JsonPropertyDescription("Limit CPU.") + private String cpuLimit; + + @JsonPropertyDescription("Requested memory.") + private String memoryRequest; + + @JsonPropertyDescription("Limit Memory.") + private String memoryLimit; + } } diff --git a/src/main/java/org/jboss/windup/operator/controllers/WindupDistConfigurator.java b/src/main/java/org/jboss/windup/operator/controllers/WindupDistConfigurator.java index a62b611a..8f1f23e2 100644 --- a/src/main/java/org/jboss/windup/operator/controllers/WindupDistConfigurator.java +++ b/src/main/java/org/jboss/windup/operator/controllers/WindupDistConfigurator.java @@ -30,6 +30,7 @@ import org.jboss.windup.operator.cdrs.v2alpha1.DBSecret; import org.jboss.windup.operator.cdrs.v2alpha1.WebConsolePersistentVolumeClaim; import org.jboss.windup.operator.cdrs.v2alpha1.Windup; +import org.jboss.windup.operator.cdrs.v2alpha1.WindupSpec; import java.util.ArrayList; import java.util.Collection; @@ -55,6 +56,7 @@ public WindupDistConfigurator(Windup cr) { configureDefaults(); configureDatabase(); configureDataDirectory(); + configureSSO(); } public List getAllEnvVars() { @@ -76,6 +78,7 @@ private void configureDefaults() { .mapOption("AUTO_DEPLOY_EXPLODED", spec -> "false") .mapOption("GC_MAX_METASPACE_SIZE", spec -> "512") .mapOption("MAX_POST_SIZE", spec -> "4294967296") + .mapOption("SSO_DISABLE_SSL_CERTIFICATE_VALIDATION", spec -> "true") .mapOption("SSO_FORCE_LEGACY_SECURITY", spec -> "false") .getEnvVars(); @@ -124,6 +127,17 @@ private void configureDataDirectory() { allVolumeMounts.add(volumeMount2); } + private void configureSSO() { + List envVars = optionMapper(cr.getSpec().getSsoSpec()) + .mapOption("SSO_AUTH_SERVER_URL", WindupSpec.SSOSpec::getServerUrl) + .mapOption("SSO_REALM", WindupSpec.SSOSpec::getRealm) + .mapOption("SSO_SSL_REQUIRED", WindupSpec.SSOSpec::getSslRequired) + .mapOption("SSO_CLIENT_ID", WindupSpec.SSOSpec::getClientId) + .getEnvVars(); + + allEnvVars.addAll(envVars); + } + private OptionMapper optionMapper(T optionSpec) { return new OptionMapper<>(optionSpec); } diff --git a/src/main/resources/windup.yml b/src/main/resources/windup.yml index 010e3b91..ed98b3bc 100644 --- a/src/main/resources/windup.yml +++ b/src/main/resources/windup.yml @@ -3,4 +3,26 @@ apiVersion: "windup.jboss.org/v1" metadata: name: test spec: - + dataSize: "2Gi" + webResourceLimits: + cpuRequest: "0.5" + cpuLimit: "3" + memoryRequest: "0.5Gi" + memoryLimit: "4Gi" + executorResourceLimits: + cpuRequest: "0.5" + cpuLimit: "3" + memoryRequest: "0.5Gi" + memoryLimit: "4Gi" + db: + size: "2Gi" + resourceLimits: + cpuRequest: "0.5" + cpuLimit: "1" + memoryRequest: "0.5Gi" + memoryLimit: "1Gi" +# sso: +# serverUrl: https://localhost:8080/auth +# realm: windup +# sslRequired: NONE +# clientId: windup-web \ No newline at end of file