From 8178e2315e743151ada01e742f753d2bc2e65e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20S=C4=99k?= Date: Mon, 10 Jun 2019 17:55:09 +0200 Subject: [PATCH] Use v1alpha2 Jenkins schema --- Makefile | 6 +- config.env | 2 +- deploy/crds/jenkins_v1alpha2_jenkins_cr.yaml | 32 +++++ deploy/crds/jenkins_v1alpha2_jenkins_crd.yaml | 19 +++ docs/developer-guide.md | 6 +- docs/getting-started.md | 10 +- docs/installation.md | 6 +- .../jenkins/configuration/base/reconcile.go | 10 +- .../configuration/base/reconcile_test.go | 42 +++---- .../resources/base_configuration_configmap.go | 6 +- .../resources/init_configuration_configmap.go | 6 +- .../configuration/base/resources/meta.go | 10 +- .../resources/operator_credentials_secret.go | 6 +- .../configuration/base/resources/pod.go | 12 +- .../base/resources/scripts_configmap.go | 8 +- .../configuration/base/resources/service.go | 8 +- .../resources/user_configuration_configmap.go | 6 +- .../resources/user_configuration_secret.go | 6 +- .../jenkins/configuration/base/validate.go | 8 +- .../configuration/base/validate_test.go | 68 +++++----- .../jenkins/configuration/user/casc/caac.go | 4 +- .../jenkins/configuration/user/reconcile.go | 6 +- .../configuration/user/seedjobs/seedjobs.go | 16 +-- .../user/seedjobs/seedjobs_test.go | 24 ++-- .../configuration/user/seedjobs/validate.go | 20 +-- .../user/seedjobs/validate_test.go | 118 +++++++++--------- .../jenkins/configuration/user/validate.go | 4 +- pkg/controller/jenkins/groovy/groovy.go | 4 +- pkg/controller/jenkins/handler.go | 4 +- pkg/controller/jenkins/jenkins_controller.go | 20 +-- pkg/controller/jenkins/jobs/jobs.go | 44 +++---- pkg/controller/jenkins/jobs/jobs_test.go | 50 ++++---- test/e2e/configuration_test.go | 12 +- test/e2e/jenkins.go | 28 ++--- test/e2e/main_test.go | 8 +- test/e2e/restart_test.go | 6 +- test/e2e/seedjobs_test.go | 10 +- test/e2e/wait.go | 18 +-- 38 files changed, 362 insertions(+), 311 deletions(-) create mode 100644 deploy/crds/jenkins_v1alpha2_jenkins_cr.yaml create mode 100644 deploy/crds/jenkins_v1alpha2_jenkins_crd.yaml diff --git a/Makefile b/Makefile index 8244fd7b..a2142921 100644 --- a/Makefile +++ b/Makefile @@ -156,7 +156,7 @@ ifeq ($(ENVIRONMENT),minikube) endif @RUNNING_TESTS=1 go test -parallel=1 "./test/e2e/" -tags "$(BUILDTAGS) cgo" -v -timeout 30m -run "$(E2E_TEST_SELECTOR)" \ - -root=$(CURRENT_DIRECTORY) -kubeconfig=$(HOME)/.kube/config -globalMan deploy/crds/jenkins_v1alpha1_jenkins_crd.yaml -namespacedMan deploy/namespace-init.yaml $(EXTRA_ARGS) + -root=$(CURRENT_DIRECTORY) -kubeconfig=$(HOME)/.kube/config -globalMan deploy/crds/jenkins_v1alpha2_jenkins_crd.yaml -namespacedMan deploy/namespace-init.yaml $(EXTRA_ARGS) .PHONY: vet vet: ## Verifies `go vet` passes @@ -307,7 +307,7 @@ minikube-run: export OPERATOR_NAME = $(NAME) minikube-run: start-minikube ## Run the operator locally and use minikube as Kubernetes cluster, you can use EXTRA_ARGS @echo "+ $@" kubectl config use-context minikube - kubectl apply -f deploy/crds/jenkins_v1alpha1_jenkins_crd.yaml + kubectl apply -f deploy/crds/jenkins_v1alpha2_jenkins_crd.yaml @echo "Watching '$(WATCH_NAMESPACE)' namespace" build/_output/bin/jenkins-operator $(EXTRA_ARGS) @@ -348,7 +348,7 @@ help: @grep -Eh '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' .PHONY: status -status: ## Shows git and dep status +status: ## Shows git status @echo "+ $@" @echo "Commit: $(GITCOMMIT), VERSION: $(VERSION)" @echo diff --git a/config.env b/config.env index 5c17eed2..2e870ae2 100644 --- a/config.env +++ b/config.env @@ -4,7 +4,7 @@ PKG=github.com/jenkinsci/kubernetes-operator DOCKER_ORGANIZATION=virtuslab DOCKER_REGISTRY=jenkins-operator NAMESPACE=default -API_VERSION=jenkins:v1alpha1 +API_VERSION=jenkins:v1alpha2 MINIKUBE_KUBERNETES_VERSION=v1.12.9 MINIKUBE_DRIVER=virtualbox ENVIRONMENT=minikube \ No newline at end of file diff --git a/deploy/crds/jenkins_v1alpha2_jenkins_cr.yaml b/deploy/crds/jenkins_v1alpha2_jenkins_cr.yaml new file mode 100644 index 00000000..f75d7cea --- /dev/null +++ b/deploy/crds/jenkins_v1alpha2_jenkins_cr.yaml @@ -0,0 +1,32 @@ +apiVersion: jenkins.io/v1alpha2 +kind: Jenkins +metadata: + name: example +spec: + master: + readinessProbe: + httpGet: + path: /login + port: 8080 + scheme: HTTP + failureThreshold: 10 + initialDelaySeconds: 30 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + livenessProbe: + httpGet: + path: /login + port: 8080 + scheme: HTTP + initialDelaySeconds: 35 + failureThreshold: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + seedJobs: + - id: jenkins-operator + targets: "cicd/jobs/*.jenkins" + description: "Jenkins Operator repository" + repositoryBranch: master + repositoryUrl: https://github.com/jenkinsci/kubernetes-operator.git diff --git a/deploy/crds/jenkins_v1alpha2_jenkins_crd.yaml b/deploy/crds/jenkins_v1alpha2_jenkins_crd.yaml new file mode 100644 index 00000000..b254ecae --- /dev/null +++ b/deploy/crds/jenkins_v1alpha2_jenkins_crd.yaml @@ -0,0 +1,19 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: jenkins.jenkins.io +spec: + group: jenkins.io + names: + kind: Jenkins + listKind: JenkinsList + plural: jenkins + singular: jenkins + scope: Namespaced + versions: + - name : v1alpha2 + served: true + storage: true + - name : v1alpha1 + served: true + storage: false diff --git a/docs/developer-guide.md b/docs/developer-guide.md index 7bf2af25..44ce900d 100644 --- a/docs/developer-guide.md +++ b/docs/developer-guide.md @@ -17,7 +17,7 @@ mkdir -p $GOPATH/src/github.com/jenkinsci cd $GOPATH/src/github.com/jenkinsci/ git clone git@github.com:jenkinsci/kubernetes-operator.git cd kubernetes-operator -make dep +make go-dependencies ``` ## Build and run @@ -31,7 +31,7 @@ make build && make minikube-run EXTRA_ARGS='--minikube --local' Once minikube and **jenkins-operator** are up and running, apply Jenkins custom resource: ```bash -kubectl apply -f deploy/crds/jenkins_v1alpha1_jenkins_cr.yaml +kubectl apply -f deploy/crds/jenkins_v1alpha2_jenkins_cr.yaml kubectl get jenkins -o yaml kubectl get po ``` @@ -68,7 +68,7 @@ To be able to work with the docker daemon on `minikube` machine run the followin eval $(minikube docker-env) ``` -### When `pkg/apis/jenkinsio/v1alpha1/jenkins_types.go` has changed +### When `pkg/apis/jenkinsio/*/jenkins_types.go` has changed Run: diff --git a/docs/getting-started.md b/docs/getting-started.md index e5b45f59..dfc32f90 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -20,7 +20,7 @@ Once jenkins-operator is up and running let's deploy actual Jenkins instance. Create manifest ie. **jenkins_instance.yaml** with following data and save it on drive. ```bash -apiVersion: jenkins.io/v1alpha1 +apiVersion: jenkins.io/v1alpha2 kind: Jenkins metadata: name: example @@ -173,7 +173,7 @@ podTemplate(label: label, Jenkins Seed Jobs are configured using `Jenkins.spec.seedJobs` section from your custom resource manifest: ``` -apiVersion: jenkins.io/v1alpha1 +apiVersion: jenkins.io/v1alpha2 kind: Jenkins metadata: name: example @@ -205,7 +205,7 @@ If your GitHub repository is **private** you have to configure SSH or username/p Configure seed job like: ``` -apiVersion: jenkins.io/v1alpha1 +apiVersion: jenkins.io/v1alpha2 kind: Jenkins metadata: name: example @@ -243,7 +243,7 @@ data: Configure seed job like: ``` -apiVersion: jenkins.io/v1alpha1 +apiVersion: jenkins.io/v1alpha2 kind: Jenkins metadata: name: example @@ -350,7 +350,7 @@ runs the **jenkins-operator-user-configuration-casc** Jenkins Job which applies Edit CR under `spec.master.plugins`: ``` -apiVersion: jenkins.io/v1alpha1 +apiVersion: jenkins.io/v1alpha2 kind: Jenkins metadata: name: example diff --git a/docs/installation.md b/docs/installation.md index 7e58258e..95f398f4 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -6,15 +6,15 @@ All container images can be found at [virtuslab/jenkins-operator](https://hub.do ## Requirements To run **jenkins-operator**, you will need: -- running Kubernetes cluster -- kubectl +- running Kubernetes cluster version 1.11+ +- kubectl version 1.11+ ## Configure Custom Resource Definition Install Jenkins Custom Resource Definition: ```bash -kubectl apply -f https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/deploy/crds/jenkins_v1alpha1_jenkins_crd.yaml +kubectl apply -f https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/deploy/crds/jenkins_v1alpha2_jenkins_crd.yaml ``` ## Deploy jenkins-operator diff --git a/pkg/controller/jenkins/configuration/base/reconcile.go b/pkg/controller/jenkins/configuration/base/reconcile.go index 57779d64..16a5bf5e 100644 --- a/pkg/controller/jenkins/configuration/base/reconcile.go +++ b/pkg/controller/jenkins/configuration/base/reconcile.go @@ -7,7 +7,7 @@ import ( "strings" "time" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" @@ -38,13 +38,13 @@ type ReconcileJenkinsBaseConfiguration struct { k8sClient client.Client scheme *runtime.Scheme logger logr.Logger - jenkins *v1alpha1.Jenkins + jenkins *v1alpha2.Jenkins local, minikube bool } // New create structure which takes care of base configuration func New(client client.Client, scheme *runtime.Scheme, logger logr.Logger, - jenkins *v1alpha1.Jenkins, local, minikube bool) *ReconcileJenkinsBaseConfiguration { + jenkins *v1alpha2.Jenkins, local, minikube bool) *ReconcileJenkinsBaseConfiguration { return &ReconcileJenkinsBaseConfiguration{ k8sClient: client, scheme: scheme, @@ -364,7 +364,7 @@ func (r *ReconcileJenkinsBaseConfiguration) createRBAC(meta metav1.ObjectMeta) e return nil } -func (r *ReconcileJenkinsBaseConfiguration) createService(meta metav1.ObjectMeta, name string, config v1alpha1.Service) error { +func (r *ReconcileJenkinsBaseConfiguration) createService(meta metav1.ObjectMeta, name string, config v1alpha2.Service) error { service := corev1.Service{} err := r.k8sClient.Get(context.TODO(), types.NamespacedName{Name: name, Namespace: meta.Namespace}, &service) if err != nil && errors.IsNotFound(err) { @@ -410,7 +410,7 @@ func (r *ReconcileJenkinsBaseConfiguration) ensureJenkinsMasterPod(meta metav1.O return reconcile.Result{}, stackerr.WithStack(err) } now := metav1.Now() - r.jenkins.Status = v1alpha1.JenkinsStatus{ + r.jenkins.Status = v1alpha2.JenkinsStatus{ ProvisionStartTime: &now, } err = r.updateResource(r.jenkins) diff --git a/pkg/controller/jenkins/configuration/base/reconcile_test.go b/pkg/controller/jenkins/configuration/base/reconcile_test.go index 15cdeb57..2d9853db 100644 --- a/pkg/controller/jenkins/configuration/base/reconcile_test.go +++ b/pkg/controller/jenkins/configuration/base/reconcile_test.go @@ -3,7 +3,7 @@ package base import ( "testing" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins" @@ -92,7 +92,7 @@ func TestCompareContainerVolumeMounts(t *testing.T) { func TestCompareVolumes(t *testing.T) { t.Run("defaults", func(t *testing.T) { - jenkins := &v1alpha1.Jenkins{} + jenkins := &v1alpha2.Jenkins{} pod := corev1.Pod{ Spec: corev1.PodSpec{ ServiceAccountName: "service-account-name", @@ -106,9 +106,9 @@ func TestCompareVolumes(t *testing.T) { assert.True(t, got) }) t.Run("different", func(t *testing.T) { - jenkins := &v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ + jenkins := &v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ Volumes: []corev1.Volume{ { Name: "added", @@ -130,9 +130,9 @@ func TestCompareVolumes(t *testing.T) { assert.False(t, got) }) t.Run("added one volume", func(t *testing.T) { - jenkins := &v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ + jenkins := &v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ Volumes: []corev1.Volume{ { Name: "added", @@ -159,7 +159,7 @@ func TestReconcileJenkinsBaseConfiguration_verifyPlugins(t *testing.T) { log.SetupLogger(true) t.Run("happy, empty base and user plugins", func(t *testing.T) { - jenkins := &v1alpha1.Jenkins{} + jenkins := &v1alpha2.Jenkins{} r := ReconcileJenkinsBaseConfiguration{ logger: log.Log, jenkins: jenkins, @@ -179,7 +179,7 @@ func TestReconcileJenkinsBaseConfiguration_verifyPlugins(t *testing.T) { assert.True(t, got) }) t.Run("happy, not empty base and empty user plugins", func(t *testing.T) { - jenkins := &v1alpha1.Jenkins{} + jenkins := &v1alpha2.Jenkins{} r := ReconcileJenkinsBaseConfiguration{ logger: log.Log, jenkins: jenkins, @@ -211,9 +211,9 @@ func TestReconcileJenkinsBaseConfiguration_verifyPlugins(t *testing.T) { assert.True(t, got) }) t.Run("happy, empty base and not empty user plugins", func(t *testing.T) { - jenkins := &v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ + jenkins := &v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ Plugins: map[string][]string{"plugin-name:0.0.1": {}}, }, }, @@ -247,7 +247,7 @@ func TestReconcileJenkinsBaseConfiguration_verifyPlugins(t *testing.T) { assert.True(t, got) }) t.Run("happy, plugin version doesn't matter for base plugins", func(t *testing.T) { - jenkins := &v1alpha1.Jenkins{} + jenkins := &v1alpha2.Jenkins{} r := ReconcileJenkinsBaseConfiguration{ logger: log.Log, jenkins: jenkins, @@ -279,9 +279,9 @@ func TestReconcileJenkinsBaseConfiguration_verifyPlugins(t *testing.T) { assert.True(t, got) }) t.Run("plugin version matter for user plugins", func(t *testing.T) { - jenkins := &v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ + jenkins := &v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ Plugins: map[string][]string{"plugin-name:0.0.2": {}}, }, }, @@ -315,7 +315,7 @@ func TestReconcileJenkinsBaseConfiguration_verifyPlugins(t *testing.T) { assert.False(t, got) }) t.Run("missing base plugin", func(t *testing.T) { - jenkins := &v1alpha1.Jenkins{} + jenkins := &v1alpha2.Jenkins{} r := ReconcileJenkinsBaseConfiguration{ logger: log.Log, jenkins: jenkins, @@ -339,9 +339,9 @@ func TestReconcileJenkinsBaseConfiguration_verifyPlugins(t *testing.T) { assert.False(t, got) }) t.Run("missing user plugin", func(t *testing.T) { - jenkins := &v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ + jenkins := &v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ Plugins: map[string][]string{"plugin-name:0.0.2": {}}, }, }, diff --git a/pkg/controller/jenkins/configuration/base/resources/base_configuration_configmap.go b/pkg/controller/jenkins/configuration/base/resources/base_configuration_configmap.go index c3296a77..0aa655df 100644 --- a/pkg/controller/jenkins/configuration/base/resources/base_configuration_configmap.go +++ b/pkg/controller/jenkins/configuration/base/resources/base_configuration_configmap.go @@ -3,7 +3,7 @@ package resources import ( "fmt" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" corev1 "k8s.io/api/core/v1" @@ -168,12 +168,12 @@ GlobalConfiguration.all().get(GlobalJobDslSecurityConfiguration.class).save() ` // GetBaseConfigurationConfigMapName returns name of Kubernetes config map used to base configuration -func GetBaseConfigurationConfigMapName(jenkins *v1alpha1.Jenkins) string { +func GetBaseConfigurationConfigMapName(jenkins *v1alpha2.Jenkins) string { return fmt.Sprintf("%s-base-configuration-%s", constants.OperatorName, jenkins.ObjectMeta.Name) } // NewBaseConfigurationConfigMap builds Kubernetes config map used to base configuration -func NewBaseConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha1.Jenkins) *corev1.ConfigMap { +func NewBaseConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins) *corev1.ConfigMap { meta.Name = GetBaseConfigurationConfigMapName(jenkins) return &corev1.ConfigMap{ diff --git a/pkg/controller/jenkins/configuration/base/resources/init_configuration_configmap.go b/pkg/controller/jenkins/configuration/base/resources/init_configuration_configmap.go index 2f011bed..05cd3d2e 100644 --- a/pkg/controller/jenkins/configuration/base/resources/init_configuration_configmap.go +++ b/pkg/controller/jenkins/configuration/base/resources/init_configuration_configmap.go @@ -5,7 +5,7 @@ import ( "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" "text/template" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -57,12 +57,12 @@ func buildCreateJenkinsOperatorUserGroovyScript() (*string, error) { } // GetInitConfigurationConfigMapName returns name of Kubernetes config map used to init configuration -func GetInitConfigurationConfigMapName(jenkins *v1alpha1.Jenkins) string { +func GetInitConfigurationConfigMapName(jenkins *v1alpha2.Jenkins) string { return fmt.Sprintf("%s-init-configuration-%s", constants.OperatorName, jenkins.ObjectMeta.Name) } // NewInitConfigurationConfigMap builds Kubernetes config map used to init configuration -func NewInitConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha1.Jenkins) (*corev1.ConfigMap, error) { +func NewInitConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins) (*corev1.ConfigMap, error) { meta.Name = GetInitConfigurationConfigMapName(jenkins) createJenkinsOperatorUserGroovy, err := buildCreateJenkinsOperatorUserGroovyScript() diff --git a/pkg/controller/jenkins/configuration/base/resources/meta.go b/pkg/controller/jenkins/configuration/base/resources/meta.go index db2cb219..94ed39c6 100644 --- a/pkg/controller/jenkins/configuration/base/resources/meta.go +++ b/pkg/controller/jenkins/configuration/base/resources/meta.go @@ -3,14 +3,14 @@ package resources import ( "fmt" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // NewResourceObjectMeta builds ObjectMeta for all Kubernetes resources created by operator -func NewResourceObjectMeta(jenkins *v1alpha1.Jenkins) metav1.ObjectMeta { +func NewResourceObjectMeta(jenkins *v1alpha2.Jenkins) metav1.ObjectMeta { return metav1.ObjectMeta{ Name: GetResourceName(jenkins), Namespace: jenkins.ObjectMeta.Namespace, @@ -19,7 +19,7 @@ func NewResourceObjectMeta(jenkins *v1alpha1.Jenkins) metav1.ObjectMeta { } // BuildResourceLabels returns labels for all Kubernetes resources created by operator -func BuildResourceLabels(jenkins *v1alpha1.Jenkins) map[string]string { +func BuildResourceLabels(jenkins *v1alpha2.Jenkins) map[string]string { return map[string]string{ constants.LabelAppKey: constants.LabelAppValue, constants.LabelJenkinsCRKey: jenkins.Name, @@ -29,7 +29,7 @@ func BuildResourceLabels(jenkins *v1alpha1.Jenkins) map[string]string { // BuildLabelsForWatchedResources returns labels for Kubernetes resources which operator want to watch // resources with that labels should not be deleted after Jenkins CR deletion, to prevent this situation don't set // any owner -func BuildLabelsForWatchedResources(jenkins v1alpha1.Jenkins) map[string]string { +func BuildLabelsForWatchedResources(jenkins v1alpha2.Jenkins) map[string]string { return map[string]string{ constants.LabelAppKey: constants.LabelAppValue, constants.LabelJenkinsCRKey: jenkins.Name, @@ -38,7 +38,7 @@ func BuildLabelsForWatchedResources(jenkins v1alpha1.Jenkins) map[string]string } // GetResourceName returns name of Kubernetes resource base on Jenkins CR -func GetResourceName(jenkins *v1alpha1.Jenkins) string { +func GetResourceName(jenkins *v1alpha2.Jenkins) string { return fmt.Sprintf("%s-%s", constants.LabelAppValue, jenkins.ObjectMeta.Name) } diff --git a/pkg/controller/jenkins/configuration/base/resources/operator_credentials_secret.go b/pkg/controller/jenkins/configuration/base/resources/operator_credentials_secret.go index 1ad14a9b..179d421c 100644 --- a/pkg/controller/jenkins/configuration/base/resources/operator_credentials_secret.go +++ b/pkg/controller/jenkins/configuration/base/resources/operator_credentials_secret.go @@ -3,7 +3,7 @@ package resources import ( "fmt" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" corev1 "k8s.io/api/core/v1" @@ -32,13 +32,13 @@ func buildSecretTypeMeta() metav1.TypeMeta { // GetOperatorCredentialsSecretName returns name of Kubernetes secret used to store jenkins operator credentials // to allow calls to Jenkins API -func GetOperatorCredentialsSecretName(jenkins *v1alpha1.Jenkins) string { +func GetOperatorCredentialsSecretName(jenkins *v1alpha2.Jenkins) string { return fmt.Sprintf("%s-credentials-%s", constants.OperatorName, jenkins.Name) } // NewOperatorCredentialsSecret builds the Kubernetes secret used to store jenkins operator credentials // to allow calls to Jenkins API -func NewOperatorCredentialsSecret(meta metav1.ObjectMeta, jenkins *v1alpha1.Jenkins) *corev1.Secret { +func NewOperatorCredentialsSecret(meta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins) *corev1.Secret { meta.Name = GetOperatorCredentialsSecretName(jenkins) return &corev1.Secret{ TypeMeta: buildSecretTypeMeta(), diff --git a/pkg/controller/jenkins/configuration/base/resources/pod.go b/pkg/controller/jenkins/configuration/base/resources/pod.go index 93481427..6f728e31 100644 --- a/pkg/controller/jenkins/configuration/base/resources/pod.go +++ b/pkg/controller/jenkins/configuration/base/resources/pod.go @@ -3,7 +3,7 @@ package resources import ( "fmt" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" corev1 "k8s.io/api/core/v1" @@ -76,7 +76,7 @@ func GetJenkinsMasterPodBaseEnvs() []corev1.EnvVar { } // GetJenkinsMasterPodBaseVolumes returns Jenkins master pod volumes required by operator -func GetJenkinsMasterPodBaseVolumes(jenkins *v1alpha1.Jenkins) []corev1.Volume { +func GetJenkinsMasterPodBaseVolumes(jenkins *v1alpha2.Jenkins) []corev1.Volume { configMapVolumeSourceDefaultMode := corev1.ConfigMapVolumeSourceDefaultMode secretVolumeSourceDefaultMode := corev1.SecretVolumeSourceDefaultMode return []corev1.Volume{ @@ -193,7 +193,7 @@ func GetJenkinsMasterContainerBaseVolumeMounts() []corev1.VolumeMount { } // NewJenkinsMasterContainer returns Jenkins master Kubernetes container -func NewJenkinsMasterContainer(jenkins *v1alpha1.Jenkins) corev1.Container { +func NewJenkinsMasterContainer(jenkins *v1alpha2.Jenkins) corev1.Container { envs := GetJenkinsMasterPodBaseEnvs() envs = append(envs, jenkins.Spec.Master.Env...) @@ -226,7 +226,7 @@ func NewJenkinsMasterContainer(jenkins *v1alpha1.Jenkins) corev1.Container { } // ConvertJenkinsContainerToKubernetesContainer converts Jenkins container to Kubernetes container -func ConvertJenkinsContainerToKubernetesContainer(container v1alpha1.Container) corev1.Container { +func ConvertJenkinsContainerToKubernetesContainer(container v1alpha2.Container) corev1.Container { return corev1.Container{ Name: container.Name, Image: container.Image, @@ -246,7 +246,7 @@ func ConvertJenkinsContainerToKubernetesContainer(container v1alpha1.Container) } } -func newContainers(jenkins *v1alpha1.Jenkins) (containers []corev1.Container) { +func newContainers(jenkins *v1alpha2.Jenkins) (containers []corev1.Container) { containers = append(containers, NewJenkinsMasterContainer(jenkins)) for _, container := range jenkins.Spec.Master.Containers { @@ -257,7 +257,7 @@ func newContainers(jenkins *v1alpha1.Jenkins) (containers []corev1.Container) { } // NewJenkinsMasterPod builds Jenkins Master Kubernetes Pod resource -func NewJenkinsMasterPod(objectMeta metav1.ObjectMeta, jenkins *v1alpha1.Jenkins) *corev1.Pod { +func NewJenkinsMasterPod(objectMeta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins) *corev1.Pod { runAsUser := jenkinsUserUID objectMeta.Annotations = jenkins.Spec.Master.Annotations diff --git a/pkg/controller/jenkins/configuration/base/resources/scripts_configmap.go b/pkg/controller/jenkins/configuration/base/resources/scripts_configmap.go index efa58708..85ffbeaf 100644 --- a/pkg/controller/jenkins/configuration/base/resources/scripts_configmap.go +++ b/pkg/controller/jenkins/configuration/base/resources/scripts_configmap.go @@ -4,7 +4,7 @@ import ( "fmt" "text/template" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" corev1 "k8s.io/api/core/v1" @@ -278,7 +278,7 @@ func buildConfigMapTypeMeta() metav1.TypeMeta { } } -func buildInitBashScript(jenkins *v1alpha1.Jenkins) (*string, error) { +func buildInitBashScript(jenkins *v1alpha2.Jenkins) (*string, error) { data := struct { JenkinsHomePath string InitConfigurationPath string @@ -303,12 +303,12 @@ func buildInitBashScript(jenkins *v1alpha1.Jenkins) (*string, error) { return &output, nil } -func getScriptsConfigMapName(jenkins *v1alpha1.Jenkins) string { +func getScriptsConfigMapName(jenkins *v1alpha2.Jenkins) string { return fmt.Sprintf("%s-scripts-%s", constants.OperatorName, jenkins.ObjectMeta.Name) } // NewScriptsConfigMap builds Kubernetes config map used to store scripts -func NewScriptsConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha1.Jenkins) (*corev1.ConfigMap, error) { +func NewScriptsConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins) (*corev1.ConfigMap, error) { meta.Name = getScriptsConfigMapName(jenkins) initBashScript, err := buildInitBashScript(jenkins) diff --git a/pkg/controller/jenkins/configuration/base/resources/service.go b/pkg/controller/jenkins/configuration/base/resources/service.go index 96a4fffd..db3b1bba 100644 --- a/pkg/controller/jenkins/configuration/base/resources/service.go +++ b/pkg/controller/jenkins/configuration/base/resources/service.go @@ -3,7 +3,7 @@ package resources import ( "fmt" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" corev1 "k8s.io/api/core/v1" @@ -18,7 +18,7 @@ func buildServiceTypeMeta() metav1.TypeMeta { } // UpdateService returns new service with override fields from config -func UpdateService(actual corev1.Service, config v1alpha1.Service) corev1.Service { +func UpdateService(actual corev1.Service, config v1alpha2.Service) corev1.Service { actual.ObjectMeta.Annotations = config.Annotations for key, value := range config.Labels { actual.ObjectMeta.Labels[key] = value @@ -38,11 +38,11 @@ func UpdateService(actual corev1.Service, config v1alpha1.Service) corev1.Servic } // GetJenkinsHTTPServiceName returns Kubernetes service name used for expose Jenkins HTTP endpoint -func GetJenkinsHTTPServiceName(jenkins *v1alpha1.Jenkins) string { +func GetJenkinsHTTPServiceName(jenkins *v1alpha2.Jenkins) string { return fmt.Sprintf("%s-http-%s", constants.OperatorName, jenkins.ObjectMeta.Name) } // GetJenkinsSlavesServiceName returns Kubernetes service name used for expose Jenkins slave endpoint -func GetJenkinsSlavesServiceName(jenkins *v1alpha1.Jenkins) string { +func GetJenkinsSlavesServiceName(jenkins *v1alpha2.Jenkins) string { return fmt.Sprintf("%s-slave-%s", constants.OperatorName, jenkins.ObjectMeta.Name) } diff --git a/pkg/controller/jenkins/configuration/base/resources/user_configuration_configmap.go b/pkg/controller/jenkins/configuration/base/resources/user_configuration_configmap.go index d014a11c..85ad304a 100644 --- a/pkg/controller/jenkins/configuration/base/resources/user_configuration_configmap.go +++ b/pkg/controller/jenkins/configuration/base/resources/user_configuration_configmap.go @@ -3,7 +3,7 @@ package resources import ( "fmt" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" corev1 "k8s.io/api/core/v1" @@ -33,7 +33,7 @@ jenkins.save() ` // GetUserConfigurationConfigMapNameFromJenkins returns name of Kubernetes config map used to user configuration -func GetUserConfigurationConfigMapNameFromJenkins(jenkins *v1alpha1.Jenkins) string { +func GetUserConfigurationConfigMapNameFromJenkins(jenkins *v1alpha2.Jenkins) string { return fmt.Sprintf("%s-user-configuration-%s", constants.OperatorName, jenkins.ObjectMeta.Name) } @@ -43,7 +43,7 @@ func GetUserConfigurationConfigMapName(jenkinsCRName string) string { } // NewUserConfigurationConfigMap builds Kubernetes config map used to user configuration -func NewUserConfigurationConfigMap(jenkins *v1alpha1.Jenkins) *corev1.ConfigMap { +func NewUserConfigurationConfigMap(jenkins *v1alpha2.Jenkins) *corev1.ConfigMap { return &corev1.ConfigMap{ TypeMeta: buildConfigMapTypeMeta(), ObjectMeta: metav1.ObjectMeta{ diff --git a/pkg/controller/jenkins/configuration/base/resources/user_configuration_secret.go b/pkg/controller/jenkins/configuration/base/resources/user_configuration_secret.go index b2eeb588..073c0efd 100644 --- a/pkg/controller/jenkins/configuration/base/resources/user_configuration_secret.go +++ b/pkg/controller/jenkins/configuration/base/resources/user_configuration_secret.go @@ -3,7 +3,7 @@ package resources import ( "fmt" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" corev1 "k8s.io/api/core/v1" @@ -11,7 +11,7 @@ import ( ) // GetUserConfigurationSecretNameFromJenkins returns name of Kubernetes secret used to store jenkins operator credentials -func GetUserConfigurationSecretNameFromJenkins(jenkins *v1alpha1.Jenkins) string { +func GetUserConfigurationSecretNameFromJenkins(jenkins *v1alpha2.Jenkins) string { return fmt.Sprintf("%s-user-configuration-%s", constants.OperatorName, jenkins.Name) } @@ -21,7 +21,7 @@ func GetUserConfigurationSecretName(jenkinsCRName string) string { } // NewUserConfigurationSecret builds the Kubernetes secret resource which is used to store user sensitive data for Jenkins configuration -func NewUserConfigurationSecret(jenkins *v1alpha1.Jenkins) *corev1.Secret { +func NewUserConfigurationSecret(jenkins *v1alpha2.Jenkins) *corev1.Secret { return &corev1.Secret{ TypeMeta: buildServiceTypeMeta(), ObjectMeta: metav1.ObjectMeta{ diff --git a/pkg/controller/jenkins/configuration/base/validate.go b/pkg/controller/jenkins/configuration/base/validate.go index 2208253f..d8d5c688 100644 --- a/pkg/controller/jenkins/configuration/base/validate.go +++ b/pkg/controller/jenkins/configuration/base/validate.go @@ -5,7 +5,7 @@ import ( "fmt" "regexp" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins" "github.com/jenkinsci/kubernetes-operator/pkg/log" @@ -22,7 +22,7 @@ var ( ) // Validate validates Jenkins CR Spec.master section -func (r *ReconcileJenkinsBaseConfiguration) Validate(jenkins *v1alpha1.Jenkins) (bool, error) { +func (r *ReconcileJenkinsBaseConfiguration) Validate(jenkins *v1alpha2.Jenkins) (bool, error) { if !r.validateReservedVolumes() { return false, nil } @@ -146,7 +146,7 @@ func (r *ReconcileJenkinsBaseConfiguration) validateReservedVolumes() bool { return valid } -func (r *ReconcileJenkinsBaseConfiguration) validateContainer(container v1alpha1.Container) bool { +func (r *ReconcileJenkinsBaseConfiguration) validateContainer(container v1alpha2.Container) bool { logger := r.logger.WithValues("container", container.Name) if container.Image == "" { logger.V(log.VWarn).Info("Image not set") @@ -170,7 +170,7 @@ func (r *ReconcileJenkinsBaseConfiguration) validateContainer(container v1alpha1 return true } -func (r *ReconcileJenkinsBaseConfiguration) validateContainerVolumeMounts(container v1alpha1.Container) bool { +func (r *ReconcileJenkinsBaseConfiguration) validateContainerVolumeMounts(container v1alpha2.Container) bool { logger := r.logger.WithValues("container", container.Name) allVolumes := append(resources.GetJenkinsMasterPodBaseVolumes(r.jenkins), r.jenkins.Spec.Master.Volumes...) valid := true diff --git a/pkg/controller/jenkins/configuration/base/validate_test.go b/pkg/controller/jenkins/configuration/base/validate_test.go index 2681cfaf..2c6b70f2 100644 --- a/pkg/controller/jenkins/configuration/base/validate_test.go +++ b/pkg/controller/jenkins/configuration/base/validate_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" "github.com/stretchr/testify/assert" @@ -76,10 +76,10 @@ func TestValidatePlugins(t *testing.T) { func TestValidateJenkinsMasterPodEnvs(t *testing.T) { t.Run("happy", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ - Container: v1alpha1.Container{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ + Container: v1alpha2.Container{ Env: []v1.EnvVar{ { Name: "SOME_VALUE", @@ -96,10 +96,10 @@ func TestValidateJenkinsMasterPodEnvs(t *testing.T) { assert.Equal(t, true, got) }) t.Run("override JENKINS_HOME env", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ - Container: v1alpha1.Container{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ + Container: v1alpha2.Container{ Env: []v1.EnvVar{ { Name: "JENKINS_HOME", @@ -119,9 +119,9 @@ func TestValidateJenkinsMasterPodEnvs(t *testing.T) { func TestValidateReservedVolumes(t *testing.T) { t.Run("happy", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ Volumes: []v1.Volume{ { Name: "not-used-name", @@ -136,9 +136,9 @@ func TestValidateReservedVolumes(t *testing.T) { assert.Equal(t, true, got) }) t.Run("used reserved name", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ Volumes: []v1.Volume{ { Name: resources.JenkinsHomeVolumeName, @@ -156,9 +156,9 @@ func TestValidateReservedVolumes(t *testing.T) { func TestValidateContainerVolumeMounts(t *testing.T) { t.Run("default Jenkins master container", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{}, + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{}, }, } baseReconcileLoop := New(nil, nil, logf.ZapLogger(false), @@ -167,15 +167,15 @@ func TestValidateContainerVolumeMounts(t *testing.T) { assert.Equal(t, true, got) }) t.Run("one extra volume", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ Volumes: []v1.Volume{ { Name: "example", }, }, - Container: v1alpha1.Container{ + Container: v1alpha2.Container{ VolumeMounts: []v1.VolumeMount{ { Name: "example", @@ -192,15 +192,15 @@ func TestValidateContainerVolumeMounts(t *testing.T) { assert.Equal(t, true, got) }) t.Run("empty mountPath", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ Volumes: []v1.Volume{ { Name: "example", }, }, - Container: v1alpha1.Container{ + Container: v1alpha2.Container{ VolumeMounts: []v1.VolumeMount{ { Name: "example", @@ -217,10 +217,10 @@ func TestValidateContainerVolumeMounts(t *testing.T) { assert.Equal(t, false, got) }) t.Run("missing volume", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ - Container: v1alpha1.Container{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ + Container: v1alpha2.Container{ VolumeMounts: []v1.VolumeMount{ { Name: "missing-volume", @@ -262,7 +262,7 @@ func TestValidateConfigMapVolume(t *testing.T) { t.Run("happy, required", func(t *testing.T) { optional := false configMap := corev1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Namespace: namespace, Name: "configmap-name"}} - jenkins := &v1alpha1.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: namespace}} + jenkins := &v1alpha2.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: namespace}} volume := corev1.Volume{ Name: "volume-name", VolumeSource: corev1.VolumeSource{ @@ -288,7 +288,7 @@ func TestValidateConfigMapVolume(t *testing.T) { t.Run("missing configmap", func(t *testing.T) { optional := false configMap := corev1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Namespace: namespace, Name: "configmap-name"}} - jenkins := &v1alpha1.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: namespace}} + jenkins := &v1alpha2.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: namespace}} volume := corev1.Volume{ Name: "volume-name", VolumeSource: corev1.VolumeSource{ @@ -335,7 +335,7 @@ func TestValidateSecretVolume(t *testing.T) { t.Run("happy, required", func(t *testing.T) { optional := false secret := corev1.Secret{ObjectMeta: metav1.ObjectMeta{Namespace: namespace, Name: "secret-name"}} - jenkins := &v1alpha1.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: namespace}} + jenkins := &v1alpha2.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: namespace}} volume := corev1.Volume{ Name: "volume-name", VolumeSource: corev1.VolumeSource{ @@ -359,7 +359,7 @@ func TestValidateSecretVolume(t *testing.T) { t.Run("missing secret", func(t *testing.T) { optional := false secret := corev1.Secret{ObjectMeta: metav1.ObjectMeta{Namespace: namespace, Name: "secret-name"}} - jenkins := &v1alpha1.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: namespace}} + jenkins := &v1alpha2.Jenkins{ObjectMeta: metav1.ObjectMeta{Namespace: namespace}} volume := corev1.Volume{ Name: "volume-name", VolumeSource: corev1.VolumeSource{ diff --git a/pkg/controller/jenkins/configuration/user/casc/caac.go b/pkg/controller/jenkins/configuration/user/casc/caac.go index cde9d810..dd583164 100644 --- a/pkg/controller/jenkins/configuration/user/casc/caac.go +++ b/pkg/controller/jenkins/configuration/user/casc/caac.go @@ -8,7 +8,7 @@ import ( "sort" "strings" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/jobs" @@ -56,7 +56,7 @@ func (g *ConfigurationAsCode) ConfigureJob() error { } // Ensure configures Jenkins with help Configuration as a code plugin -func (g *ConfigurationAsCode) Ensure(jenkins *v1alpha1.Jenkins) (bool, error) { +func (g *ConfigurationAsCode) Ensure(jenkins *v1alpha2.Jenkins) (bool, error) { jobsClient := jobs.New(g.jenkinsClient, g.k8sClient, g.logger) configuration := &corev1.ConfigMap{} diff --git a/pkg/controller/jenkins/configuration/user/reconcile.go b/pkg/controller/jenkins/configuration/user/reconcile.go index 55b82259..268965f5 100644 --- a/pkg/controller/jenkins/configuration/user/reconcile.go +++ b/pkg/controller/jenkins/configuration/user/reconcile.go @@ -4,7 +4,7 @@ import ( "context" "time" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/user/casc" @@ -26,12 +26,12 @@ type ReconcileUserConfiguration struct { k8sClient k8s.Client jenkinsClient jenkinsclient.Jenkins logger logr.Logger - jenkins *v1alpha1.Jenkins + jenkins *v1alpha2.Jenkins } // New create structure which takes care of user configuration func New(k8sClient k8s.Client, jenkinsClient jenkinsclient.Jenkins, logger logr.Logger, - jenkins *v1alpha1.Jenkins) *ReconcileUserConfiguration { + jenkins *v1alpha2.Jenkins) *ReconcileUserConfiguration { return &ReconcileUserConfiguration{ k8sClient: k8sClient, jenkinsClient: jenkinsClient, diff --git a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs.go b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs.go index 53c98b28..f7f025e4 100644 --- a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs.go +++ b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs.go @@ -6,7 +6,7 @@ import ( "encoding/base64" "fmt" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" @@ -60,7 +60,7 @@ func New(jenkinsClient jenkinsclient.Jenkins, k8sClient k8s.Client, logger logr. } // EnsureSeedJobs configures seed job and runs it for every entry from Jenkins.Spec.SeedJobs -func (s *SeedJobs) EnsureSeedJobs(jenkins *v1alpha1.Jenkins) (done bool, err error) { +func (s *SeedJobs) EnsureSeedJobs(jenkins *v1alpha2.Jenkins) (done bool, err error) { if err = s.createJob(); err != nil { s.logger.V(log.VWarn).Info("Couldn't create jenkins seed job") return false, err @@ -93,9 +93,9 @@ func (s *SeedJobs) createJob() error { // ensureLabelsForSecrets adds labels to Kubernetes secrets where are Jenkins credentials used for seed jobs, // thanks to them kubernetes-credentials-provider-plugin will create Jenkins credentials in Jenkins and // Operator will able to watch any changes made to them -func (s *SeedJobs) ensureLabelsForSecrets(jenkins v1alpha1.Jenkins) error { +func (s *SeedJobs) ensureLabelsForSecrets(jenkins v1alpha2.Jenkins) error { for _, seedJob := range jenkins.Spec.SeedJobs { - if seedJob.JenkinsCredentialType == v1alpha1.BasicSSHCredentialType || seedJob.JenkinsCredentialType == v1alpha1.UsernamePasswordCredentialType { + if seedJob.JenkinsCredentialType == v1alpha2.BasicSSHCredentialType || seedJob.JenkinsCredentialType == v1alpha2.UsernamePasswordCredentialType { requiredLabels := resources.BuildLabelsForWatchedResources(jenkins) requiredLabels[JenkinsCredentialTypeLabelName] = string(seedJob.JenkinsCredentialType) @@ -120,7 +120,7 @@ func (s *SeedJobs) ensureLabelsForSecrets(jenkins v1alpha1.Jenkins) error { } // buildJobs is responsible for running jenkins builds which configures jenkins seed jobs and deploy keys -func (s *SeedJobs) buildJobs(jenkins *v1alpha1.Jenkins) (done bool, err error) { +func (s *SeedJobs) buildJobs(jenkins *v1alpha2.Jenkins) (done bool, err error) { allDone := true for _, seedJob := range jenkins.Spec.SeedJobs { credentialValue, err := s.credentialValue(jenkins.Namespace, seedJob) @@ -158,8 +158,8 @@ func (s *SeedJobs) buildJobs(jenkins *v1alpha1.Jenkins) (done bool, err error) { return allDone, nil } -func (s *SeedJobs) credentialValue(namespace string, seedJob v1alpha1.SeedJob) (string, error) { - if seedJob.JenkinsCredentialType == v1alpha1.BasicSSHCredentialType || seedJob.JenkinsCredentialType == v1alpha1.UsernamePasswordCredentialType { +func (s *SeedJobs) credentialValue(namespace string, seedJob v1alpha2.SeedJob) (string, error) { + if seedJob.JenkinsCredentialType == v1alpha2.BasicSSHCredentialType || seedJob.JenkinsCredentialType == v1alpha2.UsernamePasswordCredentialType { secret := &corev1.Secret{} namespaceName := types.NamespacedName{Namespace: namespace, Name: seedJob.CredentialID} err := s.k8sClient.Get(context.TODO(), namespaceName, secret) @@ -167,7 +167,7 @@ func (s *SeedJobs) credentialValue(namespace string, seedJob v1alpha1.SeedJob) ( return "", err } - if seedJob.JenkinsCredentialType == v1alpha1.BasicSSHCredentialType { + if seedJob.JenkinsCredentialType == v1alpha2.BasicSSHCredentialType { return string(secret.Data[PrivateKeySecretKey]), nil } return string(secret.Data[UsernameSecretKey]) + string(secret.Data[PasswordSecretKey]), nil diff --git a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go index 8e084d27..c266fea2 100644 --- a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go +++ b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go @@ -5,7 +5,7 @@ import ( "fmt" "testing" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/bndr/gojenkins" @@ -29,7 +29,7 @@ func TestEnsureSeedJobs(t *testing.T) { jenkinsClient := client.NewMockJenkins(ctrl) fakeClient := fake.NewFakeClient() - err := v1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme) + err := v1alpha2.SchemeBuilder.AddToScheme(scheme.Scheme) assert.NoError(t, err) jenkins := jenkinsCustomResource() @@ -76,7 +76,7 @@ func TestEnsureSeedJobs(t *testing.T) { GetBuild(ConfigureSeedJobsName, gomock.Any()). Return(&gojenkins.Build{ Raw: &gojenkins.BuildResponse{ - Result: string(v1alpha1.BuildSuccessStatus), + Result: string(v1alpha2.BuildSuccessStatus), }, }, nil) } @@ -99,28 +99,28 @@ func TestEnsureSeedJobs(t *testing.T) { // first run - should create job and schedule build if reconcileAttempt == 1 { assert.False(t, done) - assert.Equal(t, string(v1alpha1.BuildRunningStatus), string(build.Status)) + assert.Equal(t, string(v1alpha2.BuildRunningStatus), string(build.Status)) } // second run - should update and finish job if reconcileAttempt == 2 { assert.True(t, done) - assert.Equal(t, string(v1alpha1.BuildSuccessStatus), string(build.Status)) + assert.Equal(t, string(v1alpha2.BuildSuccessStatus), string(build.Status)) } } } -func jenkinsCustomResource() *v1alpha1.Jenkins { - return &v1alpha1.Jenkins{ +func jenkinsCustomResource() *v1alpha2.Jenkins { + return &v1alpha2.Jenkins{ ObjectMeta: metav1.ObjectMeta{ Name: "jenkins", Namespace: "default", }, - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ Annotations: map[string]string{"test": "label"}, - Container: v1alpha1.Container{ + Container: v1alpha2.Container{ Image: "jenkins/jenkins", Resources: corev1.ResourceRequirements{ Requests: corev1.ResourceList{ @@ -134,10 +134,10 @@ func jenkinsCustomResource() *v1alpha1.Jenkins { }, }, }, - SeedJobs: []v1alpha1.SeedJob{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "jenkins-operator-e2e", - JenkinsCredentialType: v1alpha1.NoJenkinsCredentialCredentialType, + JenkinsCredentialType: v1alpha2.NoJenkinsCredentialCredentialType, Targets: "cicd/jobs/*.jenkins", Description: "Jenkins Operator e2e tests repository", RepositoryBranch: "master", diff --git a/pkg/controller/jenkins/configuration/user/seedjobs/validate.go b/pkg/controller/jenkins/configuration/user/seedjobs/validate.go index 629a7a45..fc42cbdd 100644 --- a/pkg/controller/jenkins/configuration/user/seedjobs/validate.go +++ b/pkg/controller/jenkins/configuration/user/seedjobs/validate.go @@ -7,7 +7,7 @@ import ( "fmt" "strings" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/log" "github.com/go-logr/logr" @@ -18,7 +18,7 @@ import ( ) // ValidateSeedJobs verify seed jobs configuration -func (r *SeedJobs) ValidateSeedJobs(jenkins v1alpha1.Jenkins) (bool, error) { +func (r *SeedJobs) ValidateSeedJobs(jenkins v1alpha2.Jenkins) (bool, error) { valid := true if !r.validateIfIDIsUnique(jenkins.Spec.SeedJobs) { @@ -48,24 +48,24 @@ func (r *SeedJobs) ValidateSeedJobs(jenkins v1alpha1.Jenkins) (bool, error) { valid = false } - if _, ok := v1alpha1.AllowedJenkinsCredentialMap[string(seedJob.JenkinsCredentialType)]; !ok { + if _, ok := v1alpha2.AllowedJenkinsCredentialMap[string(seedJob.JenkinsCredentialType)]; !ok { logger.Info("unknown credential type") return false, nil } - if (seedJob.JenkinsCredentialType == v1alpha1.BasicSSHCredentialType || - seedJob.JenkinsCredentialType == v1alpha1.UsernamePasswordCredentialType) && len(seedJob.CredentialID) == 0 { + if (seedJob.JenkinsCredentialType == v1alpha2.BasicSSHCredentialType || + seedJob.JenkinsCredentialType == v1alpha2.UsernamePasswordCredentialType) && len(seedJob.CredentialID) == 0 { logger.Info("credential ID can't be empty") valid = false } // validate repository url match private key - if strings.Contains(seedJob.RepositoryURL, "git@") && seedJob.JenkinsCredentialType == v1alpha1.NoJenkinsCredentialCredentialType { + if strings.Contains(seedJob.RepositoryURL, "git@") && seedJob.JenkinsCredentialType == v1alpha2.NoJenkinsCredentialCredentialType { logger.Info("Jenkins credential must be set while using ssh repository url") valid = false } - if seedJob.JenkinsCredentialType == v1alpha1.BasicSSHCredentialType || seedJob.JenkinsCredentialType == v1alpha1.UsernamePasswordCredentialType { + if seedJob.JenkinsCredentialType == v1alpha2.BasicSSHCredentialType || seedJob.JenkinsCredentialType == v1alpha2.UsernamePasswordCredentialType { secret := &v1.Secret{} namespaceName := types.NamespacedName{Namespace: jenkins.Namespace, Name: seedJob.CredentialID} err := r.k8sClient.Get(context.TODO(), namespaceName, secret) @@ -76,12 +76,12 @@ func (r *SeedJobs) ValidateSeedJobs(jenkins v1alpha1.Jenkins) (bool, error) { return false, stackerr.WithStack(err) } - if seedJob.JenkinsCredentialType == v1alpha1.BasicSSHCredentialType { + if seedJob.JenkinsCredentialType == v1alpha2.BasicSSHCredentialType { if ok := validateBasicSSHSecret(logger, *secret); !ok { valid = false } } - if seedJob.JenkinsCredentialType == v1alpha1.UsernamePasswordCredentialType { + if seedJob.JenkinsCredentialType == v1alpha2.UsernamePasswordCredentialType { if ok := validateUsernamePasswordSecret(logger, *secret); !ok { valid = false } @@ -91,7 +91,7 @@ func (r *SeedJobs) ValidateSeedJobs(jenkins v1alpha1.Jenkins) (bool, error) { return valid, nil } -func (r *SeedJobs) validateIfIDIsUnique(seedJobs []v1alpha1.SeedJob) bool { +func (r *SeedJobs) validateIfIDIsUnique(seedJobs []v1alpha2.SeedJob) bool { ids := map[string]bool{} for _, seedJob := range seedJobs { if _, found := ids[seedJob.ID]; found { diff --git a/pkg/controller/jenkins/configuration/user/seedjobs/validate_test.go b/pkg/controller/jenkins/configuration/user/seedjobs/validate_test.go index 8f5a3e18..0eb01f05 100644 --- a/pkg/controller/jenkins/configuration/user/seedjobs/validate_test.go +++ b/pkg/controller/jenkins/configuration/user/seedjobs/validate_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" @@ -57,13 +57,13 @@ func TestValidateSeedJobs(t *testing.T) { Namespace: "default", } t.Run("Valid with public repository and without private key", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", CredentialID: "jenkins-operator-e2e", - JenkinsCredentialType: v1alpha1.NoJenkinsCredentialCredentialType, + JenkinsCredentialType: v1alpha2.NoJenkinsCredentialCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryBranch: "master", RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", @@ -79,11 +79,11 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, true, result) }) t.Run("Invalid without id", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { - JenkinsCredentialType: v1alpha1.NoJenkinsCredentialCredentialType, + JenkinsCredentialType: v1alpha2.NoJenkinsCredentialCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryBranch: "master", RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", @@ -99,13 +99,13 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, false, result) }) t.Run("Valid with private key and secret", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", CredentialID: "deploy-keys", - JenkinsCredentialType: v1alpha1.BasicSSHCredentialType, + JenkinsCredentialType: v1alpha2.BasicSSHCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryBranch: "master", RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", @@ -132,13 +132,13 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, true, result) }) t.Run("Invalid private key in secret", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", CredentialID: "deploy-keys", - JenkinsCredentialType: v1alpha1.BasicSSHCredentialType, + JenkinsCredentialType: v1alpha2.BasicSSHCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryBranch: "master", RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", @@ -165,13 +165,13 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, false, result) }) t.Run("Invalid with PrivateKey and empty Secret data", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", CredentialID: "deploy-keys", - JenkinsCredentialType: v1alpha1.BasicSSHCredentialType, + JenkinsCredentialType: v1alpha2.BasicSSHCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryBranch: "master", RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", @@ -198,13 +198,13 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, false, result) }) t.Run("Invalid with ssh RepositoryURL and empty PrivateKey", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", CredentialID: "jenkins-operator-e2e", - JenkinsCredentialType: v1alpha1.BasicSSHCredentialType, + JenkinsCredentialType: v1alpha2.BasicSSHCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryBranch: "master", RepositoryURL: "git@github.com:jenkinsci/kubernetes-operator.git", @@ -220,12 +220,12 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, false, result) }) t.Run("Invalid without targets", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", - JenkinsCredentialType: v1alpha1.NoJenkinsCredentialCredentialType, + JenkinsCredentialType: v1alpha2.NoJenkinsCredentialCredentialType, RepositoryBranch: "master", RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", }, @@ -240,12 +240,12 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, false, result) }) t.Run("Invalid without repository URL", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", - JenkinsCredentialType: v1alpha1.NoJenkinsCredentialCredentialType, + JenkinsCredentialType: v1alpha2.NoJenkinsCredentialCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryBranch: "master", }, @@ -260,12 +260,12 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, false, result) }) t.Run("Invalid without repository branch", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", - JenkinsCredentialType: v1alpha1.NoJenkinsCredentialCredentialType, + JenkinsCredentialType: v1alpha2.NoJenkinsCredentialCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", }, @@ -280,13 +280,13 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, false, result) }) t.Run("Valid with username and password", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", CredentialID: "deploy-keys", - JenkinsCredentialType: v1alpha1.UsernamePasswordCredentialType, + JenkinsCredentialType: v1alpha2.UsernamePasswordCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryBranch: "master", RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", @@ -313,13 +313,13 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, true, result) }) t.Run("Invalid with empty username", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", CredentialID: "deploy-keys", - JenkinsCredentialType: v1alpha1.UsernamePasswordCredentialType, + JenkinsCredentialType: v1alpha2.UsernamePasswordCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryBranch: "master", RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", @@ -346,13 +346,13 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, false, result) }) t.Run("Invalid with empty password", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", CredentialID: "deploy-keys", - JenkinsCredentialType: v1alpha1.UsernamePasswordCredentialType, + JenkinsCredentialType: v1alpha2.UsernamePasswordCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryBranch: "master", RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", @@ -379,13 +379,13 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, false, result) }) t.Run("Invalid without username", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", CredentialID: "deploy-keys", - JenkinsCredentialType: v1alpha1.UsernamePasswordCredentialType, + JenkinsCredentialType: v1alpha2.UsernamePasswordCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryBranch: "master", RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", @@ -411,13 +411,13 @@ func TestValidateSeedJobs(t *testing.T) { assert.Equal(t, false, result) }) t.Run("Invalid without password", func(t *testing.T) { - jenkins := v1alpha1.Jenkins{ - Spec: v1alpha1.JenkinsSpec{ - SeedJobs: []v1alpha1.SeedJob{ + jenkins := v1alpha2.Jenkins{ + Spec: v1alpha2.JenkinsSpec{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "example", CredentialID: "deploy-keys", - JenkinsCredentialType: v1alpha1.UsernamePasswordCredentialType, + JenkinsCredentialType: v1alpha2.UsernamePasswordCredentialType, Targets: "cicd/jobs/*.jenkins", RepositoryBranch: "master", RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git", @@ -446,7 +446,7 @@ func TestValidateSeedJobs(t *testing.T) { func TestValidateIfIDIsUnique(t *testing.T) { t.Run("happy", func(t *testing.T) { - seedJobs := []v1alpha1.SeedJob{ + seedJobs := []v1alpha2.SeedJob{ {ID: "first"}, {ID: "second"}, } ctrl := New(nil, nil, logf.ZapLogger(false)) @@ -454,7 +454,7 @@ func TestValidateIfIDIsUnique(t *testing.T) { assert.Equal(t, true, got) }) t.Run("duplicated ids", func(t *testing.T) { - seedJobs := []v1alpha1.SeedJob{ + seedJobs := []v1alpha2.SeedJob{ {ID: "first"}, {ID: "first"}, } ctrl := New(nil, nil, logf.ZapLogger(false)) diff --git a/pkg/controller/jenkins/configuration/user/validate.go b/pkg/controller/jenkins/configuration/user/validate.go index e94e61d7..36e590ed 100644 --- a/pkg/controller/jenkins/configuration/user/validate.go +++ b/pkg/controller/jenkins/configuration/user/validate.go @@ -1,12 +1,12 @@ package user import ( - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/user/seedjobs" ) // Validate validates Jenkins CR Spec section -func (r *ReconcileUserConfiguration) Validate(jenkins *v1alpha1.Jenkins) (bool, error) { +func (r *ReconcileUserConfiguration) Validate(jenkins *v1alpha2.Jenkins) (bool, error) { seedJobs := seedjobs.New(r.jenkinsClient, r.k8sClient, r.logger) return seedJobs.ValidateSeedJobs(*jenkins) } diff --git a/pkg/controller/jenkins/groovy/groovy.go b/pkg/controller/jenkins/groovy/groovy.go index 9319362f..da919c2a 100644 --- a/pkg/controller/jenkins/groovy/groovy.go +++ b/pkg/controller/jenkins/groovy/groovy.go @@ -7,7 +7,7 @@ import ( "sort" "strings" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/jobs" @@ -52,7 +52,7 @@ func (g *Groovy) ConfigureJob() error { } // Ensure executes groovy script and verifies jenkins job status according to reconciliation loop lifecycle -func (g *Groovy) Ensure(secretOrConfigMapData map[string]string, jenkins *v1alpha1.Jenkins) (bool, error) { +func (g *Groovy) Ensure(secretOrConfigMapData map[string]string, jenkins *v1alpha2.Jenkins) (bool, error) { jobsClient := jobs.New(g.jenkinsClient, g.k8sClient, g.logger) hash := g.calculateHash(secretOrConfigMapData) diff --git a/pkg/controller/jenkins/handler.go b/pkg/controller/jenkins/handler.go index e6a7f683..6a6ca73a 100644 --- a/pkg/controller/jenkins/handler.go +++ b/pkg/controller/jenkins/handler.go @@ -4,7 +4,7 @@ import ( "fmt" "reflect" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" "github.com/jenkinsci/kubernetes-operator/pkg/log" @@ -85,7 +85,7 @@ func (e *jenkinsDecorator) Create(evt event.CreateEvent, q workqueue.RateLimitin } func (e *jenkinsDecorator) Update(evt event.UpdateEvent, q workqueue.RateLimitingInterface) { - if !reflect.DeepEqual(evt.ObjectOld.(*v1alpha1.Jenkins).Spec, evt.ObjectNew.(*v1alpha1.Jenkins).Spec) { + if !reflect.DeepEqual(evt.ObjectOld.(*v1alpha2.Jenkins).Spec, evt.ObjectNew.(*v1alpha2.Jenkins).Spec) { log.Log.WithValues("cr", evt.MetaNew.GetName()).Info( fmt.Sprintf("%T/%s has been updated", evt.ObjectNew, evt.MetaNew.GetName())) } diff --git a/pkg/controller/jenkins/jenkins_controller.go b/pkg/controller/jenkins/jenkins_controller.go index 5332bd99..d2940303 100644 --- a/pkg/controller/jenkins/jenkins_controller.go +++ b/pkg/controller/jenkins/jenkins_controller.go @@ -5,7 +5,7 @@ import ( "fmt" "reflect" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/user" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" @@ -66,7 +66,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { // Watch for changes to primary resource Jenkins decorator := jenkinsDecorator{handler: &handler.EnqueueRequestForObject{}} - err = c.Watch(&source.Kind{Type: &v1alpha1.Jenkins{}}, &decorator) + err = c.Watch(&source.Kind{Type: &v1alpha2.Jenkins{}}, &decorator) if err != nil { return errors.WithStack(err) } @@ -74,7 +74,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { // Watch for changes to secondary resource Pods and requeue the owner Jenkins err = c.Watch(&source.Kind{Type: &corev1.Pod{}}, &handler.EnqueueRequestForOwner{ IsController: true, - OwnerType: &v1alpha1.Jenkins{}, + OwnerType: &v1alpha2.Jenkins{}, }) if err != nil { return errors.WithStack(err) @@ -127,7 +127,7 @@ func (r *ReconcileJenkins) Reconcile(request reconcile.Request) (reconcile.Resul func (r *ReconcileJenkins) reconcile(request reconcile.Request, logger logr.Logger) (reconcile.Result, error) { // Fetch the Jenkins instance - jenkins := &v1alpha1.Jenkins{} + jenkins := &v1alpha2.Jenkins{} err := r.client.Get(context.TODO(), request.NamespacedName, jenkins) if err != nil { if apierrors.IsNotFound(err) { @@ -219,7 +219,7 @@ func (r *ReconcileJenkins) buildLogger(jenkinsName string) logr.Logger { return log.Log.WithValues("cr", jenkinsName) } -func (r *ReconcileJenkins) setDefaults(jenkins *v1alpha1.Jenkins, logger logr.Logger) error { +func (r *ReconcileJenkins) setDefaults(jenkins *v1alpha2.Jenkins, logger logr.Logger) error { changed := false if len(jenkins.Spec.Master.Image) == 0 { logger.Info("Setting default Jenkins master image: " + constants.DefaultJenkinsMasterImage) @@ -295,7 +295,7 @@ func (r *ReconcileJenkins) setDefaults(jenkins *v1alpha1.Jenkins, logger logr.Lo }, } } - if reflect.DeepEqual(jenkins.Spec.Service, v1alpha1.Service{}) { + if reflect.DeepEqual(jenkins.Spec.Service, v1alpha2.Service{}) { logger.Info("Setting default Jenkins master service") changed = true var serviceType corev1.ServiceType @@ -306,15 +306,15 @@ func (r *ReconcileJenkins) setDefaults(jenkins *v1alpha1.Jenkins, logger logr.Lo } else { serviceType = corev1.ServiceTypeClusterIP } - jenkins.Spec.Service = v1alpha1.Service{ + jenkins.Spec.Service = v1alpha2.Service{ Type: serviceType, Port: constants.DefaultHTTPPortInt32, } } - if reflect.DeepEqual(jenkins.Spec.SlaveService, v1alpha1.Service{}) { + if reflect.DeepEqual(jenkins.Spec.SlaveService, v1alpha2.Service{}) { logger.Info("Setting default Jenkins slave service") changed = true - jenkins.Spec.SlaveService = v1alpha1.Service{ + jenkins.Spec.SlaveService = v1alpha2.Service{ Type: corev1.ServiceTypeClusterIP, Port: constants.DefaultSlavePortInt32, } @@ -331,7 +331,7 @@ func (r *ReconcileJenkins) setDefaults(jenkins *v1alpha1.Jenkins, logger logr.Lo return nil } -func setDefaultsForContainer(jenkins *v1alpha1.Jenkins, containerIndex int, logger logr.Logger) bool { +func setDefaultsForContainer(jenkins *v1alpha2.Jenkins, containerIndex int, logger logr.Logger) bool { changed := false if len(jenkins.Spec.Master.Containers[containerIndex].ImagePullPolicy) == 0 { diff --git a/pkg/controller/jenkins/jobs/jobs.go b/pkg/controller/jenkins/jobs/jobs.go index 89144046..0cd99336 100644 --- a/pkg/controller/jenkins/jobs/jobs.go +++ b/pkg/controller/jenkins/jobs/jobs.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/log" @@ -51,20 +51,20 @@ func New(jenkinsClient client.Jenkins, k8sClient k8s.Client, logger logr.Logger) // entire state is saved in Jenkins.Status.Builds section // function return 'true' when build finished successfully or false when reconciliation loop should requeue this function // preserveStatus determines that build won't be removed from Jenkins.Status.Builds section -func (jobs *Jobs) EnsureBuildJob(jobName, hash string, parameters map[string]string, jenkins *v1alpha1.Jenkins, preserveStatus bool) (done bool, err error) { +func (jobs *Jobs) EnsureBuildJob(jobName, hash string, parameters map[string]string, jenkins *v1alpha2.Jenkins, preserveStatus bool) (done bool, err error) { jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring build, name:'%s' hash:'%s'", jobName, hash)) build := jobs.getBuildFromStatus(jobName, hash, jenkins) if build != nil { jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Build exists in status, %+v", build)) switch build.Status { - case v1alpha1.BuildSuccessStatus: + case v1alpha2.BuildSuccessStatus: return jobs.ensureSuccessBuild(*build, jenkins, preserveStatus) - case v1alpha1.BuildRunningStatus: + case v1alpha2.BuildRunningStatus: return jobs.ensureRunningBuild(*build, jenkins, preserveStatus) - case v1alpha1.BuildUnstableStatus, v1alpha1.BuildNotBuildStatus, v1alpha1.BuildFailureStatus, v1alpha1.BuildAbortedStatus: + case v1alpha2.BuildUnstableStatus, v1alpha2.BuildNotBuildStatus, v1alpha2.BuildFailureStatus, v1alpha2.BuildAbortedStatus: return jobs.ensureFailedBuild(*build, jenkins, parameters, preserveStatus) - case v1alpha1.BuildExpiredStatus: + case v1alpha2.BuildExpiredStatus: return jobs.ensureExpiredBuild(*build, jenkins, preserveStatus) default: jobs.logger.V(log.VWarn).Info(fmt.Sprintf("Unexpected build status, %+v", build)) @@ -74,7 +74,7 @@ func (jobs *Jobs) EnsureBuildJob(jobName, hash string, parameters map[string]str // build is run first time - build job and update status created := metav1.Now() - newBuild := v1alpha1.Build{ + newBuild := v1alpha2.Build{ JobName: jobName, Hash: hash, CreateTime: &created, @@ -82,7 +82,7 @@ func (jobs *Jobs) EnsureBuildJob(jobName, hash string, parameters map[string]str return jobs.buildJob(newBuild, parameters, jenkins) } -func (jobs *Jobs) getBuildFromStatus(jobName string, hash string, jenkins *v1alpha1.Jenkins) *v1alpha1.Build { +func (jobs *Jobs) getBuildFromStatus(jobName string, hash string, jenkins *v1alpha2.Jenkins) *v1alpha2.Build { if jenkins != nil { builds := jenkins.Status.Builds for _, build := range builds { @@ -94,7 +94,7 @@ func (jobs *Jobs) getBuildFromStatus(jobName string, hash string, jenkins *v1alp return nil } -func (jobs *Jobs) ensureSuccessBuild(build v1alpha1.Build, jenkins *v1alpha1.Jenkins, preserveStatus bool) (bool, error) { +func (jobs *Jobs) ensureSuccessBuild(build v1alpha2.Build, jenkins *v1alpha2.Jenkins, preserveStatus bool) (bool, error) { jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring success build, %+v", build)) if !preserveStatus { @@ -107,7 +107,7 @@ func (jobs *Jobs) ensureSuccessBuild(build v1alpha1.Build, jenkins *v1alpha1.Jen return true, nil } -func (jobs *Jobs) ensureRunningBuild(build v1alpha1.Build, jenkins *v1alpha1.Jenkins, preserveStatus bool) (bool, error) { +func (jobs *Jobs) ensureRunningBuild(build v1alpha2.Build, jenkins *v1alpha2.Jenkins, preserveStatus bool) (bool, error) { jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring running build, %+v", build)) // FIXME (antoniaklja) implement build expiration @@ -121,7 +121,7 @@ func (jobs *Jobs) ensureRunningBuild(build v1alpha1.Build, jenkins *v1alpha1.Jen } if jenkinsBuild.GetResult() != "" { - build.Status = v1alpha1.BuildStatus(strings.ToLower(jenkinsBuild.GetResult())) + build.Status = v1alpha2.BuildStatus(strings.ToLower(jenkinsBuild.GetResult())) } err = jobs.updateBuildStatus(build, jenkins) @@ -130,13 +130,13 @@ func (jobs *Jobs) ensureRunningBuild(build v1alpha1.Build, jenkins *v1alpha1.Jen return false, err } - if build.Status == v1alpha1.BuildSuccessStatus { + if build.Status == v1alpha2.BuildSuccessStatus { jobs.logger.Info(fmt.Sprintf("Build finished successfully, %+v", build)) return true, nil } - if build.Status == v1alpha1.BuildFailureStatus || build.Status == v1alpha1.BuildUnstableStatus || - build.Status == v1alpha1.BuildNotBuildStatus || build.Status == v1alpha1.BuildAbortedStatus { + if build.Status == v1alpha2.BuildFailureStatus || build.Status == v1alpha2.BuildUnstableStatus || + build.Status == v1alpha2.BuildNotBuildStatus || build.Status == v1alpha2.BuildAbortedStatus { jobs.logger.V(log.VWarn).Info(fmt.Sprintf("Build failed, %+v", build)) return false, ErrorBuildFailed } @@ -144,7 +144,7 @@ func (jobs *Jobs) ensureRunningBuild(build v1alpha1.Build, jenkins *v1alpha1.Jen return false, nil } -func (jobs *Jobs) ensureFailedBuild(build v1alpha1.Build, jenkins *v1alpha1.Jenkins, parameters map[string]string, preserveStatus bool) (bool, error) { +func (jobs *Jobs) ensureFailedBuild(build v1alpha2.Build, jenkins *v1alpha2.Jenkins, parameters map[string]string, preserveStatus bool) (bool, error) { jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring failed build, %+v", build)) if build.Retires < BuildRetires { @@ -170,7 +170,7 @@ func (jobs *Jobs) ensureFailedBuild(build v1alpha1.Build, jenkins *v1alpha1.Jenk return false, ErrorUnrecoverableBuildFailed } -func (jobs *Jobs) ensureExpiredBuild(build v1alpha1.Build, jenkins *v1alpha1.Jenkins, preserveStatus bool) (bool, error) { +func (jobs *Jobs) ensureExpiredBuild(build v1alpha2.Build, jenkins *v1alpha2.Jenkins, preserveStatus bool) (bool, error) { jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring expired build, %+v", build)) jenkinsBuild, err := jobs.jenkinsClient.GetBuild(build.JobName, build.Number) @@ -188,7 +188,7 @@ func (jobs *Jobs) ensureExpiredBuild(build v1alpha1.Build, jenkins *v1alpha1.Jen return false, errors.WithStack(err) } - if v1alpha1.BuildStatus(jenkinsBuild.GetResult()) != v1alpha1.BuildAbortedStatus { + if v1alpha2.BuildStatus(jenkinsBuild.GetResult()) != v1alpha2.BuildAbortedStatus { return false, ErrorAbortBuildFailed } @@ -210,9 +210,9 @@ func (jobs *Jobs) ensureExpiredBuild(build v1alpha1.Build, jenkins *v1alpha1.Jen return true, nil } -func (jobs *Jobs) removeBuildFromStatus(build v1alpha1.Build, jenkins *v1alpha1.Jenkins) error { +func (jobs *Jobs) removeBuildFromStatus(build v1alpha2.Build, jenkins *v1alpha2.Jenkins) error { jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Removing build from status, %+v", build)) - builds := make([]v1alpha1.Build, len(jenkins.Status.Builds)) + builds := make([]v1alpha2.Build, len(jenkins.Status.Builds)) for _, existingBuild := range jenkins.Status.Builds { if existingBuild.JobName != build.JobName && existingBuild.Hash != build.Hash { builds = append(builds, existingBuild) @@ -227,7 +227,7 @@ func (jobs *Jobs) removeBuildFromStatus(build v1alpha1.Build, jenkins *v1alpha1. return nil } -func (jobs *Jobs) buildJob(build v1alpha1.Build, parameters map[string]string, jenkins *v1alpha1.Jenkins) (bool, error) { +func (jobs *Jobs) buildJob(build v1alpha2.Build, parameters map[string]string, jenkins *v1alpha2.Jenkins) (bool, error) { jobs.logger.Info(fmt.Sprintf("Running job, %+v", build)) job, err := jobs.jenkinsClient.GetJob(build.JobName) if err != nil { @@ -243,7 +243,7 @@ func (jobs *Jobs) buildJob(build v1alpha1.Build, parameters map[string]string, j return false, errors.WithStack(err) } - build.Status = v1alpha1.BuildRunningStatus + build.Status = v1alpha2.BuildRunningStatus build.Number = nextBuildNumber err = jobs.updateBuildStatus(build, jenkins) @@ -254,7 +254,7 @@ func (jobs *Jobs) buildJob(build v1alpha1.Build, parameters map[string]string, j return false, nil } -func (jobs *Jobs) updateBuildStatus(build v1alpha1.Build, jenkins *v1alpha1.Jenkins) error { +func (jobs *Jobs) updateBuildStatus(build v1alpha2.Build, jenkins *v1alpha2.Jenkins) error { jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Updating build status, %+v", build)) // get index of existing build from status if exists buildIndex := -1 diff --git a/pkg/controller/jenkins/jobs/jobs_test.go b/pkg/controller/jenkins/jobs/jobs_test.go index 6adb2e1d..3a8dccec 100644 --- a/pkg/controller/jenkins/jobs/jobs_test.go +++ b/pkg/controller/jenkins/jobs/jobs_test.go @@ -7,7 +7,7 @@ import ( "fmt" "testing" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/bndr/gojenkins" @@ -37,7 +37,7 @@ func TestSuccessEnsureJob(t *testing.T) { // when jenkins := jenkinsCustomResource() fakeClient := fake.NewFakeClient() - err := v1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme) + err := v1alpha2.SchemeBuilder.AddToScheme(scheme.Scheme) assert.NoError(t, err) err = fakeClient.Create(ctx, jenkins) assert.NoError(t, err) @@ -67,7 +67,7 @@ func TestSuccessEnsureJob(t *testing.T) { GetBuild(jobName, buildNumber). Return(&gojenkins.Build{ Raw: &gojenkins.BuildResponse{ - Result: string(v1alpha1.BuildSuccessStatus), + Result: string(v1alpha2.BuildSuccessStatus), }, }, nil).AnyTimes() @@ -91,13 +91,13 @@ func TestSuccessEnsureJob(t *testing.T) { // first run - build should be scheduled and status updated if reconcileAttempt == 1 { assert.False(t, done) - assert.Equal(t, build.Status, v1alpha1.BuildRunningStatus) + assert.Equal(t, build.Status, v1alpha2.BuildRunningStatus) } // second run -job should be success and status updated if reconcileAttempt == 2 { assert.True(t, done) - assert.Equal(t, build.Status, v1alpha1.BuildSuccessStatus) + assert.Equal(t, build.Status, v1alpha2.BuildSuccessStatus) } } } @@ -149,7 +149,7 @@ func TestEnsureJobWithFailedBuild(t *testing.T) { GetBuild(jobName, int64(1)). Return(&gojenkins.Build{ Raw: &gojenkins.BuildResponse{ - Result: string(v1alpha1.BuildFailureStatus), + Result: string(v1alpha2.BuildFailureStatus), }, }, nil) } @@ -178,7 +178,7 @@ func TestEnsureJobWithFailedBuild(t *testing.T) { GetBuild(jobName, int64(2)). Return(&gojenkins.Build{ Raw: &gojenkins.BuildResponse{ - Result: string(v1alpha1.BuildSuccessStatus), + Result: string(v1alpha2.BuildSuccessStatus), }, }, nil) } @@ -204,7 +204,7 @@ func TestEnsureJobWithFailedBuild(t *testing.T) { assert.NoError(t, errEnsureBuildJob) assert.False(t, done) assert.Equal(t, build.Number, int64(1)) - assert.Equal(t, build.Status, v1alpha1.BuildRunningStatus) + assert.Equal(t, build.Status, v1alpha2.BuildRunningStatus) } // second run - build should be failure and status updated @@ -212,7 +212,7 @@ func TestEnsureJobWithFailedBuild(t *testing.T) { assert.Error(t, errEnsureBuildJob) assert.False(t, done) assert.Equal(t, build.Number, int64(1)) - assert.Equal(t, build.Status, v1alpha1.BuildFailureStatus) + assert.Equal(t, build.Status, v1alpha2.BuildFailureStatus) } // third run - build should be rescheduled and status updated @@ -220,7 +220,7 @@ func TestEnsureJobWithFailedBuild(t *testing.T) { assert.NoError(t, errEnsureBuildJob) assert.False(t, done) assert.Equal(t, build.Number, int64(2)) - assert.Equal(t, build.Status, v1alpha1.BuildRunningStatus) + assert.Equal(t, build.Status, v1alpha2.BuildRunningStatus) } // fourth run - build should be success and status updated @@ -228,7 +228,7 @@ func TestEnsureJobWithFailedBuild(t *testing.T) { assert.NoError(t, errEnsureBuildJob) assert.True(t, done) assert.Equal(t, build.Number, int64(2)) - assert.Equal(t, build.Status, v1alpha1.BuildSuccessStatus) + assert.Equal(t, build.Status, v1alpha2.BuildSuccessStatus) } } } @@ -281,7 +281,7 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) { GetBuild(buildName, int64(1)). Return(&gojenkins.Build{ Raw: &gojenkins.BuildResponse{ - Result: string(v1alpha1.BuildFailureStatus), + Result: string(v1alpha2.BuildFailureStatus), }, }, nil) } @@ -310,7 +310,7 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) { GetBuild(buildName, int64(2)). Return(&gojenkins.Build{ Raw: &gojenkins.BuildResponse{ - Result: string(v1alpha1.BuildFailureStatus), + Result: string(v1alpha2.BuildFailureStatus), }, }, nil) } @@ -337,7 +337,7 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) { assert.False(t, done) assert.Equal(t, build.Number, int64(1)) assert.Equal(t, build.Retires, 0) - assert.Equal(t, build.Status, v1alpha1.BuildRunningStatus) + assert.Equal(t, build.Status, v1alpha2.BuildRunningStatus) } // second run - build should be failure and status updated @@ -346,7 +346,7 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) { assert.False(t, done) assert.Equal(t, build.Number, int64(1)) assert.Equal(t, build.Retires, 0) - assert.Equal(t, build.Status, v1alpha1.BuildFailureStatus) + assert.Equal(t, build.Status, v1alpha2.BuildFailureStatus) } // third run - build should be rescheduled and status updated @@ -356,7 +356,7 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) { //assert.Equal(t, build.Retires, 1) assert.Equal(t, build.Number, int64(2)) assert.Equal(t, build.Retires, 1) - assert.Equal(t, build.Status, v1alpha1.BuildRunningStatus) + assert.Equal(t, build.Status, v1alpha2.BuildRunningStatus) } // fourth run - build should be failure and status updated @@ -365,7 +365,7 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) { assert.False(t, done) assert.Equal(t, build.Number, int64(2)) assert.Equal(t, build.Retires, 1) - assert.Equal(t, build.Status, v1alpha1.BuildFailureStatus) + assert.Equal(t, build.Status, v1alpha2.BuildFailureStatus) } // fifth run - build should be unrecoverable failed and status updated @@ -374,21 +374,21 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) { assert.False(t, done) assert.Equal(t, build.Number, int64(2)) assert.Equal(t, build.Retires, 1) - assert.Equal(t, build.Status, v1alpha1.BuildFailureStatus) + assert.Equal(t, build.Status, v1alpha2.BuildFailureStatus) } } } -func jenkinsCustomResource() *v1alpha1.Jenkins { - return &v1alpha1.Jenkins{ +func jenkinsCustomResource() *v1alpha2.Jenkins { + return &v1alpha2.Jenkins{ ObjectMeta: metav1.ObjectMeta{ Name: "jenkins", Namespace: "default", }, - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ Annotations: map[string]string{"test": "label"}, - Container: v1alpha1.Container{ + Container: v1alpha2.Container{ Image: "jenkins/jenkins", Resources: corev1.ResourceRequirements{ Requests: corev1.ResourceList{ @@ -402,10 +402,10 @@ func jenkinsCustomResource() *v1alpha1.Jenkins { }, }, }, - SeedJobs: []v1alpha1.SeedJob{ + SeedJobs: []v1alpha2.SeedJob{ { ID: "jenkins-operator-e2e", - JenkinsCredentialType: v1alpha1.NoJenkinsCredentialCredentialType, + JenkinsCredentialType: v1alpha2.NoJenkinsCredentialCredentialType, Targets: "cicd/jobs/*.jenkins", Description: "Jenkins Operator e2e tests repository", RepositoryBranch: "master", diff --git a/test/e2e/configuration_test.go b/test/e2e/configuration_test.go index f4babab9..5e83fb1c 100644 --- a/test/e2e/configuration_test.go +++ b/test/e2e/configuration_test.go @@ -5,7 +5,7 @@ import ( "fmt" "testing" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" @@ -30,10 +30,10 @@ func TestConfiguration(t *testing.T) { systemMessage := "Configuration as Code integration works!!!" systemMessageEnvName := "SYSTEM_MESSAGE" mySeedJob := seedJobConfig{ - SeedJob: v1alpha1.SeedJob{ + SeedJob: v1alpha2.SeedJob{ ID: "jenkins-operator", CredentialID: "jenkins-operator", - JenkinsCredentialType: v1alpha1.NoJenkinsCredentialCredentialType, + JenkinsCredentialType: v1alpha2.NoJenkinsCredentialCredentialType, Targets: "cicd/jobs/*.jenkins", Description: "Jenkins Operator repository", RepositoryBranch: "master", @@ -64,7 +64,7 @@ func TestConfiguration(t *testing.T) { // base createUserConfigurationSecret(t, jenkinsCRName, namespace, systemMessageEnvName, systemMessage) createUserConfigurationConfigMap(t, jenkinsCRName, namespace, numberOfExecutors, fmt.Sprintf("${%s}", systemMessageEnvName)) - jenkins := createJenkinsCR(t, jenkinsCRName, namespace, &[]v1alpha1.SeedJob{mySeedJob.SeedJob}, volumes) + jenkins := createJenkinsCR(t, jenkinsCRName, namespace, &[]v1alpha2.SeedJob{mySeedJob.SeedJob}, volumes) createDefaultLimitsForContainersInNamespace(t, namespace) createKubernetesCredentialsProviderSecret(t, namespace, mySeedJob) waitForJenkinsBaseConfigurationToComplete(t, jenkins) @@ -153,7 +153,7 @@ func createDefaultLimitsForContainersInNamespace(t *testing.T, namespace string) } } -func verifyJenkinsMasterPodAttributes(t *testing.T, jenkins *v1alpha1.Jenkins) { +func verifyJenkinsMasterPodAttributes(t *testing.T, jenkins *v1alpha2.Jenkins) { jenkinsPod := getJenkinsMasterPod(t, jenkins) jenkins = getJenkins(t, jenkins.Namespace, jenkins.Name) @@ -222,7 +222,7 @@ func verifyContainer(t *testing.T, expected corev1.Container, actual corev1.Cont } } -func verifyPlugins(t *testing.T, jenkinsClient jenkinsclient.Jenkins, jenkins *v1alpha1.Jenkins) { +func verifyPlugins(t *testing.T, jenkinsClient jenkinsclient.Jenkins, jenkins *v1alpha2.Jenkins) { installedPlugins, err := jenkinsClient.GetPlugins(1) if err != nil { t.Fatal(err) diff --git a/test/e2e/jenkins.go b/test/e2e/jenkins.go index 5fac3782..b18eaa80 100644 --- a/test/e2e/jenkins.go +++ b/test/e2e/jenkins.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" @@ -17,8 +17,8 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" ) -func getJenkins(t *testing.T, namespace, name string) *v1alpha1.Jenkins { - jenkins := &v1alpha1.Jenkins{} +func getJenkins(t *testing.T, namespace, name string) *v1alpha2.Jenkins { + jenkins := &v1alpha2.Jenkins{} namespaceName := types.NamespacedName{Namespace: namespace, Name: name} if err := framework.Global.Client.Get(context.TODO(), namespaceName, jenkins); err != nil { t.Fatal(err) @@ -27,7 +27,7 @@ func getJenkins(t *testing.T, namespace, name string) *v1alpha1.Jenkins { return jenkins } -func getJenkinsMasterPod(t *testing.T, jenkins *v1alpha1.Jenkins) *v1.Pod { +func getJenkinsMasterPod(t *testing.T, jenkins *v1alpha2.Jenkins) *v1.Pod { lo := metav1.ListOptions{ LabelSelector: labels.SelectorFromSet(resources.BuildResourceLabels(jenkins)).String(), } @@ -41,7 +41,7 @@ func getJenkinsMasterPod(t *testing.T, jenkins *v1alpha1.Jenkins) *v1.Pod { return &podList.Items[0] } -func createJenkinsAPIClient(jenkins *v1alpha1.Jenkins) (jenkinsclient.Jenkins, error) { +func createJenkinsAPIClient(jenkins *v1alpha2.Jenkins) (jenkinsclient.Jenkins, error) { adminSecret := &v1.Secret{} namespaceName := types.NamespacedName{Namespace: jenkins.Namespace, Name: resources.GetOperatorCredentialsSecretName(jenkins)} if err := framework.Global.Client.Get(context.TODO(), namespaceName, adminSecret); err != nil { @@ -60,21 +60,21 @@ func createJenkinsAPIClient(jenkins *v1alpha1.Jenkins) (jenkinsclient.Jenkins, e ) } -func createJenkinsCR(t *testing.T, name, namespace string, seedJob *[]v1alpha1.SeedJob, volumes []corev1.Volume) *v1alpha1.Jenkins { - var seedJobs []v1alpha1.SeedJob +func createJenkinsCR(t *testing.T, name, namespace string, seedJob *[]v1alpha2.SeedJob, volumes []corev1.Volume) *v1alpha2.Jenkins { + var seedJobs []v1alpha2.SeedJob if seedJob != nil { seedJobs = append(seedJobs, *seedJob...) } - jenkins := &v1alpha1.Jenkins{ + jenkins := &v1alpha2.Jenkins{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: namespace, }, - Spec: v1alpha1.JenkinsSpec{ - Master: v1alpha1.JenkinsMaster{ + Spec: v1alpha2.JenkinsSpec{ + Master: v1alpha2.JenkinsMaster{ Annotations: map[string]string{"test": "label"}, - Container: v1alpha1.Container{ + Container: v1alpha2.Container{ Image: "jenkins/jenkins", Env: []v1.EnvVar{ { @@ -107,7 +107,7 @@ func createJenkinsCR(t *testing.T, name, namespace string, seedJob *[]v1alpha1.S FailureThreshold: int32(10), }, }, - Containers: []v1alpha1.Container{ + Containers: []v1alpha2.Container{ { Name: "envoyproxy", Image: "envoyproxy/envoy-alpine", @@ -132,7 +132,7 @@ func createJenkinsCR(t *testing.T, name, namespace string, seedJob *[]v1alpha1.S return jenkins } -func verifyJenkinsAPIConnection(t *testing.T, jenkins *v1alpha1.Jenkins) jenkinsclient.Jenkins { +func verifyJenkinsAPIConnection(t *testing.T, jenkins *v1alpha2.Jenkins) jenkinsclient.Jenkins { client, err := createJenkinsAPIClient(jenkins) if err != nil { t.Fatal(err) @@ -142,7 +142,7 @@ func verifyJenkinsAPIConnection(t *testing.T, jenkins *v1alpha1.Jenkins) jenkins return client } -func restartJenkinsMasterPod(t *testing.T, jenkins *v1alpha1.Jenkins) { +func restartJenkinsMasterPod(t *testing.T, jenkins *v1alpha2.Jenkins) { t.Log("Restarting Jenkins master pod") jenkinsPod := getJenkinsMasterPod(t, jenkins) err := framework.Global.Client.Delete(context.TODO(), jenkinsPod) diff --git a/test/e2e/main_test.go b/test/e2e/main_test.go index 6874e7b8..154a6894 100644 --- a/test/e2e/main_test.go +++ b/test/e2e/main_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/jenkinsci/kubernetes-operator/pkg/apis" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" f "github.com/operator-framework/operator-sdk/pkg/test" @@ -35,10 +35,10 @@ func setupTest(t *testing.T) (string, *framework.TestCtx) { t.Fatalf("could not initialize cluster resources: %v", err) } - jenkinsServiceList := &v1alpha1.JenkinsList{ + jenkinsServiceList := &v1alpha2.JenkinsList{ TypeMeta: metav1.TypeMeta{ - Kind: v1alpha1.Kind, - APIVersion: v1alpha1.SchemeGroupVersion.String(), + Kind: v1alpha2.Kind, + APIVersion: v1alpha2.SchemeGroupVersion.String(), }, } err = framework.AddToFrameworkScheme(apis.AddToScheme, jenkinsServiceList) diff --git a/test/e2e/restart_test.go b/test/e2e/restart_test.go index 75710a23..ca4f07a9 100644 --- a/test/e2e/restart_test.go +++ b/test/e2e/restart_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" @@ -86,8 +86,8 @@ func checkIfAuthorizationStrategyUnsecuredIsSet(t *testing.T, jenkinsClient jenk require.NoError(t, err, logs) } -func checkBaseConfigurationCompleteTimeIsNotSet(t *testing.T, jenkins *v1alpha1.Jenkins) { - jenkinsStatus := &v1alpha1.Jenkins{} +func checkBaseConfigurationCompleteTimeIsNotSet(t *testing.T, jenkins *v1alpha2.Jenkins) { + jenkinsStatus := &v1alpha2.Jenkins{} namespaceName := types.NamespacedName{Namespace: jenkins.Namespace, Name: jenkins.Name} err := framework.Global.Client.Get(context.TODO(), namespaceName, jenkinsStatus) if err != nil { diff --git a/test/e2e/seedjobs_test.go b/test/e2e/seedjobs_test.go index b75fa8c4..b32da366 100644 --- a/test/e2e/seedjobs_test.go +++ b/test/e2e/seedjobs_test.go @@ -10,7 +10,7 @@ import ( "time" "github.com/jenkinsci/kubernetes-operator/internal/try" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/user/seedjobs" @@ -22,7 +22,7 @@ import ( ) type seedJobConfig struct { - v1alpha1.SeedJob + v1alpha2.SeedJob JobNames []string `json:"jobNames,omitempty"` Username string `json:"username,omitempty"` Password string `json:"password,omitempty"` @@ -44,7 +44,7 @@ func TestSeedJobs(t *testing.T) { defer ctx.Cleanup() jenkinsCRName := "e2e" - var seedJobs []v1alpha1.SeedJob + var seedJobs []v1alpha2.SeedJob // base for _, seedJobConfig := range seedJobsConfig.SeedJobs { @@ -79,7 +79,7 @@ func loadSeedJobsConfig(t *testing.T) seedJobsConfig { } func createKubernetesCredentialsProviderSecret(t *testing.T, namespace string, config seedJobConfig) { - if config.JenkinsCredentialType == v1alpha1.NoJenkinsCredentialCredentialType { + if config.JenkinsCredentialType == v1alpha2.NoJenkinsCredentialCredentialType { return } @@ -108,7 +108,7 @@ func createKubernetesCredentialsProviderSecret(t *testing.T, namespace string, c func verifyJenkinsSeedJobs(t *testing.T, jenkinsClient jenkinsclient.Jenkins, seedJobs []seedJobConfig) { var err error for _, seedJob := range seedJobs { - if seedJob.JenkinsCredentialType == v1alpha1.BasicSSHCredentialType || seedJob.JenkinsCredentialType == v1alpha1.UsernamePasswordCredentialType { + if seedJob.JenkinsCredentialType == v1alpha2.BasicSSHCredentialType || seedJob.JenkinsCredentialType == v1alpha2.UsernamePasswordCredentialType { err = verifyIfJenkinsCredentialExists(jenkinsClient, seedJob.CredentialID) assert.NoErrorf(t, err, "Jenkins credential '%s' not created for seed job ID '%s'", seedJob.CredentialID, seedJob.ID) } diff --git a/test/e2e/wait.go b/test/e2e/wait.go index 34f7f6a7..431d55f6 100644 --- a/test/e2e/wait.go +++ b/test/e2e/wait.go @@ -7,7 +7,7 @@ import ( "time" "github.com/jenkinsci/kubernetes-operator/internal/try" - "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha1" + "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources" @@ -27,11 +27,11 @@ var ( ) // checkConditionFunc is used to check if a condition for the jenkins CR is set -type checkConditionFunc func(*v1alpha1.Jenkins, error) bool +type checkConditionFunc func(*v1alpha2.Jenkins, error) bool -func waitForJenkinsBaseConfigurationToComplete(t *testing.T, jenkins *v1alpha1.Jenkins) { +func waitForJenkinsBaseConfigurationToComplete(t *testing.T, jenkins *v1alpha2.Jenkins) { t.Log("Waiting for Jenkins base configuration to complete") - _, err := WaitUntilJenkinsConditionSet(retryInterval, 150, jenkins, func(jenkins *v1alpha1.Jenkins, err error) bool { + _, err := WaitUntilJenkinsConditionSet(retryInterval, 150, jenkins, func(jenkins *v1alpha2.Jenkins, err error) bool { t.Logf("Current Jenkins status: '%+v', error '%s'", jenkins.Status, err) return err == nil && jenkins.Status.BaseConfigurationCompletedTime != nil }) @@ -44,7 +44,7 @@ func waitForJenkinsBaseConfigurationToComplete(t *testing.T, jenkins *v1alpha1.J assert.NoError(t, err) } -func waitForRecreateJenkinsMasterPod(t *testing.T, jenkins *v1alpha1.Jenkins) { +func waitForRecreateJenkinsMasterPod(t *testing.T, jenkins *v1alpha2.Jenkins) { err := wait.Poll(retryInterval, 30*retryInterval, func() (bool, error) { lo := metav1.ListOptions{ LabelSelector: labels.SelectorFromSet(resources.BuildResourceLabels(jenkins)).String(), @@ -65,9 +65,9 @@ func waitForRecreateJenkinsMasterPod(t *testing.T, jenkins *v1alpha1.Jenkins) { t.Log("Jenkins pod has been recreated") } -func waitForJenkinsUserConfigurationToComplete(t *testing.T, jenkins *v1alpha1.Jenkins) { +func waitForJenkinsUserConfigurationToComplete(t *testing.T, jenkins *v1alpha2.Jenkins) { t.Log("Waiting for Jenkins user configuration to complete") - _, err := WaitUntilJenkinsConditionSet(retryInterval, 70, jenkins, func(jenkins *v1alpha1.Jenkins, err error) bool { + _, err := WaitUntilJenkinsConditionSet(retryInterval, 70, jenkins, func(jenkins *v1alpha2.Jenkins, err error) bool { t.Logf("Current Jenkins status: '%+v', error '%s'", jenkins.Status, err) return err == nil && jenkins.Status.UserConfigurationCompletedTime != nil }) @@ -92,8 +92,8 @@ func waitForJenkinsSafeRestart(t *testing.T, jenkinsClient jenkinsclient.Jenkins } // WaitUntilJenkinsConditionSet retries until the specified condition check becomes true for the jenkins CR -func WaitUntilJenkinsConditionSet(retryInterval time.Duration, retries int, jenkins *v1alpha1.Jenkins, checkCondition checkConditionFunc) (*v1alpha1.Jenkins, error) { - jenkinsStatus := &v1alpha1.Jenkins{} +func WaitUntilJenkinsConditionSet(retryInterval time.Duration, retries int, jenkins *v1alpha2.Jenkins, checkCondition checkConditionFunc) (*v1alpha2.Jenkins, error) { + jenkinsStatus := &v1alpha2.Jenkins{} err := wait.Poll(retryInterval, time.Duration(retries)*retryInterval, func() (bool, error) { namespacedName := types.NamespacedName{Namespace: jenkins.Namespace, Name: jenkins.Name} err := framework.Global.Client.Get(goctx.TODO(), namespacedName, jenkinsStatus)