You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kie.apache.org by ri...@apache.org on 2025/07/22 10:27:10 UTC
(incubator-kie-optaplanner) branch main updated: Removing experimental module that is breaking the build.
This is an automated email from the ASF dual-hosted git repository.
rikkola pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-optaplanner.git
The following commit(s) were added to refs/heads/main by this push:
new ad5cc738c3 Removing experimental module that is breaking the build.
ad5cc738c3 is described below
commit ad5cc738c34994aab7b9aab3cbd1845880905b6d
Author: Rikkola <to...@rikkola.net>
AuthorDate: Wed Jul 9 14:03:34 2025 +0300
Removing experimental module that is breaking the build.
---
.ci/jenkins/dsl/jobs.groovy | 15 -
build/optaplanner-bom/pom.xml | 18 -
build/optaplanner-build-parent/pom.xml | 19 +-
build/optaplanner-distribution-internal/pom.xml | 6 -
.../src/main/assembly/assembly-optaplanner.xml | 8 -
optaplanner-operator/.gitignore | 27 -
optaplanner-operator/README.adoc | 65 -
optaplanner-operator/pom.xml | 222 --
optaplanner-operator/src/k8s/crd-solver.yml | 2798 --------------------
optaplanner-operator/src/k8s/openshift.yml | 322 ---
.../src/k8s/optaplanner-operator.yml | 219 --
.../src/k8s/school-timetabling-solver.yml | 41 -
.../impl/solver/OptaPlannerSolverReconciler.java | 140 -
.../operator/impl/solver/model/AmqBroker.java | 109 -
.../solver/model/ConfigMapDependentResource.java | 71 -
.../solver/model/DeploymentDependentResource.java | 146 -
.../impl/solver/model/OptaPlannerSolver.java | 103 -
.../impl/solver/model/OptaPlannerSolverSpec.java | 52 -
.../impl/solver/model/OptaPlannerSolverStatus.java | 136 -
.../operator/impl/solver/model/Scaling.java | 52 -
.../solver/model/common/ResourceNameReference.java | 41 -
.../impl/solver/model/keda/KedaConstants.java | 31 -
.../impl/solver/model/keda/ScaledObject.java | 44 -
.../model/keda/ScaledObjectDependentResource.java | 120 -
.../impl/solver/model/keda/ScaledObjectSpec.java | 93 -
.../impl/solver/model/keda/SecretTargetRef.java | 67 -
.../operator/impl/solver/model/keda/Trigger.java | 61 -
.../solver/model/keda/TriggerAuthentication.java | 38 -
.../TriggerAuthenticationDependentResource.java | 80 -
.../model/keda/TriggerAuthenticationSpec.java | 44 -
.../impl/solver/model/keda/TriggerMetadata.java | 68 -
.../impl/solver/model/messaging/ArtemisQueue.java | 50 -
.../messaging/ArtemisQueueDependentResource.java | 59 -
.../solver/model/messaging/ArtemisQueueSpec.java | 54 -
.../solver/model/messaging/MessageAddress.java | 36 -
.../src/main/resources/application.properties | 44 -
.../impl/solver/AbstractKubernetesTest.java | 35 -
.../solver/OptaPlannerSolverReconcilerTest.java | 317 ---
.../AbstractKubernetesCustomResourceTest.java | 47 -
.../impl/solver/model/keda/ScaledObjectTest.java | 66 -
.../model/keda/TriggerAuthenticationTest.java | 49 -
.../solver/model/messaging/ArtemisQueueTest.java | 49 -
pom.xml | 11 -
43 files changed, 1 insertion(+), 6072 deletions(-)
diff --git a/.ci/jenkins/dsl/jobs.groovy b/.ci/jenkins/dsl/jobs.groovy
index cb3731a4da..cd282357cf 100644
--- a/.ci/jenkins/dsl/jobs.groovy
+++ b/.ci/jenkins/dsl/jobs.groovy
@@ -317,21 +317,6 @@ void setupDeployJob(JobType jobType, String envName = '') {
MAVEN_DEPLOY_REPOSITORY: "${MAVEN_PR_CHECKS_REPOSITORY_URL}",
MAVEN_REPO_CREDS_ID: "${MAVEN_PR_CHECKS_REPOSITORY_CREDS_ID}",
])
- } else {
- jobParams.env.putAll([
- GIT_AUTHOR: "${GIT_AUTHOR_NAME}",
-
- GIT_AUTHOR_CREDS_ID: "${GIT_AUTHOR_CREDENTIALS_ID}",
- GIT_AUTHOR_PUSH_CREDS_ID: "${GIT_AUTHOR_PUSH_CREDENTIALS_ID}",
-
- MAVEN_DEPENDENCIES_REPOSITORY: "${MAVEN_ARTIFACTS_REPOSITORY}",
-
- MAVEN_DEPLOY_REPOSITORY: Utils.getMavenArtifactsUploadRepositoryUrl(this, jobType.name),
- MAVEN_REPO_CREDS_ID: Utils.getMavenArtifactsUploadRepositoryCredentialsId(this, jobType.name),
-
- OPERATOR_IMAGE_NAME: 'optaplanner-operator',
- MAX_REGISTRY_RETRIES: 3,
- ])
}
KogitoJobTemplate.createPipelineJob(this, jobParams)?.with {
parameters {
diff --git a/build/optaplanner-bom/pom.xml b/build/optaplanner-bom/pom.xml
index a75d252352..b2084aed84 100644
--- a/build/optaplanner-bom/pom.xml
+++ b/build/optaplanner-bom/pom.xml
@@ -498,24 +498,6 @@
<type>test-jar</type>
<version>${version.org.optaplanner}</version>
</dependency>
- <!-- OptaPlanner operator -->
- <dependency>
- <groupId>org.optaplanner</groupId>
- <artifactId>optaplanner-operator</artifactId>
- <version>${version.org.optaplanner}</version>
- </dependency>
- <dependency>
- <groupId>org.optaplanner</groupId>
- <artifactId>optaplanner-operator</artifactId>
- <version>${version.org.optaplanner}</version>
- <classifier>sources</classifier>
- </dependency>
- <dependency>
- <groupId>org.optaplanner</groupId>
- <artifactId>optaplanner-operator</artifactId>
- <type>test-jar</type>
- <version>${version.org.optaplanner}</version>
- </dependency>
</dependencies>
</dependencyManagement>
diff --git a/build/optaplanner-build-parent/pom.xml b/build/optaplanner-build-parent/pom.xml
index f94a55206f..8573c06188 100644
--- a/build/optaplanner-build-parent/pom.xml
+++ b/build/optaplanner-build-parent/pom.xml
@@ -185,24 +185,7 @@
<artifactId>openjpa</artifactId>
<version>${version.org.apache.openjpa}</version>
</dependency>
- <!-- optaplanner-operator -->
- <dependency>
- <groupId>io.quarkiverse.operatorsdk</groupId>
- <artifactId>quarkus-operator-sdk</artifactId>
- <version>${version.io.quarkiverse.operatorsdk}</version>
- </dependency>
-
- <dependency>
- <groupId>io.netty</groupId>
- <artifactId>netty-handler</artifactId>
- <version>${version.io.netty}</version>
- </dependency>
- <dependency>
- <groupId>io.netty</groupId>
- <artifactId>netty-common</artifactId>
- <version>${version.io.netty}</version>
- </dependency>
-
+
<!-- OpenRewrite -->
<dependency>
<groupId>org.openrewrite.recipe</groupId>
diff --git a/build/optaplanner-distribution-internal/pom.xml b/build/optaplanner-distribution-internal/pom.xml
index 6ac1338f3e..0591193520 100644
--- a/build/optaplanner-distribution-internal/pom.xml
+++ b/build/optaplanner-distribution-internal/pom.xml
@@ -136,12 +136,6 @@
<name>!productized</name>
</property>
</activation>
- <dependencies>
- <dependency>
- <groupId>org.optaplanner</groupId>
- <artifactId>optaplanner-operator</artifactId>
- </dependency>
- </dependencies>
</profile>
<profile>
<id>productized</id>
diff --git a/build/optaplanner-distribution-internal/src/main/assembly/assembly-optaplanner.xml b/build/optaplanner-distribution-internal/src/main/assembly/assembly-optaplanner.xml
index 7e6f735cf7..1f651d423e 100644
--- a/build/optaplanner-distribution-internal/src/main/assembly/assembly-optaplanner.xml
+++ b/build/optaplanner-distribution-internal/src/main/assembly/assembly-optaplanner.xml
@@ -72,11 +72,6 @@
<exclude>.git/**</exclude>
</excludes>
</fileSet>
- <!-- OptaPlanner Operator distribution. -->
- <fileSet>
- <directory>../../optaplanner-operator/target/install</directory>
- <outputDirectory>extra/optaplanner-operator</outputDirectory>
- </fileSet>
</fileSets>
<dependencySets>
@@ -84,9 +79,6 @@
<includes>
<include>org.optaplanner:*:jar</include>
</includes>
- <excludes>
- <exclude>org.optaplanner:optaplanner-operator:jar</exclude>
- </excludes>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>examples/binaries</outputDirectory>
<useStrictFiltering>true</useStrictFiltering>
diff --git a/optaplanner-operator/.gitignore b/optaplanner-operator/.gitignore
deleted file mode 100644
index 701bc2cf63..0000000000
--- a/optaplanner-operator/.gitignore
+++ /dev/null
@@ -1,27 +0,0 @@
-# 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.
-
-/target
-/local
-
-# Eclipse, Netbeans and IntelliJ files
-/.*
-!.gitignore
-/nbproject
-/*.ipr
-/*.iws
-/*.iml
diff --git a/optaplanner-operator/README.adoc b/optaplanner-operator/README.adoc
deleted file mode 100644
index c70561523e..0000000000
--- a/optaplanner-operator/README.adoc
+++ /dev/null
@@ -1,65 +0,0 @@
-////
-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.
-////
-
-= OptaPlanner Operator (experimental)
-
-The OptaPlanner solver operator enables running OptaPlanner workloads on Kubernetes.
-
-*Please note that the OptaPlanner Operator is experimental. As such, it provides no guarantees
-in terms of maturity and backward compatibility.*
-
-== Prerequisites
-
-=== Get your environment running
-
-Use an existing OpenShift cluster or download and start either https://developers.redhat.com/products/codeready-containers/overview[RedHat CodeReady Containers] or https://minikube.sigs.k8s.io/docs/start/[Minikube] for a local development.
-
-=== Install ArtemisCloud
-
-The OptaPlanner solver operator depends on ArtemisCloud for creating ActiveMQ queues. To install ArtemisCloud to Minikube or OpenShift and to create a new broker, follow the https://artemiscloud.io/docs/help/operator/[documentation].
-
-NOTE: The ArtemisCloud operator by default watches for ActiveMQ broker and queue resources in the namespace it has been installed to.
-
-== Local development with Minikube
-
-. Run `mvn quarkus:dev` to start the solver operator locally. The operator will connect to the Kubernetes cluster you are logged in.
-
-[#deployToOpenShift]
-== Deployment to OpenShift
-
-Login as a user with the `cluster-admin` role.
-
-[#deployOperator]
-=== Deploy the OptaPlanner Operator
-
-. Create the `optaplanner-operator` project by running `oc new-project optaplanner-operator`.
-. Download the https://download.jboss.org/optaplanner/release/latestFinal[optaplanner-distribution].
-. Extract the archive and change directory to `extra/optaplanner-operator`.
-. Apply the CRD by running `oc apply -f crd-solver.yml`.
-. Apply the prepared deployment template by running `oc apply -f optaplanner-operator.yml`.
-
-== Try the OptaPlanner Operator
-
-=== Create a solver custom resource
-
-The Solver custom resource describes the problem to be solved on Kubernetes and the infrastructure it requires.
-
-There is an example you can use by running either `kubectl apply -f src/k8s/school-timetabling-solver.yml -n <namespace>` (Minikube) or `oc apply -f src/k8s/school-timetabling-solver.yml` (OpenShift).
-
-To check the created resource, run `kubectl get solver -n <namespace>` (Minikube) or `oc get solver` (OpenShift).
diff --git a/optaplanner-operator/pom.xml b/optaplanner-operator/pom.xml
deleted file mode 100644
index d49f08a2b8..0000000000
--- a/optaplanner-operator/pom.xml
+++ /dev/null
@@ -1,222 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ 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.
- -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <groupId>org.optaplanner</groupId>
- <artifactId>optaplanner-build-parent</artifactId>
- <version>999-SNAPSHOT</version>
- <relativePath>../build/optaplanner-build-parent/pom.xml</relativePath>
- </parent>
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>optaplanner-operator</artifactId>
- <name>[Experimental] OptaPlanner Operator</name>
- <description>
- OptaPlanner solves planning problems.
- This lightweight, embeddable planning engine implements powerful and scalable algorithms
- to optimize business resource scheduling and planning.
-
- This module contains an operator that enables running OptaPlanner workloads on Kubernetes.
- </description>
- <url>https://www.optaplanner.org</url>
-
- <properties>
- <java.module.name>org.optaplanner.operator</java.module.name>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>io.quarkiverse.operatorsdk</groupId>
- <artifactId>quarkus-operator-sdk</artifactId>
- <exclusions>
- <exclusion> <!-- Clashes with the io.quarkus:quarkus-openshift. -->
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-container-image-jib</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <!-- Test dependencies. -->
- <dependency>
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-junit5</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-junit5-mockito</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-test-kubernetes-client</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.awaitility</groupId>
- <artifactId>awaitility</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.assertj</groupId>
- <artifactId>assertj-core</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <build>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- <filtering>true</filtering>
- <includes>
- <include>**/application.properties</include>
- </includes>
- </resource>
- <resource>
- <directory>src/k8s</directory>
- <filtering>true</filtering>
- <includes>
- <include>crd-solver.yml</include>
- <include>optaplanner-operator.yml</include>
- </includes>
- <targetPath>${project.build.directory}/install</targetPath>
- </resource>
- </resources>
-
- <plugins>
- <plugin>
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-maven-plugin</artifactId>
- <version>${version.io.quarkus}</version>
- <extensions>true</extensions>
- <executions>
- <execution>
- <goals>
- <goal>build</goal>
- <goal>generate-code</goal>
- <goal>generate-code-tests</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <execution>
- <!-- Undeclared transitive dependencies come from quarkus-operator-sdk; managing them individually
- is impractical and might bring incompatibilities. -->
- <id>analyze-only</id>
- <configuration>
- <failOnWarning>false</failOnWarning>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <systemPropertyVariables>
- <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
- </systemPropertyVariables>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <profiles>
- <profile>
- <id>native</id>
- <activation>
- <property>
- <name>native</name>
- </property>
- </activation>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-failsafe-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>integration-test</goal>
- <goal>verify</goal>
- </goals>
- <configuration>
- <systemPropertyVariables>
- <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
- </systemPropertyVariables>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- <properties>
- <quarkus.package.type>native</quarkus.package.type>
- </properties>
- </profile>
-
- <profile>
- <id>openshift</id> <!-- Optional for use in OpenShift. -->
- <activation>
- <property>
- <name>openshift</name>
- </property>
- </activation>
- <properties>
- <quarkus.profile>openshift</quarkus.profile>
- </properties>
- <dependencies>
- <dependency>
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-openshift</artifactId>
- </dependency>
- </dependencies>
- </profile>
- <profile>
- <!-- The image build does not work on Windows GHA, thus it cannot be a part of the full profile. -->
- <id>image</id>
- <activation>
- <property>
- <name>operator.image.build</name>
- </property>
- </activation>
- <properties>
- <quarkus.profile>image</quarkus.profile>
- </properties>
- <dependencies>
- <dependency>
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-container-image-jib</artifactId>
- </dependency>
- </dependencies>
- </profile>
- </profiles>
-
-</project>
diff --git a/optaplanner-operator/src/k8s/crd-solver.yml b/optaplanner-operator/src/k8s/crd-solver.yml
deleted file mode 100644
index d2317401a8..0000000000
--- a/optaplanner-operator/src/k8s/crd-solver.yml
+++ /dev/null
@@ -1,2798 +0,0 @@
-# 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.
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: solvers.org.optaplanner.solver
-spec:
- group: org.optaplanner.solver
- names:
- kind: Solver
- plural: solvers
- singular: solver
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- template:
- properties:
- metadata:
- properties:
- generateName:
- type: string
- deletionGracePeriodSeconds:
- type: integer
- deletionTimestamp:
- type: string
- clusterName:
- type: string
- resourceVersion:
- type: string
- annotations:
- additionalProperties:
- type: string
- type: object
- selfLink:
- type: string
- creationTimestamp:
- type: string
- finalizers:
- items:
- type: string
- type: array
- labels:
- additionalProperties:
- type: string
- type: object
- ownerReferences:
- items:
- properties:
- blockOwnerDeletion:
- type: boolean
- uid:
- type: string
- apiVersion:
- type: string
- name:
- type: string
- kind:
- type: string
- controller:
- type: boolean
- type: object
- type: array
- uid:
- type: string
- generation:
- type: integer
- name:
- type: string
- managedFields:
- items:
- properties:
- time:
- type: string
- apiVersion:
- type: string
- fieldsV1:
- type: object
- fieldsType:
- type: string
- manager:
- type: string
- operation:
- type: string
- subresource:
- type: string
- type: object
- type: array
- namespace:
- type: string
- type: object
- spec:
- properties:
- volumes:
- items:
- properties:
- hostPath:
- properties:
- path:
- type: string
- type:
- type: string
- type: object
- flexVolume:
- properties:
- readOnly:
- type: boolean
- options:
- additionalProperties:
- type: string
- type: object
- secretRef:
- properties:
- name:
- type: string
- type: object
- fsType:
- type: string
- driver:
- type: string
- type: object
- gcePersistentDisk:
- properties:
- readOnly:
- type: boolean
- pdName:
- type: string
- partition:
- type: integer
- fsType:
- type: string
- type: object
- ephemeral:
- properties:
- volumeClaimTemplate:
- properties:
- metadata:
- properties:
- generateName:
- type: string
- deletionGracePeriodSeconds:
- type: integer
- deletionTimestamp:
- type: string
- clusterName:
- type: string
- resourceVersion:
- type: string
- annotations:
- additionalProperties:
- type: string
- type: object
- selfLink:
- type: string
- creationTimestamp:
- type: string
- finalizers:
- items:
- type: string
- type: array
- labels:
- additionalProperties:
- type: string
- type: object
- ownerReferences:
- items:
- properties:
- blockOwnerDeletion:
- type: boolean
- uid:
- type: string
- apiVersion:
- type: string
- name:
- type: string
- kind:
- type: string
- controller:
- type: boolean
- type: object
- type: array
- uid:
- type: string
- generation:
- type: integer
- name:
- type: string
- managedFields:
- items:
- properties:
- time:
- type: string
- apiVersion:
- type: string
- fieldsV1:
- type: object
- fieldsType:
- type: string
- manager:
- type: string
- operation:
- type: string
- subresource:
- type: string
- type: object
- type: array
- namespace:
- type: string
- type: object
- spec:
- properties:
- selector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- storageClassName:
- type: string
- dataSource:
- properties:
- name:
- type: string
- kind:
- type: string
- apiGroup:
- type: string
- type: object
- resources:
- properties:
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- dataSourceRef:
- properties:
- name:
- type: string
- kind:
- type: string
- apiGroup:
- type: string
- type: object
- accessModes:
- items:
- type: string
- type: array
- volumeMode:
- type: string
- volumeName:
- type: string
- type: object
- type: object
- type: object
- scaleIO:
- properties:
- readOnly:
- type: boolean
- storageMode:
- type: string
- storagePool:
- type: string
- system:
- type: string
- gateway:
- type: string
- secretRef:
- properties:
- name:
- type: string
- type: object
- fsType:
- type: string
- sslEnabled:
- type: boolean
- volumeName:
- type: string
- protectionDomain:
- type: string
- type: object
- csi:
- properties:
- nodePublishSecretRef:
- properties:
- name:
- type: string
- type: object
- readOnly:
- type: boolean
- volumeAttributes:
- additionalProperties:
- type: string
- type: object
- fsType:
- type: string
- driver:
- type: string
- type: object
- secret:
- properties:
- optional:
- type: boolean
- secretName:
- type: string
- items:
- items:
- properties:
- path:
- type: string
- key:
- type: string
- mode:
- type: integer
- type: object
- type: array
- defaultMode:
- type: integer
- type: object
- name:
- type: string
- vsphereVolume:
- properties:
- storagePolicyName:
- type: string
- storagePolicyID:
- type: string
- volumePath:
- type: string
- fsType:
- type: string
- type: object
- gitRepo:
- properties:
- revision:
- type: string
- repository:
- type: string
- directory:
- type: string
- type: object
- glusterfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- endpoints:
- type: string
- type: object
- nfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- server:
- type: string
- type: object
- cinder:
- properties:
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- fsType:
- type: string
- volumeID:
- type: string
- type: object
- flocker:
- properties:
- datasetUUID:
- type: string
- datasetName:
- type: string
- type: object
- quobyte:
- properties:
- group:
- type: string
- readOnly:
- type: boolean
- volume:
- type: string
- user:
- type: string
- registry:
- type: string
- tenant:
- type: string
- type: object
- photonPersistentDisk:
- properties:
- pdID:
- type: string
- fsType:
- type: string
- type: object
- persistentVolumeClaim:
- properties:
- readOnly:
- type: boolean
- claimName:
- type: string
- type: object
- awsElasticBlockStore:
- properties:
- readOnly:
- type: boolean
- partition:
- type: integer
- fsType:
- type: string
- volumeID:
- type: string
- type: object
- configMap:
- properties:
- optional:
- type: boolean
- items:
- items:
- properties:
- path:
- type: string
- key:
- type: string
- mode:
- type: integer
- type: object
- type: array
- defaultMode:
- type: integer
- name:
- type: string
- type: object
- storageos:
- properties:
- readOnly:
- type: boolean
- volumeNamespace:
- type: string
- secretRef:
- properties:
- name:
- type: string
- type: object
- fsType:
- type: string
- volumeName:
- type: string
- type: object
- portworxVolume:
- properties:
- readOnly:
- type: boolean
- fsType:
- type: string
- volumeID:
- type: string
- type: object
- iscsi:
- properties:
- readOnly:
- type: boolean
- chapAuthSession:
- type: boolean
- lun:
- type: integer
- targetPortal:
- type: string
- iscsiInterface:
- type: string
- portals:
- items:
- type: string
- type: array
- initiatorName:
- type: string
- secretRef:
- properties:
- name:
- type: string
- type: object
- fsType:
- type: string
- iqn:
- type: string
- chapAuthDiscovery:
- type: boolean
- type: object
- rbd:
- properties:
- readOnly:
- type: boolean
- pool:
- type: string
- keyring:
- type: string
- image:
- type: string
- secretRef:
- properties:
- name:
- type: string
- type: object
- monitors:
- items:
- type: string
- type: array
- fsType:
- type: string
- user:
- type: string
- type: object
- azureFile:
- properties:
- readOnly:
- type: boolean
- secretName:
- type: string
- shareName:
- type: string
- type: object
- downwardAPI:
- properties:
- items:
- items:
- properties:
- path:
- type: string
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- type: object
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- resource:
- type: string
- type: object
- mode:
- type: integer
- type: object
- type: array
- defaultMode:
- type: integer
- type: object
- projected:
- properties:
- defaultMode:
- type: integer
- sources:
- items:
- properties:
- secret:
- properties:
- optional:
- type: boolean
- items:
- items:
- properties:
- path:
- type: string
- key:
- type: string
- mode:
- type: integer
- type: object
- type: array
- name:
- type: string
- type: object
- configMap:
- properties:
- optional:
- type: boolean
- items:
- items:
- properties:
- path:
- type: string
- key:
- type: string
- mode:
- type: integer
- type: object
- type: array
- name:
- type: string
- type: object
- serviceAccountToken:
- properties:
- path:
- type: string
- audience:
- type: string
- expirationSeconds:
- type: integer
- type: object
- downwardAPI:
- properties:
- items:
- items:
- properties:
- path:
- type: string
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- type: object
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- resource:
- type: string
- type: object
- mode:
- type: integer
- type: object
- type: array
- type: object
- type: object
- type: array
- type: object
- azureDisk:
- properties:
- readOnly:
- type: boolean
- diskName:
- type: string
- cachingMode:
- type: string
- fsType:
- type: string
- kind:
- type: string
- diskURI:
- type: string
- type: object
- cephfs:
- properties:
- path:
- type: string
- readOnly:
- type: boolean
- secretRef:
- properties:
- name:
- type: string
- type: object
- monitors:
- items:
- type: string
- type: array
- secretFile:
- type: string
- user:
- type: string
- type: object
- emptyDir:
- properties:
- sizeLimit:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- medium:
- type: string
- type: object
- fc:
- properties:
- readOnly:
- type: boolean
- lun:
- type: integer
- wwids:
- items:
- type: string
- type: array
- targetWWNs:
- items:
- type: string
- type: array
- fsType:
- type: string
- type: object
- type: object
- type: array
- restartPolicy:
- type: string
- terminationGracePeriodSeconds:
- type: integer
- setHostnameAsFQDN:
- type: boolean
- dnsConfig:
- properties:
- nameservers:
- items:
- type: string
- type: array
- searches:
- items:
- type: string
- type: array
- options:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- type: object
- securityContext:
- properties:
- runAsGroup:
- type: integer
- runAsNonRoot:
- type: boolean
- windowsOptions:
- properties:
- gmsaCredentialSpecName:
- type: string
- hostProcess:
- type: boolean
- gmsaCredentialSpec:
- type: string
- runAsUserName:
- type: string
- type: object
- sysctls:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- fsGroupChangePolicy:
- type: string
- seLinuxOptions:
- properties:
- role:
- type: string
- type:
- type: string
- user:
- type: string
- level:
- type: string
- type: object
- fsGroup:
- type: integer
- supplementalGroups:
- items:
- type: integer
- type: array
- runAsUser:
- type: integer
- seccompProfile:
- properties:
- type:
- type: string
- localhostProfile:
- type: string
- type: object
- type: object
- imagePullSecrets:
- items:
- properties:
- name:
- type: string
- type: object
- type: array
- subdomain:
- type: string
- serviceAccount:
- type: string
- activeDeadlineSeconds:
- type: integer
- priority:
- type: integer
- ephemeralContainers:
- items:
- properties:
- lifecycle:
- properties:
- postStart:
- properties:
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- preStop:
- properties:
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- type: object
- command:
- items:
- type: string
- type: array
- livenessProbe:
- properties:
- periodSeconds:
- type: integer
- failureThreshold:
- type: integer
- initialDelaySeconds:
- type: integer
- grpc:
- properties:
- port:
- type: integer
- service:
- type: string
- type: object
- successThreshold:
- type: integer
- terminationGracePeriodSeconds:
- type: integer
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- timeoutSeconds:
- type: integer
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- stdin:
- type: boolean
- image:
- type: string
- targetContainerName:
- type: string
- terminationMessagePolicy:
- type: string
- readinessProbe:
- properties:
- periodSeconds:
- type: integer
- failureThreshold:
- type: integer
- initialDelaySeconds:
- type: integer
- grpc:
- properties:
- port:
- type: integer
- service:
- type: string
- type: object
- successThreshold:
- type: integer
- terminationGracePeriodSeconds:
- type: integer
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- timeoutSeconds:
- type: integer
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- terminationMessagePath:
- type: string
- env:
- items:
- properties:
- value:
- type: string
- valueFrom:
- properties:
- configMapKeyRef:
- properties:
- optional:
- type: boolean
- key:
- type: string
- name:
- type: string
- type: object
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- type: object
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- resource:
- type: string
- type: object
- secretKeyRef:
- properties:
- optional:
- type: boolean
- key:
- type: string
- name:
- type: string
- type: object
- type: object
- name:
- type: string
- type: object
- type: array
- tty:
- type: boolean
- args:
- items:
- type: string
- type: array
- startupProbe:
- properties:
- periodSeconds:
- type: integer
- failureThreshold:
- type: integer
- initialDelaySeconds:
- type: integer
- grpc:
- properties:
- port:
- type: integer
- service:
- type: string
- type: object
- successThreshold:
- type: integer
- terminationGracePeriodSeconds:
- type: integer
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- timeoutSeconds:
- type: integer
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- stdinOnce:
- type: boolean
- ports:
- items:
- properties:
- containerPort:
- type: integer
- hostPort:
- type: integer
- name:
- type: string
- protocol:
- type: string
- hostIP:
- type: string
- type: object
- type: array
- workingDir:
- type: string
- envFrom:
- items:
- properties:
- prefix:
- type: string
- configMapRef:
- properties:
- optional:
- type: boolean
- name:
- type: string
- type: object
- secretRef:
- properties:
- optional:
- type: boolean
- name:
- type: string
- type: object
- type: object
- type: array
- volumeMounts:
- items:
- properties:
- readOnly:
- type: boolean
- subPathExpr:
- type: string
- mountPath:
- type: string
- mountPropagation:
- type: string
- subPath:
- type: string
- name:
- type: string
- type: object
- type: array
- securityContext:
- properties:
- runAsGroup:
- type: integer
- runAsNonRoot:
- type: boolean
- windowsOptions:
- properties:
- gmsaCredentialSpecName:
- type: string
- hostProcess:
- type: boolean
- gmsaCredentialSpec:
- type: string
- runAsUserName:
- type: string
- type: object
- allowPrivilegeEscalation:
- type: boolean
- capabilities:
- properties:
- add:
- items:
- type: string
- type: array
- drop:
- items:
- type: string
- type: array
- type: object
- seLinuxOptions:
- properties:
- role:
- type: string
- type:
- type: string
- user:
- type: string
- level:
- type: string
- type: object
- readOnlyRootFilesystem:
- type: boolean
- privileged:
- type: boolean
- runAsUser:
- type: integer
- procMount:
- type: string
- seccompProfile:
- properties:
- type:
- type: string
- localhostProfile:
- type: string
- type: object
- type: object
- name:
- type: string
- resources:
- properties:
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- imagePullPolicy:
- type: string
- volumeDevices:
- items:
- properties:
- devicePath:
- type: string
- name:
- type: string
- type: object
- type: array
- type: object
- type: array
- automountServiceAccountToken:
- type: boolean
- containers:
- items:
- properties:
- lifecycle:
- properties:
- postStart:
- properties:
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- preStop:
- properties:
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- type: object
- command:
- items:
- type: string
- type: array
- livenessProbe:
- properties:
- periodSeconds:
- type: integer
- failureThreshold:
- type: integer
- initialDelaySeconds:
- type: integer
- grpc:
- properties:
- port:
- type: integer
- service:
- type: string
- type: object
- successThreshold:
- type: integer
- terminationGracePeriodSeconds:
- type: integer
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- timeoutSeconds:
- type: integer
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- stdin:
- type: boolean
- image:
- type: string
- terminationMessagePolicy:
- type: string
- readinessProbe:
- properties:
- periodSeconds:
- type: integer
- failureThreshold:
- type: integer
- initialDelaySeconds:
- type: integer
- grpc:
- properties:
- port:
- type: integer
- service:
- type: string
- type: object
- successThreshold:
- type: integer
- terminationGracePeriodSeconds:
- type: integer
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- timeoutSeconds:
- type: integer
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- terminationMessagePath:
- type: string
- env:
- items:
- properties:
- value:
- type: string
- valueFrom:
- properties:
- configMapKeyRef:
- properties:
- optional:
- type: boolean
- key:
- type: string
- name:
- type: string
- type: object
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- type: object
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- resource:
- type: string
- type: object
- secretKeyRef:
- properties:
- optional:
- type: boolean
- key:
- type: string
- name:
- type: string
- type: object
- type: object
- name:
- type: string
- type: object
- type: array
- tty:
- type: boolean
- args:
- items:
- type: string
- type: array
- startupProbe:
- properties:
- periodSeconds:
- type: integer
- failureThreshold:
- type: integer
- initialDelaySeconds:
- type: integer
- grpc:
- properties:
- port:
- type: integer
- service:
- type: string
- type: object
- successThreshold:
- type: integer
- terminationGracePeriodSeconds:
- type: integer
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- timeoutSeconds:
- type: integer
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- stdinOnce:
- type: boolean
- ports:
- items:
- properties:
- containerPort:
- type: integer
- hostPort:
- type: integer
- name:
- type: string
- protocol:
- type: string
- hostIP:
- type: string
- type: object
- type: array
- workingDir:
- type: string
- envFrom:
- items:
- properties:
- prefix:
- type: string
- configMapRef:
- properties:
- optional:
- type: boolean
- name:
- type: string
- type: object
- secretRef:
- properties:
- optional:
- type: boolean
- name:
- type: string
- type: object
- type: object
- type: array
- volumeMounts:
- items:
- properties:
- readOnly:
- type: boolean
- subPathExpr:
- type: string
- mountPath:
- type: string
- mountPropagation:
- type: string
- subPath:
- type: string
- name:
- type: string
- type: object
- type: array
- securityContext:
- properties:
- runAsGroup:
- type: integer
- runAsNonRoot:
- type: boolean
- windowsOptions:
- properties:
- gmsaCredentialSpecName:
- type: string
- hostProcess:
- type: boolean
- gmsaCredentialSpec:
- type: string
- runAsUserName:
- type: string
- type: object
- allowPrivilegeEscalation:
- type: boolean
- capabilities:
- properties:
- add:
- items:
- type: string
- type: array
- drop:
- items:
- type: string
- type: array
- type: object
- seLinuxOptions:
- properties:
- role:
- type: string
- type:
- type: string
- user:
- type: string
- level:
- type: string
- type: object
- readOnlyRootFilesystem:
- type: boolean
- privileged:
- type: boolean
- runAsUser:
- type: integer
- procMount:
- type: string
- seccompProfile:
- properties:
- type:
- type: string
- localhostProfile:
- type: string
- type: object
- type: object
- name:
- type: string
- resources:
- properties:
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- imagePullPolicy:
- type: string
- volumeDevices:
- items:
- properties:
- devicePath:
- type: string
- name:
- type: string
- type: object
- type: array
- type: object
- type: array
- initContainers:
- items:
- properties:
- lifecycle:
- properties:
- postStart:
- properties:
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- preStop:
- properties:
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- type: object
- command:
- items:
- type: string
- type: array
- livenessProbe:
- properties:
- periodSeconds:
- type: integer
- failureThreshold:
- type: integer
- initialDelaySeconds:
- type: integer
- grpc:
- properties:
- port:
- type: integer
- service:
- type: string
- type: object
- successThreshold:
- type: integer
- terminationGracePeriodSeconds:
- type: integer
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- timeoutSeconds:
- type: integer
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- stdin:
- type: boolean
- image:
- type: string
- terminationMessagePolicy:
- type: string
- readinessProbe:
- properties:
- periodSeconds:
- type: integer
- failureThreshold:
- type: integer
- initialDelaySeconds:
- type: integer
- grpc:
- properties:
- port:
- type: integer
- service:
- type: string
- type: object
- successThreshold:
- type: integer
- terminationGracePeriodSeconds:
- type: integer
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- timeoutSeconds:
- type: integer
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- terminationMessagePath:
- type: string
- env:
- items:
- properties:
- value:
- type: string
- valueFrom:
- properties:
- configMapKeyRef:
- properties:
- optional:
- type: boolean
- key:
- type: string
- name:
- type: string
- type: object
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- type: object
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- resource:
- type: string
- type: object
- secretKeyRef:
- properties:
- optional:
- type: boolean
- key:
- type: string
- name:
- type: string
- type: object
- type: object
- name:
- type: string
- type: object
- type: array
- tty:
- type: boolean
- args:
- items:
- type: string
- type: array
- startupProbe:
- properties:
- periodSeconds:
- type: integer
- failureThreshold:
- type: integer
- initialDelaySeconds:
- type: integer
- grpc:
- properties:
- port:
- type: integer
- service:
- type: string
- type: object
- successThreshold:
- type: integer
- terminationGracePeriodSeconds:
- type: integer
- tcpSocket:
- properties:
- host:
- type: string
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- timeoutSeconds:
- type: integer
- exec:
- properties:
- command:
- items:
- type: string
- type: array
- type: object
- httpGet:
- properties:
- path:
- type: string
- scheme:
- type: string
- host:
- type: string
- httpHeaders:
- items:
- properties:
- value:
- type: string
- name:
- type: string
- type: object
- type: array
- port:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- stdinOnce:
- type: boolean
- ports:
- items:
- properties:
- containerPort:
- type: integer
- hostPort:
- type: integer
- name:
- type: string
- protocol:
- type: string
- hostIP:
- type: string
- type: object
- type: array
- workingDir:
- type: string
- envFrom:
- items:
- properties:
- prefix:
- type: string
- configMapRef:
- properties:
- optional:
- type: boolean
- name:
- type: string
- type: object
- secretRef:
- properties:
- optional:
- type: boolean
- name:
- type: string
- type: object
- type: object
- type: array
- volumeMounts:
- items:
- properties:
- readOnly:
- type: boolean
- subPathExpr:
- type: string
- mountPath:
- type: string
- mountPropagation:
- type: string
- subPath:
- type: string
- name:
- type: string
- type: object
- type: array
- securityContext:
- properties:
- runAsGroup:
- type: integer
- runAsNonRoot:
- type: boolean
- windowsOptions:
- properties:
- gmsaCredentialSpecName:
- type: string
- hostProcess:
- type: boolean
- gmsaCredentialSpec:
- type: string
- runAsUserName:
- type: string
- type: object
- allowPrivilegeEscalation:
- type: boolean
- capabilities:
- properties:
- add:
- items:
- type: string
- type: array
- drop:
- items:
- type: string
- type: array
- type: object
- seLinuxOptions:
- properties:
- role:
- type: string
- type:
- type: string
- user:
- type: string
- level:
- type: string
- type: object
- readOnlyRootFilesystem:
- type: boolean
- privileged:
- type: boolean
- runAsUser:
- type: integer
- procMount:
- type: string
- seccompProfile:
- properties:
- type:
- type: string
- localhostProfile:
- type: string
- type: object
- type: object
- name:
- type: string
- resources:
- properties:
- limits:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- type: object
- imagePullPolicy:
- type: string
- volumeDevices:
- items:
- properties:
- devicePath:
- type: string
- name:
- type: string
- type: object
- type: array
- type: object
- type: array
- priorityClassName:
- type: string
- tolerations:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- tolerationSeconds:
- type: integer
- value:
- type: string
- effect:
- type: string
- type: object
- type: array
- hostPID:
- type: boolean
- os:
- properties:
- name:
- type: string
- type: object
- serviceAccountName:
- type: string
- shareProcessNamespace:
- type: boolean
- hostNetwork:
- type: boolean
- hostname:
- type: string
- nodeSelector:
- additionalProperties:
- type: string
- type: object
- enableServiceLinks:
- type: boolean
- affinity:
- properties:
- podAntiAffinity:
- properties:
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- type: object
- type: array
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- podAffinityTerm:
- properties:
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- type: object
- weight:
- type: integer
- type: object
- type: array
- type: object
- nodeAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- weight:
- type: integer
- preference:
- properties:
- matchFields:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- matchExpressions:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- type: object
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- properties:
- nodeSelectorTerms:
- items:
- properties:
- matchFields:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- matchExpressions:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- type: object
- type: array
- type: object
- type: object
- podAffinity:
- properties:
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- type: object
- type: array
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- podAffinityTerm:
- properties:
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- type: object
- weight:
- type: integer
- type: object
- type: array
- type: object
- type: object
- readinessGates:
- items:
- properties:
- conditionType:
- type: string
- type: object
- type: array
- dnsPolicy:
- type: string
- hostIPC:
- type: boolean
- topologySpreadConstraints:
- items:
- properties:
- topologyKey:
- type: string
- maxSkew:
- type: integer
- whenUnsatisfiable:
- type: string
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- values:
- items:
- type: string
- type: array
- operator:
- type: string
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- type: object
- type: array
- overhead:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- x-kubernetes-int-or-string: true
- type: object
- schedulerName:
- type: string
- nodeName:
- type: string
- preemptionPolicy:
- type: string
- hostAliases:
- items:
- properties:
- hostnames:
- items:
- type: string
- type: array
- ip:
- type: string
- type: object
- type: array
- runtimeClassName:
- type: string
- type: object
- type: object
- amqBroker:
- properties:
- port:
- type: integer
- managementHost:
- type: string
- host:
- type: string
- usernameSecretRef:
- properties:
- optional:
- type: boolean
- key:
- type: string
- name:
- type: string
- type: object
- managementPort:
- type: integer
- passwordSecretRef:
- properties:
- optional:
- type: boolean
- key:
- type: string
- name:
- type: string
- type: object
- brokerName:
- type: string
- type: object
- scaling:
- properties:
- dynamic:
- type: boolean
- replicas:
- type: integer
- type: object
- type: object
- status:
- properties:
- outputMessageAddress:
- type: string
- inputMessageAddress:
- type: string
- conditions:
- items:
- properties:
- status:
- type: string
- reason:
- type: string
- lastTransitionTime:
- type: string
- observedGeneration:
- type: integer
- type:
- type: string
- message:
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/optaplanner-operator/src/k8s/openshift.yml b/optaplanner-operator/src/k8s/openshift.yml
deleted file mode 100644
index 9f277c402d..0000000000
--- a/optaplanner-operator/src/k8s/openshift.yml
+++ /dev/null
@@ -1,322 +0,0 @@
-# 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.
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- annotations:
- app.openshift.io/vcs-url: <<unknown>>
- app.quarkus.io/commit-id: 9d9d867ae972619cd29012a4a8ffb5e5c4fdb368
- app.quarkus.io/build-timestamp: 2022-05-03 - 17:27:05 +0000
- labels:
- app.kubernetes.io/name: optaplanner-operator
- app.kubernetes.io/version: latest
- app.openshift.io/runtime: quarkus
- name: optaplanner-operator
----
-apiVersion: v1
-kind: Service
-metadata:
- annotations:
- app.openshift.io/vcs-url: <<unknown>>
- app.quarkus.io/commit-id: 9d9d867ae972619cd29012a4a8ffb5e5c4fdb368
- app.quarkus.io/build-timestamp: 2022-05-03 - 17:27:05 +0000
- labels:
- app.kubernetes.io/name: optaplanner-operator
- app.kubernetes.io/version: latest
- app.openshift.io/runtime: quarkus
- name: optaplanner-operator
-spec:
- ports:
- - name: http
- port: 80
- targetPort: 8080
- selector:
- app.kubernetes.io/name: optaplanner-operator
- app.kubernetes.io/version: latest
- type: ClusterIP
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- labels:
- app.kubernetes.io/name: optaplanner-operator
- app.kubernetes.io/version: latest
- name: optaplanner-operator-view
-roleRef:
- kind: ClusterRole
- apiGroup: rbac.authorization.k8s.io
- name: view
-subjects:
- - kind: ServiceAccount
- name: optaplanner-operator
----
-apiVersion: image.openshift.io/v1
-kind: ImageStream
-metadata:
- labels:
- app.kubernetes.io/name: optaplanner-operator
- app.kubernetes.io/version: latest
- name: openjdk-17
-spec:
- dockerImageRepository: registry.access.redhat.com/ubi8/openjdk-17
----
-apiVersion: image.openshift.io/v1
-kind: ImageStream
-metadata:
- annotations:
- app.openshift.io/vcs-url: <<unknown>>
- app.quarkus.io/commit-id: 9d9d867ae972619cd29012a4a8ffb5e5c4fdb368
- app.quarkus.io/build-timestamp: 2022-05-03 - 17:27:05 +0000
- labels:
- app.kubernetes.io/name: optaplanner-operator
- app.kubernetes.io/version: latest
- app.openshift.io/runtime: quarkus
- name: optaplanner-operator
-spec: {}
----
-apiVersion: build.openshift.io/v1
-kind: BuildConfig
-metadata:
- annotations:
- app.openshift.io/vcs-url: <<unknown>>
- app.quarkus.io/commit-id: 9d9d867ae972619cd29012a4a8ffb5e5c4fdb368
- app.quarkus.io/build-timestamp: 2022-05-03 - 17:27:05 +0000
- labels:
- app.kubernetes.io/name: optaplanner-operator
- app.kubernetes.io/version: latest
- app.openshift.io/runtime: quarkus
- name: optaplanner-operator
-spec:
- output:
- to:
- kind: ImageStreamTag
- name: optaplanner-operator:latest
- source:
- binary: {}
- strategy:
- sourceStrategy:
- from:
- kind: ImageStreamTag
- name: openjdk-11:1.11
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: josdk-crd-validating-cluster-role
-rules:
- - apiGroups:
- - apiextensions.k8s.io
- resources:
- - customresourcedefinitions
- verbs:
- - get
- - list
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: optaplanner-solver-cluster-role
-rules:
- - apiGroups:
- - ""
- resources:
- - deployments
- - services
- - configmaps
- - pods
- verbs:
- - get
- - list
- - watch
- - create
- - delete
- - patch
- - update
- - apiGroups:
- - "apps"
- resources:
- - deployments
- - services
- - configmaps
- - pods
- verbs:
- - get
- - list
- - watch
- - create
- - delete
- - patch
- - update
- - apiGroups:
- - "org.optaplanner.solver"
- resources:
- - solvers
- - solvers/status
- - solvers/finalizers
- verbs:
- - get
- - list
- - watch
- - create
- - delete
- - patch
- - update
- - apiGroups:
- - "broker.amq.io"
- resources:
- - activemqartemisaddresses
- verbs:
- - get
- - list
- - watch
- - create
- - delete
- - patch
- - update
- - apiGroups:
- - "broker.amq.io"
- resources:
- - activemqartemisaddresses
- verbs:
- - get
- - list
- - watch
- - create
- - delete
- - patch
- - update
- - apiGroups:
- - "keda.sh"
- resources:
- - scaledobjects
- - scaledobjects/status
- - triggerauthentications
- verbs:
- - get
- - list
- - watch
- - create
- - delete
- - patch
- - update
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: optaplanner-solver-cluster-role-binding
-roleRef:
- kind: ClusterRole
- apiGroup: rbac.authorization.k8s.io
- name: optaplanner-solver-cluster-role
-subjects:
- - kind: ServiceAccount
- name: optaplanner-operator
- namespace: optaplanner-operator
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: optaplanner-solver-crd-validating-role-binding
-roleRef:
- kind: ClusterRole
- apiGroup: rbac.authorization.k8s.io
- name: josdk-crd-validating-cluster-role
-subjects:
- - kind: ServiceAccount
- name: optaplanner-operator
- namespace: optaplanner-operator
----
-apiVersion: apps.openshift.io/v1
-kind: DeploymentConfig
-metadata:
- annotations:
- app.openshift.io/vcs-url: <<unknown>>
- app.quarkus.io/commit-id: 9d9d867ae972619cd29012a4a8ffb5e5c4fdb368
- app.quarkus.io/build-timestamp: 2022-05-03 - 17:27:05 +0000
- labels:
- app.kubernetes.io/name: optaplanner-operator
- app.kubernetes.io/version: latest
- app.openshift.io/runtime: quarkus
- name: optaplanner-operator
-spec:
- replicas: 1
- selector:
- app.kubernetes.io/name: optaplanner-operator
- app.kubernetes.io/version: latest
- template:
- metadata:
- annotations:
- app.openshift.io/vcs-url: <<unknown>>
- app.quarkus.io/commit-id: 9d9d867ae972619cd29012a4a8ffb5e5c4fdb368
- app.quarkus.io/build-timestamp: 2022-05-03 - 17:27:05 +0000
- labels:
- app.kubernetes.io/name: optaplanner-operator
- app.kubernetes.io/version: latest
- app.openshift.io/runtime: quarkus
- spec:
- containers:
- - command:
- - java
- - -Dquarkus.http.host=0.0.0.0
- - -Djava.util.logging.manager=org.jboss.logmanager.LogManager
- - -jar
- - /deployments/quarkus-run.jar
- env:
- - name: KUBERNETES_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: JAVA_APP_JAR
- value: /deployments/optaplanner-operator-1.0-SNAPSHOT-runner.jar
- image: optaplanner-operator/optaplanner-operator:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- failureThreshold: 3
- httpGet:
- path: /q/health/live
- port: 8080
- scheme: HTTP
- initialDelaySeconds: 0
- periodSeconds: 30
- successThreshold: 1
- timeoutSeconds: 10
- name: optaplanner-operator
- ports:
- - containerPort: 8080
- name: http
- protocol: TCP
- readinessProbe:
- failureThreshold: 3
- httpGet:
- path: /q/health/ready
- port: 8080
- scheme: HTTP
- initialDelaySeconds: 0
- periodSeconds: 30
- successThreshold: 1
- timeoutSeconds: 10
- serviceAccountName: optaplanner-operator
- triggers:
- - imageChangeParams:
- automatic: true
- containerNames:
- - optaplanner-operator
- from:
- kind: ImageStreamTag
- name: optaplanner-operator:latest
- type: ImageChange
diff --git a/optaplanner-operator/src/k8s/optaplanner-operator.yml b/optaplanner-operator/src/k8s/optaplanner-operator.yml
deleted file mode 100644
index 6d1cd200bd..0000000000
--- a/optaplanner-operator/src/k8s/optaplanner-operator.yml
+++ /dev/null
@@ -1,219 +0,0 @@
-# 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.
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: optaplanner-operator
- name: optaplanner-operator
----
-apiVersion: v1
-kind: Service
-metadata:
- labels:
- app: optaplanner-operator
- name: optaplanner-operator
-spec:
- ports:
- - name: http
- port: 80
- targetPort: 8080
- selector:
- app: optaplanner-operator
- type: ClusterIP
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: optaplanner-operator-view
-roleRef:
- kind: ClusterRole
- apiGroup: rbac.authorization.k8s.io
- name: view
-subjects:
- - kind: ServiceAccount
- name: optaplanner-operator
- namespace: optaplanner-operator
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: josdk-crd-validating-cluster-role
- namespace: optaplanner-operator
-rules:
- - apiGroups:
- - apiextensions.k8s.io
- resources:
- - customresourcedefinitions
- verbs:
- - get
- - list
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: optaplanner-solver-cluster-role
-rules:
- - apiGroups:
- - ""
- resources:
- - deployments
- - services
- - configmaps
- - pods
- verbs:
- - get
- - list
- - watch
- - create
- - delete
- - patch
- - update
- - apiGroups:
- - "apps"
- resources:
- - deployments
- - services
- - configmaps
- - pods
- verbs:
- - get
- - list
- - watch
- - create
- - delete
- - patch
- - update
- - apiGroups:
- - "org.optaplanner.solver"
- resources:
- - solvers
- - solvers/status
- - solvers/finalizers
- verbs:
- - get
- - list
- - watch
- - create
- - delete
- - patch
- - update
- - apiGroups:
- - "broker.amq.io"
- resources:
- - activemqartemisaddresses
- verbs:
- - get
- - list
- - watch
- - create
- - delete
- - patch
- - update
- - apiGroups:
- - "keda.sh"
- resources:
- - scaledobjects
- - scaledobjects/status
- - triggerauthentications
- verbs:
- - get
- - list
- - watch
- - create
- - delete
- - patch
- - update
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: optaplanner-solver-cluster-role-binding
-roleRef:
- kind: ClusterRole
- apiGroup: rbac.authorization.k8s.io
- name: optaplanner-solver-cluster-role
-subjects:
- - kind: ServiceAccount
- name: optaplanner-operator
- namespace: optaplanner-operator
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: optaplanner-solver-crd-validating-role-binding
-roleRef:
- kind: ClusterRole
- apiGroup: rbac.authorization.k8s.io
- name: josdk-crd-validating-cluster-role
-subjects:
- - kind: ServiceAccount
- name: optaplanner-operator
- namespace: optaplanner-operator
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- labels:
- app: optaplanner-operator
- name: optaplanner-operator
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: optaplanner-operator
- template:
- metadata:
- labels:
- app: optaplanner-operator
- namespace: optaplanner-operator
- spec:
- containers:
- - env:
- - name: KUBERNETES_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- image: quay.io/optaplanner/optaplanner-operator:${project.version}
- imagePullPolicy: Always
- livenessProbe:
- failureThreshold: 3
- httpGet:
- path: /q/health/live
- port: 8080
- scheme: HTTP
- initialDelaySeconds: 0
- periodSeconds: 30
- successThreshold: 1
- timeoutSeconds: 10
- name: optaplanner-operator
- ports:
- - containerPort: 8080
- name: http
- protocol: TCP
- readinessProbe:
- failureThreshold: 3
- httpGet:
- path: /q/health/ready
- port: 8080
- scheme: HTTP
- initialDelaySeconds: 0
- periodSeconds: 30
- successThreshold: 1
- timeoutSeconds: 10
- serviceAccountName: optaplanner-operator
diff --git a/optaplanner-operator/src/k8s/school-timetabling-solver.yml b/optaplanner-operator/src/k8s/school-timetabling-solver.yml
deleted file mode 100644
index 8d58dff59d..0000000000
--- a/optaplanner-operator/src/k8s/school-timetabling-solver.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-# 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.
-
-# Example solver resource; override as you see fit.
-apiVersion: org.optaplanner.solver/v1alpha1
-kind: Solver
-metadata:
- name: school-timetabling
-spec:
- amqBroker:
- host: ex-aao-amqp-0-svc.demo.svc.cluster.local
- port: 5672
- managementHost: ex-aao-hdls-svc.demo.svc.cluster.local
- usernameSecretRef:
- key: AMQ_USER
- name: ex-aao-credentials-secret
- passwordSecretRef:
- key: AMQ_PASSWORD
- name: ex-aao-credentials-secret
- template:
- spec:
- containers:
- - name: school-timetabling
- image: quay.io/example/school-timetabling:latest
- scaling:
- dynamic: true
- replicas: 3
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/OptaPlannerSolverReconciler.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/OptaPlannerSolverReconciler.java
deleted file mode 100644
index d3946a4b25..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/OptaPlannerSolverReconciler.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver;
-
-import java.util.Map;
-import java.util.Optional;
-
-import jakarta.inject.Inject;
-
-import org.optaplanner.operator.impl.solver.model.ConfigMapDependentResource;
-import org.optaplanner.operator.impl.solver.model.DeploymentDependentResource;
-import org.optaplanner.operator.impl.solver.model.OptaPlannerSolver;
-import org.optaplanner.operator.impl.solver.model.OptaPlannerSolverStatus;
-import org.optaplanner.operator.impl.solver.model.keda.ScaledObjectDependentResource;
-import org.optaplanner.operator.impl.solver.model.keda.TriggerAuthenticationDependentResource;
-import org.optaplanner.operator.impl.solver.model.messaging.ArtemisQueue;
-import org.optaplanner.operator.impl.solver.model.messaging.ArtemisQueueDependentResource;
-import org.optaplanner.operator.impl.solver.model.messaging.MessageAddress;
-
-import io.fabric8.kubernetes.client.KubernetesClient;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
-import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusHandler;
-import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusUpdateControl;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
-import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceIDMatcherDiscriminator;
-import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.EventSource;
-import io.quarkiverse.operatorsdk.runtime.QuarkusConfigurationService;
-
-@ControllerConfiguration(name = "optaplanner-solver")
-public final class OptaPlannerSolverReconciler implements Reconciler<OptaPlannerSolver>, ErrorStatusHandler<OptaPlannerSolver>,
- EventSourceInitializer<OptaPlannerSolver> {
-
- private KubernetesClient kubernetesClient;
-
- private final DeploymentDependentResource deploymentDependentResource;
- private final ArtemisQueueDependentResource inputQueueDependentResource;
- private final ArtemisQueueDependentResource outputQueueDependentResource;
- private final ConfigMapDependentResource configMapDependentResource;
- private final TriggerAuthenticationDependentResource triggerAuthenticationDependentResource;
- private final ScaledObjectDependentResource scaledObjectDependentResource;
-
- @Inject
- QuarkusConfigurationService configurationService;
-
- @Inject
- public OptaPlannerSolverReconciler() {
-
- deploymentDependentResource = new DeploymentDependentResource();
- inputQueueDependentResource = new ArtemisQueueDependentResource(MessageAddress.INPUT);
- outputQueueDependentResource = new ArtemisQueueDependentResource(MessageAddress.OUTPUT);
- configMapDependentResource = new ConfigMapDependentResource();
- triggerAuthenticationDependentResource = new TriggerAuthenticationDependentResource();
- scaledObjectDependentResource = new ScaledObjectDependentResource();
-
- inputQueueDependentResource.setResourceDiscriminator(new ResourceIDMatcherDiscriminator<>(
- optaPlannerSolver -> new ResourceID(optaPlannerSolver.getInputMessageAddressName(),
- optaPlannerSolver.getMetadata().getNamespace())));
- outputQueueDependentResource.setResourceDiscriminator(new ResourceIDMatcherDiscriminator<>(
- optaPlannerSolver -> new ResourceID(optaPlannerSolver.getOutputMessageAddressName(),
- optaPlannerSolver.getMetadata().getNamespace())));
- }
-
- @Override
- public Map<String, EventSource> prepareEventSources(EventSourceContext<OptaPlannerSolver> context) {
- return EventSourceInitializer.nameEventSources(deploymentDependentResource.initEventSource(context),
- inputQueueDependentResource.initEventSource(context),
- outputQueueDependentResource.initEventSource(context),
- configMapDependentResource.initEventSource(context),
- triggerAuthenticationDependentResource.initEventSource(context),
- scaledObjectDependentResource.initEventSource(context));
- }
-
- @Override
- public UpdateControl<OptaPlannerSolver> reconcile(OptaPlannerSolver solver, Context<OptaPlannerSolver> context) {
- boolean isReady = true;
- deploymentDependentResource.reconcile(solver, context);
- inputQueueDependentResource.reconcile(solver, context);
- outputQueueDependentResource.reconcile(solver, context);
- if (solver.getSpec().getScaling().isDynamic()) {
- triggerAuthenticationDependentResource.reconcile(solver, context);
- scaledObjectDependentResource.reconcile(solver, context);
-
- if (scaledObjectDependentResource.getSecondaryResource(solver, context).isEmpty() ||
- triggerAuthenticationDependentResource.getSecondaryResource(solver, context).isEmpty()) {
- isReady = false;
- }
- }
-
- Optional<ArtemisQueue> inputQueue = inputQueueDependentResource.getSecondaryResource(solver, context);
- Optional<ArtemisQueue> outputQueue = outputQueueDependentResource.getSecondaryResource(solver, context);
- if (inputQueue.isEmpty() || outputQueue.isEmpty()) {
- isReady = false;
- }
-
- if (inputQueue.isPresent() && outputQueue.isPresent()) {
- configMapDependentResource.reconcile(solver, context);
- if (configMapDependentResource.getSecondaryResource(solver, context).isEmpty()) {
- isReady = false;
- }
- }
-
- if (isReady) {
- solver.setStatus(OptaPlannerSolverStatus.ready(solver.getMetadata().getGeneration()));
- solver.getStatus().setInputMessageAddress(inputQueue.get().getSpec().getQueueName());
- solver.getStatus().setOutputMessageAddress(outputQueue.get().getSpec().getQueueName());
- } else {
- solver.setStatus(OptaPlannerSolverStatus.unknown(solver.getMetadata().getGeneration()));
- }
- return UpdateControl.updateStatus(solver);
- }
-
- @Override
- public ErrorStatusUpdateControl<OptaPlannerSolver> updateErrorStatus(OptaPlannerSolver solver,
- Context<OptaPlannerSolver> context, Exception e) {
- solver.setStatus(OptaPlannerSolverStatus.error(solver.getMetadata().getGeneration(), e));
- return ErrorStatusUpdateControl.updateStatus(solver);
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/AmqBroker.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/AmqBroker.java
deleted file mode 100644
index 168e220a66..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/AmqBroker.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-
-import io.fabric8.kubernetes.api.model.SecretKeySelector;
-
-public final class AmqBroker {
-
- private static final int DEFAULT_PORT = 5672;
-
- private static final int DEFAULT_MANAGEMENT_PORT = 8161;
-
- // TODO: Try to detect.
- private static final String DEFAULT_BROKER_NAME = "amq-broker";
-
- private String host;
-
- private int port = DEFAULT_PORT;
-
- private String managementHost;
-
- private int managementPort = DEFAULT_MANAGEMENT_PORT;
-
- private String brokerName = DEFAULT_BROKER_NAME;
-
- private SecretKeySelector usernameSecretRef;
-
- private SecretKeySelector passwordSecretRef;
-
- public String getHost() {
- return host;
- }
-
- public void setHost(String host) {
- this.host = host;
- }
-
- public int getPort() {
- return port;
- }
-
- public void setPort(int port) {
- this.port = port;
- }
-
- public String getManagementHost() {
- return managementHost;
- }
-
- public void setManagementHost(String managementHost) {
- this.managementHost = managementHost;
- }
-
- public int getManagementPort() {
- return managementPort;
- }
-
- public void setManagementPort(int managementPort) {
- this.managementPort = managementPort;
- }
-
- public String getBrokerName() {
- return brokerName;
- }
-
- public void setBrokerName(String brokerName) {
- this.brokerName = brokerName;
- }
-
- public SecretKeySelector getUsernameSecretRef() {
- return usernameSecretRef;
- }
-
- public void setUsernameSecretRef(SecretKeySelector usernameSecretRef) {
- this.usernameSecretRef = usernameSecretRef;
- }
-
- public SecretKeySelector getPasswordSecretRef() {
- return passwordSecretRef;
- }
-
- public void setPasswordSecretRef(SecretKeySelector passwordSecretRef) {
- this.passwordSecretRef = passwordSecretRef;
- }
-
- @JsonIgnore
- public String getManagementEndpoint() {
- return String.format("%s:%s", managementHost, managementPort);
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/ConfigMapDependentResource.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/ConfigMapDependentResource.java
deleted file mode 100644
index cb8ed09541..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/ConfigMapDependentResource.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import io.fabric8.kubernetes.api.model.ConfigMap;
-import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
-
-@KubernetesDependent
-public final class ConfigMapDependentResource extends CRUDKubernetesDependentResource<ConfigMap, OptaPlannerSolver> {
-
- public static final String SOLVER_MESSAGE_INPUT_KEY = "solver.message.input";
- public static final String SOLVER_MESSAGE_OUTPUT_KEY = "solver.message.output";
- public static final String SOLVER_MESSAGE_AMQ_HOST_KEY = "solver.amq.host";
- public static final String SOLVER_MESSAGE_AMQ_PORT_KEY = "solver.amq.port";
-
- public ConfigMapDependentResource() {
- super(ConfigMap.class);
- }
-
- @Override
- protected ConfigMap desired(OptaPlannerSolver solver, Context<OptaPlannerSolver> context) {
- Map<String, String> data = new HashMap<>();
- data.put(SOLVER_MESSAGE_INPUT_KEY, solver.getInputMessageAddressName());
- data.put(SOLVER_MESSAGE_OUTPUT_KEY, solver.getOutputMessageAddressName());
- data.put(SOLVER_MESSAGE_AMQ_HOST_KEY, solver.getSpec().getAmqBroker().getHost());
- data.put(SOLVER_MESSAGE_AMQ_PORT_KEY, String.valueOf(solver.getSpec().getAmqBroker().getPort()));
-
- return new ConfigMapBuilder()
- .withNewMetadata()
- .withName(solver.getConfigMapName())
- .withNamespace(solver.getNamespace())
- .endMetadata()
- .withData(data)
- .build();
- }
-
- @Override
- public ConfigMap update(ConfigMap actual, ConfigMap target, OptaPlannerSolver solver, Context<OptaPlannerSolver> context) {
- ConfigMap resultingConfigMap = super.update(actual, target, solver, context);
- String namespace = actual.getMetadata().getNamespace();
- context.getClient()
- .pods()
- .inNamespace(namespace)
- .withLabel("app", solver.getMetadata().getName())
- .delete();
- return resultingConfigMap;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/DeploymentDependentResource.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/DeploymentDependentResource.java
deleted file mode 100644
index b78f4bffc0..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/DeploymentDependentResource.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import io.fabric8.kubernetes.api.model.Container;
-import io.fabric8.kubernetes.api.model.EnvVar;
-import io.fabric8.kubernetes.api.model.EnvVarBuilder;
-import io.fabric8.kubernetes.api.model.PodTemplateSpec;
-import io.fabric8.kubernetes.api.model.PodTemplateSpecBuilder;
-import io.fabric8.kubernetes.api.model.SecretKeySelector;
-import io.fabric8.kubernetes.api.model.apps.Deployment;
-import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
-import io.fabric8.kubernetes.api.model.apps.DeploymentSpecBuilder;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
-
-@KubernetesDependent
-public final class DeploymentDependentResource extends CRUDKubernetesDependentResource<Deployment, OptaPlannerSolver> {
-
- private static final String ENV_SOLVER_MESSAGE_IN = "SOLVER_MESSAGE_INPUT";
- private static final String ENV_SOLVER_MESSAGE_OUT = "SOLVER_MESSAGE_OUTPUT";
- private static final String ENV_AMQ_HOST = "SOLVER_MESSAGE_AMQ_HOST";
- private static final String ENV_AMQ_PORT = "SOLVER_MESSAGE_AMQ_PORT";
- private static final String ENV_AMQ_USERNAME = "SOLVER_MESSAGE_AMQ_USERNAME";
- private static final String ENV_AMQ_PASSWORD = "SOLVER_MESSAGE_AMQ_PASSWORD";
-
- public DeploymentDependentResource() {
- super(Deployment.class);
- }
-
- @Override
- protected Deployment desired(OptaPlannerSolver solver, Context<OptaPlannerSolver> context) {
- String deploymentName = solver.getDeploymentName();
-
- DeploymentSpecBuilder deploymentSpecBuilder = new DeploymentSpecBuilder()
- .withNewSelector().withMatchLabels(Map.of("app", deploymentName))
- .endSelector();
- if (!solver.getSpec().getScaling().isDynamic()) {
- // Set deployment replicas only for static scaling, otherwise the operator would interfere with KEDA.
- deploymentSpecBuilder.withReplicas(solver.getSpec().getScaling().getReplicas());
- }
-
- PodTemplateSpec podTemplateSpec = solver.getSpec().getTemplate();
- if (podTemplateSpec == null) {
- throw new IllegalStateException("Solver (" + solver.getMetadata().getName() + ") pod template is missing."
- + "\nMaybe check the related " + solver.getFullResourceName() + " resource.");
- }
-
- PodTemplateSpec updatedPodTemplateSpec = addPodAppLabel(podTemplateSpec, deploymentName);
- if (updatedPodTemplateSpec.getSpec() == null || updatedPodTemplateSpec.getSpec().getContainers() == null
- || updatedPodTemplateSpec.getSpec().getContainers().isEmpty()) {
- throw new IllegalStateException("Solver (" + solver.getMetadata().getName()
- + ") pod template does not contain any container."
- + "\nMaybe check the related " + solver.getFullResourceName() + " resource.");
- }
- List<Container> containers = updatedPodTemplateSpec.getSpec().getContainers();
- // There may be multiple containers; add the environment variables to all of them.
- for (Container container : containers) {
- if (container.getEnv() == null) {
- container.setEnv(new ArrayList<>());
- }
- container.getEnv().addAll(buildEnvironmentVariablesMapping(solver));
- }
-
- deploymentSpecBuilder.withTemplate(updatedPodTemplateSpec);
- return new DeploymentBuilder()
- .withNewMetadata()
- .withName(deploymentName)
- .withNamespace(solver.getNamespace())
- .endMetadata()
- .withSpec(deploymentSpecBuilder.build())
- .build();
- }
-
- private PodTemplateSpec addPodAppLabel(PodTemplateSpec podTemplateSpec, String deploymentName) {
- return new PodTemplateSpecBuilder(podTemplateSpec)
- .editOrNewMetadata()
- .addToLabels("app", deploymentName)
- .endMetadata()
- .build();
- }
-
- private List<EnvVar> buildEnvironmentVariablesMapping(OptaPlannerSolver solver) {
- String configMapName = solver.getConfigMapName();
- EnvVar envVarMessageInput = buildEnvVarFromConfigMap(ENV_SOLVER_MESSAGE_IN, configMapName,
- ConfigMapDependentResource.SOLVER_MESSAGE_INPUT_KEY);
-
- EnvVar envVarMessageOutput = buildEnvVarFromConfigMap(ENV_SOLVER_MESSAGE_OUT, configMapName,
- ConfigMapDependentResource.SOLVER_MESSAGE_OUTPUT_KEY);
-
- EnvVar envVarAmqHost = buildEnvVarFromConfigMap(ENV_AMQ_HOST, configMapName,
- ConfigMapDependentResource.SOLVER_MESSAGE_AMQ_HOST_KEY);
-
- EnvVar envVarAmqPort = buildEnvVarFromConfigMap(ENV_AMQ_PORT, configMapName,
- ConfigMapDependentResource.SOLVER_MESSAGE_AMQ_PORT_KEY);
-
- EnvVar envVarAmqUsername = buildEnvVarFromSecretKeySelector(ENV_AMQ_USERNAME,
- solver.getSpec().getAmqBroker().getUsernameSecretRef());
-
- EnvVar envVarAmqPassword = buildEnvVarFromSecretKeySelector(ENV_AMQ_PASSWORD,
- solver.getSpec().getAmqBroker().getPasswordSecretRef());
-
- return List.of(envVarMessageInput, envVarMessageOutput, envVarAmqHost, envVarAmqPort, envVarAmqUsername,
- envVarAmqPassword);
- }
-
- private EnvVar buildEnvVarFromConfigMap(String envVariable, String configMapName, String configMapKey) {
- return new EnvVarBuilder()
- .withName(envVariable)
- .withNewValueFrom()
- .withNewConfigMapKeyRef(configMapKey, configMapName, false)
- .endValueFrom()
- .build();
- }
-
- private EnvVar buildEnvVarFromSecretKeySelector(String envVariable, SecretKeySelector secretKeySelector) {
- return new EnvVarBuilder()
- .withName(envVariable)
- .withNewValueFrom()
- .withNewSecretKeyRef(secretKeySelector.getKey(), secretKeySelector.getName(), secretKeySelector.getOptional())
- .endValueFrom()
- .build();
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/OptaPlannerSolver.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/OptaPlannerSolver.java
deleted file mode 100644
index 66b5dad086..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/OptaPlannerSolver.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model;
-
-import org.optaplanner.operator.impl.solver.model.messaging.MessageAddress;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-
-import io.fabric8.kubernetes.api.model.Namespaced;
-import io.fabric8.kubernetes.client.CustomResource;
-import io.fabric8.kubernetes.model.annotation.Group;
-import io.fabric8.kubernetes.model.annotation.Kind;
-import io.fabric8.kubernetes.model.annotation.Plural;
-import io.fabric8.kubernetes.model.annotation.Singular;
-import io.fabric8.kubernetes.model.annotation.Version;
-
-@Group(OptaPlannerSolver.GROUP)
-@Plural(OptaPlannerSolver.PLURAL)
-@Singular(OptaPlannerSolver.SINGULAR)
-@Version(OptaPlannerSolver.API_VERSION)
-@Kind(OptaPlannerSolver.KIND)
-public final class OptaPlannerSolver extends CustomResource<OptaPlannerSolverSpec, OptaPlannerSolverStatus>
- implements Namespaced {
- public static final String GROUP = "org.optaplanner.solver";
- public static final String PLURAL = "solvers";
- public static final String SINGULAR = "solver";
- public static final String API_VERSION = "v1alpha1";
- public static final String KIND = "Solver";
-
- @Override
- protected OptaPlannerSolverStatus initStatus() {
- return new OptaPlannerSolverStatus();
- }
-
- // TODO: Move all the following methods away if this class ever becomes an API.
- @JsonIgnore
- public String getNamespace() {
- return getMetadata().getNamespace();
- }
-
- @JsonIgnore
- public String getConfigMapName() {
- return getSolverName();
- }
-
- @JsonIgnore
- public String getDeploymentName() {
- return getSolverName();
- }
-
- @JsonIgnore
- public String getInputMessageAddressName() {
- return getMessageAddressName(MessageAddress.INPUT);
- }
-
- @JsonIgnore
- public String getOutputMessageAddressName() {
- return getMessageAddressName(MessageAddress.OUTPUT);
- }
-
- @JsonIgnore
- public String getMessageAddressName(MessageAddress messageAddress) {
- return String.format("%s-%s", getSolverName(), messageAddress.getName());
- }
-
- @JsonIgnore
- public String getTriggerAuthenticationName() {
- return getSolverName();
- }
-
- @JsonIgnore
- public String getScaledObjectName() {
- return getSolverName();
- }
-
- @JsonIgnore
- public String getScaledObjectTriggerName() {
- return getSolverName();
- }
-
- @JsonIgnore
- private String getSolverName() {
- return getMetadata().getName();
- }
-
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/OptaPlannerSolverSpec.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/OptaPlannerSolverSpec.java
deleted file mode 100644
index 4db8b00d70..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/OptaPlannerSolverSpec.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model;
-
-import io.fabric8.kubernetes.api.model.PodTemplateSpec;
-
-public final class OptaPlannerSolverSpec {
- private AmqBroker amqBroker;
- private Scaling scaling = new Scaling();
- private PodTemplateSpec template;
-
- public Scaling getScaling() {
- return scaling;
- }
-
- public void setScaling(Scaling scaling) {
- this.scaling = scaling;
- }
-
- public AmqBroker getAmqBroker() {
- return amqBroker;
- }
-
- public void setAmqBroker(AmqBroker amqBroker) {
- this.amqBroker = amqBroker;
- }
-
- public PodTemplateSpec getTemplate() {
- return template;
- }
-
- public void setTemplate(PodTemplateSpec template) {
- this.template = template;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/OptaPlannerSolverStatus.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/OptaPlannerSolverStatus.java
deleted file mode 100644
index 6898a29c68..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/OptaPlannerSolverStatus.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model;
-
-import java.time.ZoneOffset;
-import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-
-import io.fabric8.kubernetes.api.model.Condition;
-import io.fabric8.kubernetes.api.model.ConditionBuilder;
-
-/*
- For more details about the Status and Conditions, see
- https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties
- */
-public final class OptaPlannerSolverStatus {
-
- public static final String CONDITION_TYPE_READY = "Ready";
- private static final String CONDITION_REASON_IN_PROGRESS = "InProgress";
-
- private static final String CONDITION_REASON_SOLVER_READY = "SolverReady";
-
- /**
- * @return the current timestamp in ISO 8601 format, e.g. "2022-09-02T12:36:10.571Z".
- */
- private static String currentTimestamp() {
- return ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT);
- }
-
- public static OptaPlannerSolverStatus unknown(Long generation) {
- OptaPlannerSolverStatus optaPlannerSolverStatus = new OptaPlannerSolverStatus();
- Condition condition = new ConditionBuilder()
- .withLastTransitionTime(currentTimestamp())
- .withObservedGeneration(generation)
- .withReason(CONDITION_REASON_IN_PROGRESS)
- .withStatus(ConditionStatus.UNKNOWN.getName())
- .withType(CONDITION_TYPE_READY)
- .build();
- optaPlannerSolverStatus.setConditions(List.of(condition));
- return optaPlannerSolverStatus;
- }
-
- public static OptaPlannerSolverStatus ready(Long generation) {
- OptaPlannerSolverStatus optaPlannerSolverStatus = new OptaPlannerSolverStatus();
- Condition condition = new ConditionBuilder()
- .withLastTransitionTime(currentTimestamp())
- .withObservedGeneration(generation)
- .withStatus(ConditionStatus.TRUE.getName())
- .withReason(CONDITION_REASON_SOLVER_READY)
- .withType(CONDITION_TYPE_READY)
- .build();
- optaPlannerSolverStatus.setConditions(List.of(condition));
- return optaPlannerSolverStatus;
- }
-
- public static OptaPlannerSolverStatus error(Long generation, Throwable error) {
- OptaPlannerSolverStatus optaPlannerSolverStatus = new OptaPlannerSolverStatus();
- Condition condition = new ConditionBuilder()
- .withLastTransitionTime(currentTimestamp())
- .withObservedGeneration(generation)
- .withStatus(ConditionStatus.FALSE.getName())
- .withType(CONDITION_TYPE_READY)
- .withReason(error.getClass().getSimpleName())
- .withMessage(error.getMessage())
- .build();
- optaPlannerSolverStatus.setConditions(List.of(condition));
- return optaPlannerSolverStatus;
- }
-
- public enum ConditionStatus {
- UNKNOWN("Unknown"),
- TRUE("True"),
- FALSE("False");
-
- private final String name;
-
- ConditionStatus(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
- }
-
- private List<Condition> conditions;
-
- private String inputMessageAddress;
- private String outputMessageAddress;
-
- public OptaPlannerSolverStatus() {
- // required by Jackson
- }
-
- public String getInputMessageAddress() {
- return inputMessageAddress;
- }
-
- public void setInputMessageAddress(String inputMessageAddress) {
- this.inputMessageAddress = inputMessageAddress;
- }
-
- public String getOutputMessageAddress() {
- return outputMessageAddress;
- }
-
- public void setOutputMessageAddress(String outputMessageAddress) {
- this.outputMessageAddress = outputMessageAddress;
- }
-
- public List<Condition> getConditions() {
- return conditions;
- }
-
- public void setConditions(List<Condition> conditions) {
- this.conditions = conditions;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/Scaling.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/Scaling.java
deleted file mode 100644
index 1a43d70dbd..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/Scaling.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model;
-
-public final class Scaling {
-
- private boolean dynamic = false;
-
- private int replicas = 1;
-
- public Scaling() {
- // Required by Jackson
- }
-
- public Scaling(boolean dynamic, int replicas) {
- this.dynamic = dynamic;
- this.replicas = replicas;
- }
-
- public boolean isDynamic() {
- return dynamic;
- }
-
- public int getReplicas() {
- return replicas;
- }
-
- public void setDynamic(boolean dynamic) {
- this.dynamic = dynamic;
- }
-
- public void setReplicas(int replicas) {
- this.replicas = replicas;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/common/ResourceNameReference.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/common/ResourceNameReference.java
deleted file mode 100644
index 3a3fdb7e13..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/common/ResourceNameReference.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.common;
-
-public final class ResourceNameReference {
-
- private String name;
-
- public ResourceNameReference() {
- // Required by Jackson.
- }
-
- public ResourceNameReference(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/KedaConstants.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/KedaConstants.java
deleted file mode 100644
index 89b0fda853..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/KedaConstants.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.keda;
-
-final class KedaConstants {
-
- static final String GROUP = "keda.sh";
-
- static final String API_VERSION = "v1alpha1";
-
- private KedaConstants() {
- throw new UnsupportedOperationException("This class should not be instantiated");
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/ScaledObject.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/ScaledObject.java
deleted file mode 100644
index 305b710199..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/ScaledObject.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.keda;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonInclude;
-
-import io.fabric8.kubernetes.api.model.Namespaced;
-import io.fabric8.kubernetes.client.CustomResource;
-import io.fabric8.kubernetes.model.annotation.Group;
-import io.fabric8.kubernetes.model.annotation.Kind;
-import io.fabric8.kubernetes.model.annotation.Version;
-
-@JsonInclude(JsonInclude.Include.NON_NULL)
-@Group(KedaConstants.GROUP)
-@Version(KedaConstants.API_VERSION)
-@Kind(ScaledObject.KIND)
-public final class ScaledObject extends CustomResource<ScaledObjectSpec, ScaledObject.ScaledObjectStatus>
- implements Namespaced {
-
- public static final String KIND = "ScaledObject";
-
- @JsonIgnoreProperties(ignoreUnknown = true)
- static class ScaledObjectStatus {
- // Not interested in the status of this resource.
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/ScaledObjectDependentResource.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/ScaledObjectDependentResource.java
deleted file mode 100644
index d5b0f8f396..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/ScaledObjectDependentResource.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.keda;
-
-import org.optaplanner.operator.impl.solver.model.AmqBroker;
-import org.optaplanner.operator.impl.solver.model.OptaPlannerSolver;
-import org.optaplanner.operator.impl.solver.model.common.ResourceNameReference;
-
-import io.fabric8.kubernetes.api.model.ObjectMeta;
-import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
-
-/*
-Example YAML:
------------------------------------------
-apiVersion: keda.sh/v1alpha1
-kind: ScaledObject
-metadata:
- name: school-timetabling-scaledobject
- namespace: artemis
-spec:
- scaleTargetRef:
- name: school-timetabling-activemq
- triggers:
- - type: artemis-queue
- name: school-timetabling-trigger
- metadata:
- managementEndpoint: "ex-aao-hdls-svc.artemis.svc.cluster.local:8161"
- queueName: "school-timetabling-problem"
- queueLength: "1"
- brokerName: "amq-broker"
- brokerAddress: "school-timetabling-problem"
- authenticationRef:
- name: school-timetabling-scaledobject-auth
- cooldownPeriod: 10
- maxReplicaCount: 3
- minReplicaCount: 0
- pollingInterval: 10
-*/
-
-@KubernetesDependent
-public final class ScaledObjectDependentResource extends CRUDKubernetesDependentResource<ScaledObject, OptaPlannerSolver> {
-
- public static final String ARTEMIS_QUEUE_TRIGGER = "artemis-queue";
-
- /**
- * Required to scale down to zero pods.
- */
- private static final int MIN_REPLICAS = 0;
- private static final int POLLING_INTERVAL = 10;
- private static final int COOLDOWN_PERIOD = 10;
-
- /**
- * The scaler increases replicas if the queue message count is greater than this value per active replica.
- */
- private static final int TARGET_QUEUE_LENGTH = 1;
-
- public ScaledObjectDependentResource() {
- super(ScaledObject.class);
- }
-
- @Override
- protected ScaledObject desired(OptaPlannerSolver optaPlannerSolver, Context<OptaPlannerSolver> context) {
- AmqBroker amqBroker = optaPlannerSolver.getSpec().getAmqBroker();
-
- TriggerMetadata triggerMetadata = new TriggerMetadata();
- triggerMetadata.setBrokerAddress(optaPlannerSolver.getInputMessageAddressName());
- triggerMetadata.setQueueName(optaPlannerSolver.getInputMessageAddressName());
- triggerMetadata.setQueueLength(String.valueOf(TARGET_QUEUE_LENGTH));
- triggerMetadata.setBrokerName(amqBroker.getBrokerName());
- triggerMetadata.setManagementEndpoint(amqBroker.getManagementEndpoint());
-
- Trigger trigger = new Trigger();
- trigger.setType(ARTEMIS_QUEUE_TRIGGER);
- trigger.setMetadata(triggerMetadata);
- trigger.setName(optaPlannerSolver.getScaledObjectTriggerName());
- trigger.setAuthenticationRef(new ResourceNameReference(optaPlannerSolver.getTriggerAuthenticationName()));
-
- ScaledObjectSpec spec = new ScaledObjectSpec();
- spec.withTrigger(trigger);
- spec.setScaleTargetRef(new ResourceNameReference(optaPlannerSolver.getDeploymentName()));
- spec.setMinReplicaCount(MIN_REPLICAS);
- spec.setMaxReplicaCount(optaPlannerSolver.getSpec().getScaling().getReplicas());
- spec.setPollingInterval(POLLING_INTERVAL);
- spec.setCooldownPeriod(COOLDOWN_PERIOD);
-
- ScaledObject scaledObject = new ScaledObject();
- scaledObject.setSpec(spec);
- scaledObject.setMetadata(buildMetadata(optaPlannerSolver));
- scaledObject.setStatus(new ScaledObject.ScaledObjectStatus());
-
- return scaledObject;
- }
-
- private ObjectMeta buildMetadata(OptaPlannerSolver optaPlannerSolver) {
- return new ObjectMetaBuilder()
- .withName(optaPlannerSolver.getScaledObjectName())
- .withNamespace(optaPlannerSolver.getNamespace())
- .build();
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/ScaledObjectSpec.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/ScaledObjectSpec.java
deleted file mode 100644
index 55d064e1b0..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/ScaledObjectSpec.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.keda;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.optaplanner.operator.impl.solver.model.common.ResourceNameReference;
-
-public final class ScaledObjectSpec {
-
- private ResourceNameReference scaleTargetRef;
-
- private List<Trigger> triggers = new ArrayList<>();
-
- private int cooldownPeriod;
-
- private int pollingInterval;
-
- private int minReplicaCount;
-
- private int maxReplicaCount;
-
- public ScaledObjectSpec withTrigger(Trigger trigger) {
- triggers.add(trigger);
- return this;
- }
-
- public ResourceNameReference getScaleTargetRef() {
- return scaleTargetRef;
- }
-
- public void setScaleTargetRef(ResourceNameReference scaleTargetRef) {
- this.scaleTargetRef = scaleTargetRef;
- }
-
- public List<Trigger> getTriggers() {
- return triggers;
- }
-
- public void setTriggers(List<Trigger> triggers) {
- this.triggers = triggers;
- }
-
- public int getCooldownPeriod() {
- return cooldownPeriod;
- }
-
- public void setCooldownPeriod(int cooldownPeriod) {
- this.cooldownPeriod = cooldownPeriod;
- }
-
- public int getPollingInterval() {
- return pollingInterval;
- }
-
- public void setPollingInterval(int pollingInterval) {
- this.pollingInterval = pollingInterval;
- }
-
- public int getMinReplicaCount() {
- return minReplicaCount;
- }
-
- public void setMinReplicaCount(int minReplicaCount) {
- this.minReplicaCount = minReplicaCount;
- }
-
- public int getMaxReplicaCount() {
- return maxReplicaCount;
- }
-
- public void setMaxReplicaCount(int maxReplicaCount) {
- this.maxReplicaCount = maxReplicaCount;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/SecretTargetRef.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/SecretTargetRef.java
deleted file mode 100644
index 366e8f14ba..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/SecretTargetRef.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.keda;
-
-import io.fabric8.kubernetes.api.model.SecretKeySelector;
-
-public final class SecretTargetRef {
-
- public static SecretTargetRef fromSecretKeySelector(String parameter, SecretKeySelector secretKeySelector) {
- return new SecretTargetRef(parameter, secretKeySelector.getName(), secretKeySelector.getKey());
- }
-
- private String parameter;
- private String name;
- private String key;
-
- public SecretTargetRef() {
- // Required by Jackson.
- }
-
- public SecretTargetRef(String parameter, String name, String key) {
- this.parameter = parameter;
- this.name = name;
- this.key = key;
- }
-
- public String getParameter() {
- return parameter;
- }
-
- public void setParameter(String parameter) {
- this.parameter = parameter;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getKey() {
- return key;
- }
-
- public void setKey(String key) {
- this.key = key;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/Trigger.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/Trigger.java
deleted file mode 100644
index a5ac2b7658..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/Trigger.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.keda;
-
-import org.optaplanner.operator.impl.solver.model.common.ResourceNameReference;
-
-public final class Trigger {
- private String type;
- private String name;
- private TriggerMetadata metadata;
- private ResourceNameReference authenticationRef;
-
- public String getType() {
- return type;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public TriggerMetadata getMetadata() {
- return metadata;
- }
-
- public void setMetadata(TriggerMetadata metadata) {
- this.metadata = metadata;
- }
-
- public ResourceNameReference getAuthenticationRef() {
- return authenticationRef;
- }
-
- public void setAuthenticationRef(ResourceNameReference authenticationRef) {
- this.authenticationRef = authenticationRef;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/TriggerAuthentication.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/TriggerAuthentication.java
deleted file mode 100644
index 0aed3f5d16..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/TriggerAuthentication.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.keda;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-
-import io.fabric8.kubernetes.api.model.Namespaced;
-import io.fabric8.kubernetes.client.CustomResource;
-import io.fabric8.kubernetes.model.annotation.Group;
-import io.fabric8.kubernetes.model.annotation.Kind;
-import io.fabric8.kubernetes.model.annotation.Version;
-
-@JsonInclude(JsonInclude.Include.NON_NULL)
-@Group(KedaConstants.GROUP)
-@Version(KedaConstants.API_VERSION)
-@Kind(TriggerAuthentication.KIND)
-public final class TriggerAuthentication
- extends CustomResource<TriggerAuthenticationSpec, Void> implements Namespaced {
-
- public static final String KIND = "TriggerAuthentication";
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/TriggerAuthenticationDependentResource.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/TriggerAuthenticationDependentResource.java
deleted file mode 100644
index a788fe81ea..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/TriggerAuthenticationDependentResource.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.keda;
-
-import org.optaplanner.operator.impl.solver.model.OptaPlannerSolver;
-
-import io.fabric8.kubernetes.api.model.ObjectMeta;
-import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
-import io.fabric8.kubernetes.api.model.SecretKeySelector;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
-
-/*
-Example YAML:
------------------------------------------
-apiVersion: keda.sh/v1alpha1
-kind: TriggerAuthentication
-metadata:
- name: school-timetabling-scaledobject-auth
- namespace: artemis
-spec:
- secretTargetRef:
- - parameter: username
- name: activemq-secret
- key: activemq-username
- - parameter: password
- name: activemq-secret
- key: activemq-password
-*/
-
-@KubernetesDependent
-public final class TriggerAuthenticationDependentResource
- extends CRUDKubernetesDependentResource<TriggerAuthentication, OptaPlannerSolver> {
-
- public static final String PARAM_USERNAME = "username";
- public static final String PARAM_PASSWORD = "password";
-
- public TriggerAuthenticationDependentResource() {
- super(TriggerAuthentication.class);
- }
-
- @Override
- protected TriggerAuthentication desired(OptaPlannerSolver optaPlannerSolver, Context<OptaPlannerSolver> context) {
- final SecretKeySelector amqUsernameSecretKeySelector =
- optaPlannerSolver.getSpec().getAmqBroker().getUsernameSecretRef();
- final SecretKeySelector amqPasswordSecretKeySelector =
- optaPlannerSolver.getSpec().getAmqBroker().getPasswordSecretRef();
- TriggerAuthenticationSpec spec = new TriggerAuthenticationSpec()
- .withSecretTargetRef(SecretTargetRef.fromSecretKeySelector(PARAM_USERNAME, amqUsernameSecretKeySelector))
- .withSecretTargetRef(SecretTargetRef.fromSecretKeySelector(PARAM_PASSWORD, amqPasswordSecretKeySelector));
-
- ObjectMeta metadata = new ObjectMetaBuilder()
- .withName(optaPlannerSolver.getTriggerAuthenticationName())
- .withNamespace(optaPlannerSolver.getNamespace())
- .build();
- TriggerAuthentication triggerAuthentication = new TriggerAuthentication();
- triggerAuthentication.setMetadata(metadata);
- triggerAuthentication.setSpec(spec);
-
- return triggerAuthentication;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/TriggerAuthenticationSpec.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/TriggerAuthenticationSpec.java
deleted file mode 100644
index 23bca2903f..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/TriggerAuthenticationSpec.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.keda;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public final class TriggerAuthenticationSpec {
-
- @JsonProperty("secretTargetRef")
- private List<SecretTargetRef> secretTargetRefs = new ArrayList<>();
-
- public TriggerAuthenticationSpec withSecretTargetRef(SecretTargetRef secretTargetRef) {
- secretTargetRefs.add(secretTargetRef);
- return this;
- }
-
- public List<SecretTargetRef> getSecretTargetRefs() {
- return secretTargetRefs;
- }
-
- public void setSecretTargetRefs(List<SecretTargetRef> secretTargetRefs) {
- this.secretTargetRefs = secretTargetRefs;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/TriggerMetadata.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/TriggerMetadata.java
deleted file mode 100644
index 8b7431f27d..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/keda/TriggerMetadata.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.keda;
-
-public final class TriggerMetadata {
- private String managementEndpoint;
- private String queueName;
- private String queueLength;
- private String brokerName;
- private String brokerAddress;
-
- public String getManagementEndpoint() {
- return managementEndpoint;
- }
-
- public void setManagementEndpoint(String managementEndpoint) {
- this.managementEndpoint = managementEndpoint;
- }
-
- public String getQueueName() {
- return queueName;
- }
-
- public void setQueueName(String queueName) {
- this.queueName = queueName;
- }
-
- public String getQueueLength() {
- return queueLength;
- }
-
- public void setQueueLength(String queueLength) {
- this.queueLength = queueLength;
- }
-
- public String getBrokerName() {
- return brokerName;
- }
-
- public void setBrokerName(String brokerName) {
- this.brokerName = brokerName;
- }
-
- public String getBrokerAddress() {
- return brokerAddress;
- }
-
- public void setBrokerAddress(String brokerAddress) {
- this.brokerAddress = brokerAddress;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/messaging/ArtemisQueue.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/messaging/ArtemisQueue.java
deleted file mode 100644
index a65963c8ad..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/messaging/ArtemisQueue.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.messaging;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-
-import io.fabric8.kubernetes.api.model.Namespaced;
-import io.fabric8.kubernetes.client.CustomResource;
-import io.fabric8.kubernetes.model.annotation.Group;
-import io.fabric8.kubernetes.model.annotation.Kind;
-import io.fabric8.kubernetes.model.annotation.Plural;
-import io.fabric8.kubernetes.model.annotation.Singular;
-import io.fabric8.kubernetes.model.annotation.Version;
-
-@JsonInclude(JsonInclude.Include.NON_NULL)
-@Group(ArtemisQueue.GROUP)
-@Plural(ArtemisQueue.PLURAL)
-@Singular(ArtemisQueue.SINGULAR)
-@Version(ArtemisQueue.API_VERSION)
-@Kind(ArtemisQueue.KIND)
-public final class ArtemisQueue extends CustomResource<ArtemisQueueSpec, ArtemisQueue.ArtemisQueueStatus>
- implements Namespaced {
-
- public static final String GROUP = "broker.amq.io";
- public static final String PLURAL = "activemqartemisaddresses";
- public static final String SINGULAR = "activemqartemisaddress";
- public static final String API_VERSION = "v1beta1";
- public static final String KIND = "ActiveMQArtemisAddress";
-
- static class ArtemisQueueStatus {
- // Not interested in the status.
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/messaging/ArtemisQueueDependentResource.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/messaging/ArtemisQueueDependentResource.java
deleted file mode 100644
index 0c5bf82002..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/messaging/ArtemisQueueDependentResource.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.messaging;
-
-import org.optaplanner.operator.impl.solver.model.OptaPlannerSolver;
-
-import io.fabric8.kubernetes.api.model.ObjectMeta;
-import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
-
-@KubernetesDependent
-public final class ArtemisQueueDependentResource extends CRUDKubernetesDependentResource<ArtemisQueue, OptaPlannerSolver> {
-
- public ArtemisQueueDependentResource(MessageAddress messageAddress) {
- super(ArtemisQueue.class);
- this.messageAddress = messageAddress;
- }
-
- private final MessageAddress messageAddress;
-
- @Override
- protected ArtemisQueue desired(OptaPlannerSolver solver, Context<OptaPlannerSolver> context) {
- final String queueName = solver.getMessageAddressName(messageAddress);
-
- ObjectMeta objectMeta = new ObjectMetaBuilder()
- .withName(queueName)
- .withNamespace(solver.getNamespace())
- .build();
-
- ArtemisQueueSpec spec = new ArtemisQueueSpec();
- spec.setAddressName(queueName);
- spec.setQueueName(queueName);
-
- ArtemisQueue artemisQueue = new ArtemisQueue();
- artemisQueue.setMetadata(objectMeta);
- artemisQueue.setSpec(spec);
-
- return artemisQueue;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/messaging/ArtemisQueueSpec.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/messaging/ArtemisQueueSpec.java
deleted file mode 100644
index 67aed73d2e..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/messaging/ArtemisQueueSpec.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.messaging;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public final class ArtemisQueueSpec {
-
- private static final String ROUTING_TYPE_ANYCAST = "anycast";
-
- private String addressName;
-
- private String queueName;
-
- @JsonProperty(access = JsonProperty.Access.READ_ONLY)
- private final String routingType = ROUTING_TYPE_ANYCAST;
-
- public String getAddressName() {
- return addressName;
- }
-
- public String getQueueName() {
- return queueName;
- }
-
- public String getRoutingType() {
- return routingType;
- }
-
- public void setAddressName(String addressName) {
- this.addressName = addressName;
- }
-
- public void setQueueName(String queueName) {
- this.queueName = queueName;
- }
-}
diff --git a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/messaging/MessageAddress.java b/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/messaging/MessageAddress.java
deleted file mode 100644
index 0eeb79f6fa..0000000000
--- a/optaplanner-operator/src/main/java/org/optaplanner/operator/impl/solver/model/messaging/MessageAddress.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.messaging;
-
-public enum MessageAddress {
-
- INPUT("problem"),
- OUTPUT("solution");
-
- private final String name;
-
- MessageAddress(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-}
diff --git a/optaplanner-operator/src/main/resources/application.properties b/optaplanner-operator/src/main/resources/application.properties
deleted file mode 100644
index 8672871dc9..0000000000
--- a/optaplanner-operator/src/main/resources/application.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-# 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.
-#
-
-
-quarkus.operator-sdk.crd.apply=true
-
-# New version of the operator use SSA, a different algorithm for creating resources
-# that needs some changes. In the meanwhile this feature flag reverts to the old behaviour
-# See https://javaoperatorsdk.io/docs/dependent-resources#comparing-desired-and-actual-state-matching
-# And https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L332-L358
-quarkus.operator-sdk.enable-ssa=false
-
-quarkus.log.category."io.quarkiverse.operatorsdk".level=ERROR
-
-########################
-# Building the image
-########################
-
-quarkus.container-image.name=optaplanner-operator
-quarkus.container-image.tag=latest
-quarkus.kubernetes.namespace=optaplanner-operator
-quarkus.kubernetes.deployment-target=kubernetes,openshift
-%openshift.quarkus.container-image.build=true
-
-%image.quarkus.container-image.build=true
-# Intentionally left blank so that the image is not bound to any namespace.
-%image.quarkus.container-image.group=
-%image.quarkus.jib.base-jvm-image=registry.access.redhat.com/ubi8/openjdk-17-runtime:1.14
\ No newline at end of file
diff --git a/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/AbstractKubernetesTest.java b/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/AbstractKubernetesTest.java
deleted file mode 100644
index b44efc670b..0000000000
--- a/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/AbstractKubernetesTest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver;
-
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-import io.quarkus.test.kubernetes.client.KubernetesTestServer;
-import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
-
-@WithKubernetesTestServer
-abstract public class AbstractKubernetesTest {
-
- @KubernetesTestServer
- private KubernetesServer mockServer;
-
- protected KubernetesServer getMockServer() {
- return mockServer;
- }
-}
diff --git a/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/OptaPlannerSolverReconcilerTest.java b/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/OptaPlannerSolverReconcilerTest.java
deleted file mode 100644
index 83515d8376..0000000000
--- a/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/OptaPlannerSolverReconcilerTest.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver;
-
-import static java.util.concurrent.TimeUnit.MINUTES;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
-
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import jakarta.enterprise.event.Observes;
-import jakarta.inject.Inject;
-
-import org.assertj.core.api.SoftAssertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.optaplanner.operator.impl.solver.model.AmqBroker;
-import org.optaplanner.operator.impl.solver.model.ConfigMapDependentResource;
-import org.optaplanner.operator.impl.solver.model.OptaPlannerSolver;
-import org.optaplanner.operator.impl.solver.model.OptaPlannerSolverSpec;
-import org.optaplanner.operator.impl.solver.model.OptaPlannerSolverStatus;
-import org.optaplanner.operator.impl.solver.model.Scaling;
-import org.optaplanner.operator.impl.solver.model.keda.ScaledObject;
-import org.optaplanner.operator.impl.solver.model.keda.ScaledObjectDependentResource;
-import org.optaplanner.operator.impl.solver.model.keda.SecretTargetRef;
-import org.optaplanner.operator.impl.solver.model.keda.Trigger;
-import org.optaplanner.operator.impl.solver.model.keda.TriggerAuthentication;
-import org.optaplanner.operator.impl.solver.model.keda.TriggerAuthenticationDependentResource;
-
-import io.fabric8.kubernetes.api.model.Condition;
-import io.fabric8.kubernetes.api.model.ConfigMap;
-import io.fabric8.kubernetes.api.model.ContainerBuilder;
-import io.fabric8.kubernetes.api.model.EnvVar;
-import io.fabric8.kubernetes.api.model.EnvVarBuilder;
-import io.fabric8.kubernetes.api.model.PodTemplateSpec;
-import io.fabric8.kubernetes.api.model.PodTemplateSpecBuilder;
-import io.fabric8.kubernetes.api.model.Quantity;
-import io.fabric8.kubernetes.api.model.SecretKeySelector;
-import io.fabric8.kubernetes.api.model.apps.Deployment;
-import io.fabric8.kubernetes.client.KubernetesClient;
-import io.javaoperatorsdk.operator.Operator;
-import io.quarkus.runtime.StartupEvent;
-import io.quarkus.test.junit.QuarkusTest;
-
-@QuarkusTest
-public class OptaPlannerSolverReconcilerTest extends AbstractKubernetesTest {
-
- @Inject
- private Operator operator;
-
- // TODO: Replace with @BeforeEach after https://github.com/quarkiverse/quarkus-operator-sdk/issues/388 is resolved.
- public void onStart(@Observes StartupEvent startupEvent) {
- operator.start();
- }
-
- private String namespace;
-
- @BeforeEach
- public void createNamespace() {
- namespace = "test-" + UUID.randomUUID();
- }
-
- @Test
- void createMandatoryDependentResources() {
- final OptaPlannerSolver solver = new OptaPlannerSolver();
- final String solverName = "test-solver";
-
- AmqBroker amqBroker = createAmqBroker();
-
- solver.getMetadata().setName(solverName);
- solver.getMetadata().setNamespace(namespace);
- solver.setSpec(new OptaPlannerSolverSpec());
- solver.getSpec().setTemplate(createPodTemplateSpec("solver-project-image"));
- solver.getSpec().setAmqBroker(amqBroker);
- solver.getSpec().setScaling(new Scaling());
- getClient().resources(OptaPlannerSolver.class).create(solver);
-
- final String expectedMessageAddressIn = solver.getInputMessageAddressName();
- final String expectedMessageAddressOut = solver.getOutputMessageAddressName();
-
- await().ignoreException(NullPointerException.class).atMost(1, MINUTES).untilAsserted(() -> {
- OptaPlannerSolver updatedSolver = getClient()
- .resources(OptaPlannerSolver.class)
- .inNamespace(solver.getMetadata().getNamespace())
- .withName(solver.getMetadata().getName())
- .get();
- assertThat(updatedSolver.getStatus()).isNotNull();
- assertThat(updatedSolver.getStatus().getConditions()).isNotEmpty();
- Condition condition = updatedSolver.getStatus().getConditions().get(0);
- assertStatusCondition(condition, updatedSolver, OptaPlannerSolverStatus.ConditionStatus.TRUE);
-
- assertThat(updatedSolver.getStatus().getInputMessageAddress())
- .isEqualTo(expectedMessageAddressIn);
- assertThat(updatedSolver.getStatus().getOutputMessageAddress())
- .isEqualTo(expectedMessageAddressOut);
- });
- ConfigMap configMap = getClient()
- .resources(ConfigMap.class)
- .inNamespace(solver.getMetadata().getNamespace())
- .withName(solver.getConfigMapName())
- .get();
- Map<String, String> configMapData = configMap.getData();
- assertThat(configMapData.get(ConfigMapDependentResource.SOLVER_MESSAGE_INPUT_KEY))
- .isEqualTo(expectedMessageAddressIn);
- assertThat(configMapData.get(ConfigMapDependentResource.SOLVER_MESSAGE_OUTPUT_KEY))
- .isEqualTo(expectedMessageAddressOut);
-
- List<Deployment> deployments = getClient()
- .resources(Deployment.class)
- .inNamespace(solver.getMetadata().getNamespace())
- .list()
- .getItems();
- assertThat(deployments).hasSize(1);
- assertThat(deployments.get(0).getMetadata().getName()).isEqualTo("test-solver");
- }
-
- @Test
- void dynamicScaling_configuresKeda() {
- final String solverName = "test-solver";
- final AmqBroker amqBroker = createAmqBroker();
- final int maxReplicas = 5;
-
- final OptaPlannerSolver solver = new OptaPlannerSolver();
- solver.getMetadata().setName(solverName);
- solver.getMetadata().setNamespace(namespace);
- solver.setSpec(new OptaPlannerSolverSpec());
- solver.getSpec().setTemplate(createPodTemplateSpec("solver-project-image"));
- solver.getSpec().setAmqBroker(amqBroker);
- solver.getSpec().setScaling(new Scaling(true, maxReplicas));
-
- getClient().resources(OptaPlannerSolver.class).create(solver);
- await().ignoreException(NullPointerException.class).atMost(1, MINUTES).untilAsserted(() -> {
- OptaPlannerSolver updatedSolver = getClient()
- .resources(OptaPlannerSolver.class)
- .inNamespace(solver.getMetadata().getNamespace())
- .withName(solver.getMetadata().getName())
- .get();
- assertThat(updatedSolver.getStatus().getConditions().get(0).getStatus())
- .isNotEqualTo(OptaPlannerSolverStatus.ConditionStatus.UNKNOWN.getName());
- });
-
- ScaledObject scaledObject = getClient()
- .resources(ScaledObject.class)
- .inNamespace(solver.getMetadata().getNamespace())
- .withName(solverName)
- .get();
-
- TriggerAuthentication triggerAuthentication = getClient()
- .resources(TriggerAuthentication.class)
- .inNamespace(solver.getMetadata().getNamespace())
- .withName(solverName)
- .get();
-
- assertThat(scaledObject.getSpec().getScaleTargetRef().getName()).isEqualTo(solverName);
- assertThat(scaledObject.getSpec().getTriggers()).hasSize(1);
- Trigger trigger = scaledObject.getSpec().getTriggers().get(0);
- assertThat(trigger.getType()).isEqualTo(ScaledObjectDependentResource.ARTEMIS_QUEUE_TRIGGER);
- assertThat(trigger.getMetadata().getQueueName()).isEqualTo(solver.getInputMessageAddressName());
- assertThat(trigger.getAuthenticationRef().getName()).isEqualTo(triggerAuthentication.getMetadata().getName());
-
- List<SecretTargetRef> secretTargetRefs = triggerAuthentication.getSpec().getSecretTargetRefs();
- assertThat(secretTargetRefs).hasSize(2);
- assertThat(secretTargetRefs).allSatisfy(secretTargetRef -> {
- if (TriggerAuthenticationDependentResource.PARAM_USERNAME.equals(secretTargetRef.getParameter())) {
- assertSecretTargetRefFromSecretKeySelector(secretTargetRef, amqBroker.getUsernameSecretRef());
- } else {
- assertSecretTargetRefFromSecretKeySelector(secretTargetRef, amqBroker.getPasswordSecretRef());
- }
- });
- }
-
- @Test
- void incorrectSolverResource_FailedCondition() {
- final OptaPlannerSolver solver = new OptaPlannerSolver();
- final String solverName = "incorrect-solver";
- solver.getMetadata().setName(solverName);
- solver.getMetadata().setNamespace(namespace);
- solver.setSpec(new OptaPlannerSolverSpec()); // Empty spec.
- getClient().resources(OptaPlannerSolver.class).create(solver);
-
- await().ignoreException(NullPointerException.class).atMost(1, MINUTES).untilAsserted(() -> {
- OptaPlannerSolver updatedSolver = getClient()
- .resources(OptaPlannerSolver.class)
- .inNamespace(solver.getMetadata().getNamespace())
- .withName(solver.getMetadata().getName())
- .get();
-
- assertThat(updatedSolver.getStatus().getConditions()).isNotEmpty();
- Condition condition = updatedSolver.getStatus().getConditions().get(0);
- assertStatusCondition(condition, updatedSolver, OptaPlannerSolverStatus.ConditionStatus.FALSE);
- });
- }
-
- @Test
- void mergePodTemplate() {
- final OptaPlannerSolver solver = new OptaPlannerSolver();
- final String solverName = "test-solver-merge-environment";
-
- solver.getMetadata().setName(solverName);
- solver.getMetadata().setNamespace(namespace);
- solver.setSpec(new OptaPlannerSolverSpec());
- solver.getSpec().setAmqBroker(createAmqBroker());
-
- EnvVar existingEnvVar = new EnvVarBuilder()
- .withName("test-var")
- .withValue("test-var-value")
- .build();
-
- PodTemplateSpec podTemplateSpec = new PodTemplateSpecBuilder()
- .withNewMetadata()
- .withName("test-pod-template")
- .addToLabels("test-label", "test-label-value")
- .endMetadata()
- .withNewSpec()
- .withContainers(new ContainerBuilder()
- .withImage("solver-project-image")
- .withEnv(existingEnvVar)
- .withNewResources()
- .addToRequests("cpu", Quantity.parse("1"))
- .endResources()
- .build())
- .endSpec()
- .build();
-
- solver.getSpec().setTemplate(podTemplateSpec);
-
- getClient().resources(OptaPlannerSolver.class).create(solver);
-
- await().ignoreException(NullPointerException.class).atMost(1, MINUTES).untilAsserted(() -> {
- OptaPlannerSolver updatedSolver = getClient()
- .resources(OptaPlannerSolver.class)
- .inNamespace(solver.getMetadata().getNamespace())
- .withName(solver.getMetadata().getName())
- .get();
- assertThat(updatedSolver.getStatus().getConditions().get(0).getStatus())
- .isNotEqualTo(OptaPlannerSolverStatus.ConditionStatus.UNKNOWN.getName());
- });
-
- List<Deployment> deployments = getClient()
- .resources(Deployment.class)
- .inNamespace(solver.getMetadata().getNamespace())
- .list()
- .getItems();
- assertThat(deployments).hasSize(1);
- PodTemplateSpec resolvedPodTemplateSpec = deployments.get(0).getSpec().getTemplate();
- assertThat(resolvedPodTemplateSpec.getMetadata().getName()).isEqualTo(podTemplateSpec.getMetadata().getName());
- assertThat(resolvedPodTemplateSpec.getMetadata().getLabels()).containsOnlyKeys("app", "test-label");
- assertThat(resolvedPodTemplateSpec.getSpec().getContainers()).hasSize(1);
- assertThat(resolvedPodTemplateSpec.getSpec().getContainers().get(0).getEnv())
- .hasSizeGreaterThan(1)
- .contains(existingEnvVar);
- assertThat(resolvedPodTemplateSpec.getSpec().getContainers().get(0).getResources().getRequests())
- .containsOnlyKeys("cpu");
- }
-
- private KubernetesClient getClient() {
- return getMockServer().getClient().inNamespace(namespace);
- }
-
- private void assertSecretTargetRefFromSecretKeySelector(SecretTargetRef secretTargetRef,
- SecretKeySelector secretKeySelector) {
- SoftAssertions.assertSoftly(softly -> {
- softly.assertThat(secretTargetRef.getName()).isEqualTo(secretKeySelector.getName());
- softly.assertThat(secretTargetRef.getKey()).isEqualTo(secretKeySelector.getKey());
- });
- }
-
- private void assertStatusCondition(Condition condition, OptaPlannerSolver optaPlannerSolver,
- OptaPlannerSolverStatus.ConditionStatus expectedStatus) {
- SoftAssertions.assertSoftly(softly -> {
- softly.assertThat(condition.getType()).isEqualTo(OptaPlannerSolverStatus.CONDITION_TYPE_READY);
- softly.assertThat(condition.getStatus()).isEqualTo(expectedStatus.getName());
- softly.assertThat(condition.getLastTransitionTime()).isNotEmpty();
- softly.assertThat(condition.getObservedGeneration())
- .isEqualTo(optaPlannerSolver.getMetadata().getGeneration());
- });
- }
-
- private AmqBroker createAmqBroker() {
- AmqBroker amqBroker = new AmqBroker();
- amqBroker.setHost("amq-host");
- amqBroker.setPort(5678);
- amqBroker.setUsernameSecretRef(new SecretKeySelector("amq-username", "my-secret", false));
- amqBroker.setPasswordSecretRef(new SecretKeySelector("amq-password", "my-secret", false));
-
- return amqBroker;
- }
-
- private PodTemplateSpec createPodTemplateSpec(String imageName) {
- return new PodTemplateSpecBuilder()
- .withNewSpec()
- .withContainers(new ContainerBuilder()
- .withImage(imageName)
- .build())
- .endSpec()
- .build();
- }
-}
diff --git a/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/model/AbstractKubernetesCustomResourceTest.java b/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/model/AbstractKubernetesCustomResourceTest.java
deleted file mode 100644
index 5d90800310..0000000000
--- a/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/model/AbstractKubernetesCustomResourceTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.jupiter.api.Test;
-import org.optaplanner.operator.impl.solver.AbstractKubernetesTest;
-
-import io.fabric8.kubernetes.client.CustomResource;
-
-public abstract class AbstractKubernetesCustomResourceTest<CustomResourceType extends CustomResource<?, ?>>
- extends AbstractKubernetesTest {
-
- private final Class<CustomResourceType> customResourceClass;
-
- public AbstractKubernetesCustomResourceTest(Class<CustomResourceType> customResourceClass) {
- this.customResourceClass = customResourceClass;
- }
-
- @Test
- void createAndVerifyCustomResource() {
- CustomResourceType customResource = createCustomResource();
- CustomResourceType returned = getMockServer().getClient().resources(customResourceClass).create(customResource);
- assertThat(returned).isNotSameAs(customResource);
- assertThat(returned).usingRecursiveComparison().ignoringExpectedNullFields().isEqualTo(customResource);
- }
-
- abstract protected CustomResourceType createCustomResource();
-}
diff --git a/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/model/keda/ScaledObjectTest.java b/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/model/keda/ScaledObjectTest.java
deleted file mode 100644
index b579650ac0..0000000000
--- a/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/model/keda/ScaledObjectTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.keda;
-
-import org.optaplanner.operator.impl.solver.model.AbstractKubernetesCustomResourceTest;
-import org.optaplanner.operator.impl.solver.model.common.ResourceNameReference;
-
-import io.fabric8.kubernetes.api.model.ObjectMeta;
-import io.quarkus.test.junit.QuarkusTest;
-
-@QuarkusTest
-public class ScaledObjectTest extends AbstractKubernetesCustomResourceTest<ScaledObject> {
-
- public ScaledObjectTest() {
- super(ScaledObject.class);
- }
-
- @Override
- protected ScaledObject createCustomResource() {
- TriggerMetadata triggerMetadata = new TriggerMetadata();
- triggerMetadata.setBrokerAddress("test-messaging-address");
- triggerMetadata.setBrokerName("amq-broker");
- triggerMetadata.setQueueLength(String.valueOf(1));
- triggerMetadata.setQueueName("test-messaging-queue");
- triggerMetadata.setManagementEndpoint("test-host:8161");
-
- Trigger trigger = new Trigger();
- trigger.setAuthenticationRef(new ResourceNameReference("test-trigger-auth"));
- trigger.setMetadata(triggerMetadata);
- trigger.setName("test-keda-trigger");
- trigger.setType("artemis-queue");
-
- ScaledObjectSpec scaledObjectSpec = new ScaledObjectSpec();
- scaledObjectSpec.setCooldownPeriod(10);
- scaledObjectSpec.setMaxReplicaCount(5);
- scaledObjectSpec.setMinReplicaCount(0);
- scaledObjectSpec.setPollingInterval(10);
- scaledObjectSpec.setScaleTargetRef(new ResourceNameReference("test-deployment"));
- scaledObjectSpec.withTrigger(trigger);
-
- ObjectMeta scaledObjectMeta = new ObjectMeta();
- scaledObjectMeta.setName("test-scaled-object");
- ScaledObject scaledObject = new ScaledObject();
- scaledObject.setMetadata(scaledObjectMeta);
- scaledObject.setSpec(scaledObjectSpec);
-
- return scaledObject;
- }
-}
diff --git a/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/model/keda/TriggerAuthenticationTest.java b/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/model/keda/TriggerAuthenticationTest.java
deleted file mode 100644
index f5bc54e638..0000000000
--- a/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/model/keda/TriggerAuthenticationTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.keda;
-
-import org.optaplanner.operator.impl.solver.model.AbstractKubernetesCustomResourceTest;
-
-import io.fabric8.kubernetes.api.model.ObjectMeta;
-import io.quarkus.test.junit.QuarkusTest;
-
-@QuarkusTest
-public class TriggerAuthenticationTest extends AbstractKubernetesCustomResourceTest<TriggerAuthentication> {
-
- public TriggerAuthenticationTest() {
- super(TriggerAuthentication.class);
- }
-
- @Override
- protected TriggerAuthentication createCustomResource() {
- TriggerAuthenticationSpec triggerAuthenticationSpec = new TriggerAuthenticationSpec();
- triggerAuthenticationSpec
- .withSecretTargetRef(new SecretTargetRef("username", "activemq-secret", "activemq-username"))
- .withSecretTargetRef(new SecretTargetRef("password", "activemq-secret", "activemq-password"));
-
- TriggerAuthentication triggerAuthentication = new TriggerAuthentication();
- ObjectMeta triggerAuthenticationMetadata = new ObjectMeta();
- triggerAuthenticationMetadata.setName("test-trigger-auth");
- triggerAuthentication.setMetadata(triggerAuthenticationMetadata);
- triggerAuthentication.setSpec(triggerAuthenticationSpec);
-
- return triggerAuthentication;
- }
-}
diff --git a/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/model/messaging/ArtemisQueueTest.java b/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/model/messaging/ArtemisQueueTest.java
deleted file mode 100644
index 85f610a3d7..0000000000
--- a/optaplanner-operator/src/test/java/org/optaplanner/operator/impl/solver/model/messaging/ArtemisQueueTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.optaplanner.operator.impl.solver.model.messaging;
-
-import org.optaplanner.operator.impl.solver.model.AbstractKubernetesCustomResourceTest;
-
-import io.fabric8.kubernetes.api.model.ObjectMeta;
-import io.quarkus.test.junit.QuarkusTest;
-
-@QuarkusTest
-public class ArtemisQueueTest extends AbstractKubernetesCustomResourceTest<ArtemisQueue> {
-
- public ArtemisQueueTest() {
- super(ArtemisQueue.class);
- }
-
- @Override
- protected ArtemisQueue createCustomResource() {
- ArtemisQueueSpec artemisQueueSpec = new ArtemisQueueSpec();
- artemisQueueSpec.setQueueName("test-queue");
- artemisQueueSpec.setAddressName("test-queue-address");
-
- ObjectMeta metadata = new ObjectMeta();
- metadata.setName("test-artemis-queue");
-
- ArtemisQueue artemisQueue = new ArtemisQueue();
- artemisQueue.setMetadata(metadata);
- artemisQueue.setSpec(artemisQueueSpec);
-
- return artemisQueue;
- }
-}
diff --git a/pom.xml b/pom.xml
index 63aeb98626..abb4c78205 100644
--- a/pom.xml
+++ b/pom.xml
@@ -153,16 +153,5 @@
<module>build/optaplanner-distribution-internal</module>
</modules>
</profile>
- <profile>
- <id>default</id>
- <activation>
- <property>
- <name>!productized</name>
- </property>
- </activation>
- <modules>
- <module>optaplanner-operator</module>
- </modules>
- </profile>
</profiles>
</project>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@kie.apache.org
For additional commands, e-mail: commits-help@kie.apache.org