Rename virtuslab.com to jenkins.io
This commit is contained in:
parent
8c1a44bc30
commit
da17e1a011
4
Makefile
4
Makefile
|
|
@ -159,7 +159,7 @@ ifeq ($(ENVIRONMENT),minikube)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@RUNNING_TESTS=1 go test -parallel=1 "./test/e2e/" -tags "$(BUILDTAGS) cgo" -v -timeout 30m \
|
@RUNNING_TESTS=1 go test -parallel=1 "./test/e2e/" -tags "$(BUILDTAGS) cgo" -v -timeout 30m \
|
||||||
-root=$(CURRENT_DIRECTORY) -kubeconfig=$(HOME)/.kube/config -globalMan deploy/crds/virtuslab_v1alpha1_jenkins_crd.yaml -namespacedMan deploy/namespace-init.yaml $(EXTRA_ARGS)
|
-root=$(CURRENT_DIRECTORY) -kubeconfig=$(HOME)/.kube/config -globalMan deploy/crds/jenkinsio_v1alpha1_jenkins_crd.yaml -namespacedMan deploy/namespace-init.yaml $(EXTRA_ARGS)
|
||||||
|
|
||||||
.PHONY: vet
|
.PHONY: vet
|
||||||
vet: ## Verifies `go vet` passes
|
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
|
minikube-run: start-minikube ## Run the operator locally and use minikube as Kubernetes cluster, you can use EXTRA_ARGS
|
||||||
@echo "+ $@"
|
@echo "+ $@"
|
||||||
kubectl config use-context minikube
|
kubectl config use-context minikube
|
||||||
kubectl apply -f deploy/crds/virtuslab_v1alpha1_jenkins_crd.yaml
|
kubectl apply -f deploy/crds/jenkinsio_v1alpha1_jenkins_crd.yaml
|
||||||
@echo "Watching '$(WATCH_NAMESPACE)' namespace"
|
@echo "Watching '$(WATCH_NAMESPACE)' namespace"
|
||||||
build/_output/bin/jenkins-operator $(EXTRA_ARGS)
|
build/_output/bin/jenkins-operator $(EXTRA_ARGS)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: virtuslab.com/v1alpha1
|
apiVersion: jenkins.io/v1alpha1
|
||||||
kind: Jenkins
|
kind: Jenkins
|
||||||
metadata:
|
metadata:
|
||||||
name: example
|
name: example
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
apiVersion: apiextensions.k8s.io/v1beta1
|
apiVersion: apiextensions.k8s.io/v1beta1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
name: jenkins.virtuslab.com
|
name: jenkins.jenkins.io
|
||||||
spec:
|
spec:
|
||||||
group: virtuslab.com
|
group: jenkins.io
|
||||||
names:
|
names:
|
||||||
kind: Jenkins
|
kind: Jenkins
|
||||||
listKind: JenkinsList
|
listKind: JenkinsList
|
||||||
|
|
@ -5,7 +5,7 @@ metadata:
|
||||||
name: jenkins-operator
|
name: jenkins-operator
|
||||||
rules:
|
rules:
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- virtuslab.com
|
- jenkins.io
|
||||||
resources:
|
resources:
|
||||||
- '*'
|
- '*'
|
||||||
verbs:
|
verbs:
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ make build && make minikube-run EXTRA_ARGS='--minikube --local'
|
||||||
Once minikube and **jenkins-operator** are up and running, apply Jenkins custom resource:
|
Once minikube and **jenkins-operator** are up and running, apply Jenkins custom resource:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
kubectl apply -f deploy/crds/virtuslab_v1alpha1_jenkins_cr.yaml
|
kubectl apply -f deploy/crds/jenkinsio_v1alpha1_jenkins_cr.yaml
|
||||||
kubectl get jenkins -o yaml
|
kubectl get jenkins -o yaml
|
||||||
kubectl get po
|
kubectl get po
|
||||||
```
|
```
|
||||||
|
|
@ -63,7 +63,7 @@ To be able to work with the docker daemon on `minikube` machine run the followin
|
||||||
eval $(minikube docker-env)
|
eval $(minikube docker-env)
|
||||||
```
|
```
|
||||||
|
|
||||||
### When `pkg/apis/virtuslab/v1alpha1/jenkins_types.go` has changed
|
### When `pkg/apis/jenkinsio/v1alpha1/jenkins_types.go` has changed
|
||||||
|
|
||||||
Run:
|
Run:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ Once jenkins-operator is up and running let's deploy actual Jenkins instance.
|
||||||
Let's use example below:
|
Let's use example below:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
apiVersion: virtuslab.com/v1alpha1
|
apiVersion: jenkins.io/v1alpha1
|
||||||
kind: Jenkins
|
kind: Jenkins
|
||||||
metadata:
|
metadata:
|
||||||
name: example
|
name: example
|
||||||
|
|
@ -149,7 +149,7 @@ podTemplate(label: label,
|
||||||
Jenkins Seed Jobs are configured using `Jenkins.spec.seedJobs` section from your custom resource manifest:
|
Jenkins Seed Jobs are configured using `Jenkins.spec.seedJobs` section from your custom resource manifest:
|
||||||
|
|
||||||
```
|
```
|
||||||
apiVersion: virtuslab.com/v1alpha1
|
apiVersion: jenkins.io/v1alpha1
|
||||||
kind: Jenkins
|
kind: Jenkins
|
||||||
metadata:
|
metadata:
|
||||||
name: example
|
name: example
|
||||||
|
|
@ -167,7 +167,7 @@ spec:
|
||||||
If your GitHub repository is **private** you have to configure corresponding **privateKey** and Kubernetes Secret:
|
If your GitHub repository is **private** you have to configure corresponding **privateKey** and Kubernetes Secret:
|
||||||
|
|
||||||
```
|
```
|
||||||
apiVersion: virtuslab.com/v1alpha1
|
apiVersion: jenkins.io/v1alpha1
|
||||||
kind: Jenkins
|
kind: Jenkins
|
||||||
metadata:
|
metadata:
|
||||||
name: example
|
name: example
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ To run **jenkins-operator**, you will need:
|
||||||
Install Jenkins Custom Resource Definition:
|
Install Jenkins Custom Resource Definition:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
kubectl apply -f deploy/crds/virtuslab_v1alpha1_jenkins_crd.yaml
|
kubectl apply -f deploy/crds/jenkinsio_v1alpha1_jenkins_crd.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
## Deploy jenkins-operator
|
## Deploy jenkins-operator
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package apis
|
package apis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
// Package v1alpha1 contains API Schema definitions for the jenkins.io v1alpha1 API group
|
||||||
|
// +k8s:deepcopy-gen=package,register
|
||||||
|
// +groupName=jenkins.io
|
||||||
|
package v1alpha1
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
// NOTE: Boilerplate only. Ignore this file.
|
// NOTE: Boilerplate only. Ignore this file.
|
||||||
|
|
||||||
// Package v1alpha1 contains API Schema definitions for the virtuslab v1alpha1 API group
|
// Package v1alpha1 contains API Schema definitions for the jenkins.io v1alpha1 API group
|
||||||
// +k8s:deepcopy-gen=package,register
|
// +k8s:deepcopy-gen=package,register
|
||||||
// +groupName=virtuslab.com
|
// +groupName=jenkins.io
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
@ -17,7 +17,7 @@ const (
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
SchemeGroupVersion = schema.GroupVersion{Group: "virtuslab.com", Version: "v1alpha1"}
|
SchemeGroupVersion = schema.GroupVersion{Group: "jenkins.io", Version: "v1alpha1"}
|
||||||
|
|
||||||
// SchemeBuilder is used to add go types to the GroupVersionKind scheme
|
// SchemeBuilder is used to add go types to the GroupVersionKind scheme
|
||||||
SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion}
|
SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion}
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
// Package v1alpha1 contains API Schema definitions for the virtuslab v1alpha1 API group
|
|
||||||
// +k8s:deepcopy-gen=package,register
|
|
||||||
// +groupName=virtuslab.com
|
|
||||||
package v1alpha1
|
|
||||||
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins"
|
||||||
|
|
@ -21,7 +21,7 @@ import (
|
||||||
type AmazonS3Backup struct{}
|
type AmazonS3Backup struct{}
|
||||||
|
|
||||||
// GetRestoreJobXML returns Jenkins restore backup job config XML
|
// GetRestoreJobXML returns Jenkins restore backup job config XML
|
||||||
func (b *AmazonS3Backup) GetRestoreJobXML(jenkins virtuslabv1alpha1.Jenkins) (string, error) {
|
func (b *AmazonS3Backup) GetRestoreJobXML(jenkins v1alpha1.Jenkins) (string, error) {
|
||||||
return `<?xml version='1.1' encoding='UTF-8'?>
|
return `<?xml version='1.1' encoding='UTF-8'?>
|
||||||
<flow-definition plugin="workflow-job@2.31">
|
<flow-definition plugin="workflow-job@2.31">
|
||||||
<actions/>
|
<actions/>
|
||||||
|
|
@ -106,7 +106,7 @@ node('master') {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBackupJobXML returns Jenkins backup job config XML
|
// GetBackupJobXML returns Jenkins backup job config XML
|
||||||
func (b *AmazonS3Backup) GetBackupJobXML(jenkins virtuslabv1alpha1.Jenkins) (string, error) {
|
func (b *AmazonS3Backup) GetBackupJobXML(jenkins v1alpha1.Jenkins) (string, error) {
|
||||||
return `<?xml version='1.1' encoding='UTF-8'?>
|
return `<?xml version='1.1' encoding='UTF-8'?>
|
||||||
<flow-definition plugin="workflow-job@2.31">
|
<flow-definition plugin="workflow-job@2.31">
|
||||||
<actions/>
|
<actions/>
|
||||||
|
|
@ -188,7 +188,7 @@ node('master') {
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsConfigurationValidForBasePhase validates if user provided valid configuration of backup for base phase
|
// IsConfigurationValidForBasePhase validates if user provided valid configuration of backup for base phase
|
||||||
func (b *AmazonS3Backup) IsConfigurationValidForBasePhase(jenkins virtuslabv1alpha1.Jenkins, logger logr.Logger) bool {
|
func (b *AmazonS3Backup) IsConfigurationValidForBasePhase(jenkins v1alpha1.Jenkins, logger logr.Logger) bool {
|
||||||
if len(jenkins.Spec.BackupAmazonS3.BucketName) == 0 {
|
if len(jenkins.Spec.BackupAmazonS3.BucketName) == 0 {
|
||||||
logger.V(log.VWarn).Info("Bucket name not set in 'spec.backupAmazonS3.bucketName'")
|
logger.V(log.VWarn).Info("Bucket name not set in 'spec.backupAmazonS3.bucketName'")
|
||||||
return false
|
return false
|
||||||
|
|
@ -208,7 +208,7 @@ func (b *AmazonS3Backup) IsConfigurationValidForBasePhase(jenkins virtuslabv1alp
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsConfigurationValidForUserPhase validates if user provided valid configuration of backup for user phase
|
// IsConfigurationValidForUserPhase validates if user provided valid configuration of backup for user phase
|
||||||
func (b *AmazonS3Backup) IsConfigurationValidForUserPhase(k8sClient k8s.Client, jenkins virtuslabv1alpha1.Jenkins, logger logr.Logger) (bool, error) {
|
func (b *AmazonS3Backup) IsConfigurationValidForUserPhase(k8sClient k8s.Client, jenkins v1alpha1.Jenkins, logger logr.Logger) (bool, error) {
|
||||||
backupSecretName := resources.GetBackupCredentialsSecretName(&jenkins)
|
backupSecretName := resources.GetBackupCredentialsSecretName(&jenkins)
|
||||||
backupSecret := &corev1.Secret{}
|
backupSecret := &corev1.Secret{}
|
||||||
err := k8sClient.Get(context.TODO(), types.NamespacedName{Namespace: jenkins.Namespace, Name: backupSecretName}, backupSecret)
|
err := k8sClient.Get(context.TODO(), types.NamespacedName{Namespace: jenkins.Namespace, Name: backupSecretName}, backupSecret)
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
@ -17,14 +17,14 @@ import (
|
||||||
func TestAmazonS3Backup_IsConfigurationValidForBasePhase(t *testing.T) {
|
func TestAmazonS3Backup_IsConfigurationValidForBasePhase(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
jenkins virtuslabv1alpha1.Jenkins
|
jenkins v1alpha1.Jenkins
|
||||||
want bool
|
want bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "happy",
|
name: "happy",
|
||||||
jenkins: virtuslabv1alpha1.Jenkins{
|
jenkins: v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
BackupAmazonS3: virtuslabv1alpha1.JenkinsBackupAmazonS3{
|
BackupAmazonS3: v1alpha1.JenkinsBackupAmazonS3{
|
||||||
BucketName: "some-value",
|
BucketName: "some-value",
|
||||||
BucketPath: "some-value",
|
BucketPath: "some-value",
|
||||||
Region: "some-value",
|
Region: "some-value",
|
||||||
|
|
@ -35,9 +35,9 @@ func TestAmazonS3Backup_IsConfigurationValidForBasePhase(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "fail, no bucket name",
|
name: "fail, no bucket name",
|
||||||
jenkins: virtuslabv1alpha1.Jenkins{
|
jenkins: v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
BackupAmazonS3: virtuslabv1alpha1.JenkinsBackupAmazonS3{
|
BackupAmazonS3: v1alpha1.JenkinsBackupAmazonS3{
|
||||||
BucketName: "",
|
BucketName: "",
|
||||||
BucketPath: "some-value",
|
BucketPath: "some-value",
|
||||||
Region: "some-value",
|
Region: "some-value",
|
||||||
|
|
@ -48,9 +48,9 @@ func TestAmazonS3Backup_IsConfigurationValidForBasePhase(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "fail, no bucket path",
|
name: "fail, no bucket path",
|
||||||
jenkins: virtuslabv1alpha1.Jenkins{
|
jenkins: v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
BackupAmazonS3: virtuslabv1alpha1.JenkinsBackupAmazonS3{
|
BackupAmazonS3: v1alpha1.JenkinsBackupAmazonS3{
|
||||||
BucketName: "some-value",
|
BucketName: "some-value",
|
||||||
BucketPath: "",
|
BucketPath: "",
|
||||||
Region: "some-value",
|
Region: "some-value",
|
||||||
|
|
@ -61,9 +61,9 @@ func TestAmazonS3Backup_IsConfigurationValidForBasePhase(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "fail, no region",
|
name: "fail, no region",
|
||||||
jenkins: virtuslabv1alpha1.Jenkins{
|
jenkins: v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
BackupAmazonS3: virtuslabv1alpha1.JenkinsBackupAmazonS3{
|
BackupAmazonS3: v1alpha1.JenkinsBackupAmazonS3{
|
||||||
BucketName: "some-value",
|
BucketName: "some-value",
|
||||||
BucketPath: "some-value",
|
BucketPath: "some-value",
|
||||||
Region: "",
|
Region: "",
|
||||||
|
|
@ -85,14 +85,14 @@ func TestAmazonS3Backup_IsConfigurationValidForBasePhase(t *testing.T) {
|
||||||
func TestAmazonS3Backup_IsConfigurationValidForUserPhase(t *testing.T) {
|
func TestAmazonS3Backup_IsConfigurationValidForUserPhase(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
jenkins *virtuslabv1alpha1.Jenkins
|
jenkins *v1alpha1.Jenkins
|
||||||
secret *corev1.Secret
|
secret *corev1.Secret
|
||||||
want bool
|
want bool
|
||||||
wantErr bool
|
wantErr bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "happy",
|
name: "happy",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
||||||
},
|
},
|
||||||
secret: &corev1.Secret{
|
secret: &corev1.Secret{
|
||||||
|
|
@ -107,7 +107,7 @@ func TestAmazonS3Backup_IsConfigurationValidForUserPhase(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "fail, no secret",
|
name: "fail, no secret",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
||||||
},
|
},
|
||||||
want: false,
|
want: false,
|
||||||
|
|
@ -115,7 +115,7 @@ func TestAmazonS3Backup_IsConfigurationValidForUserPhase(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "fail, no secret key in secret",
|
name: "fail, no secret key in secret",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
||||||
},
|
},
|
||||||
secret: &corev1.Secret{
|
secret: &corev1.Secret{
|
||||||
|
|
@ -130,7 +130,7 @@ func TestAmazonS3Backup_IsConfigurationValidForUserPhase(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "fail, no access key in secret",
|
name: "fail, no access key in secret",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
||||||
},
|
},
|
||||||
secret: &corev1.Secret{
|
secret: &corev1.Secret{
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/backup/aws"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/backup/aws"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/backup/nobackup"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/backup/nobackup"
|
||||||
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
||||||
|
|
@ -26,23 +26,23 @@ const (
|
||||||
|
|
||||||
// Provider defines API of backup providers
|
// Provider defines API of backup providers
|
||||||
type Provider interface {
|
type Provider interface {
|
||||||
GetRestoreJobXML(jenkins virtuslabv1alpha1.Jenkins) (string, error)
|
GetRestoreJobXML(jenkins v1alpha1.Jenkins) (string, error)
|
||||||
GetBackupJobXML(jenkins virtuslabv1alpha1.Jenkins) (string, error)
|
GetBackupJobXML(jenkins v1alpha1.Jenkins) (string, error)
|
||||||
IsConfigurationValidForBasePhase(jenkins virtuslabv1alpha1.Jenkins, logger logr.Logger) bool
|
IsConfigurationValidForBasePhase(jenkins v1alpha1.Jenkins, logger logr.Logger) bool
|
||||||
IsConfigurationValidForUserPhase(k8sClient k8s.Client, jenkins virtuslabv1alpha1.Jenkins, logger logr.Logger) (bool, error)
|
IsConfigurationValidForUserPhase(k8sClient k8s.Client, jenkins v1alpha1.Jenkins, logger logr.Logger) (bool, error)
|
||||||
GetRequiredPlugins() map[string][]plugins.Plugin
|
GetRequiredPlugins() map[string][]plugins.Plugin
|
||||||
}
|
}
|
||||||
|
|
||||||
// Backup defines backup manager which is responsible of backup of jobs history
|
// Backup defines backup manager which is responsible of backup of jobs history
|
||||||
type Backup struct {
|
type Backup struct {
|
||||||
jenkins *virtuslabv1alpha1.Jenkins
|
jenkins *v1alpha1.Jenkins
|
||||||
k8sClient k8s.Client
|
k8sClient k8s.Client
|
||||||
logger logr.Logger
|
logger logr.Logger
|
||||||
jenkinsClient jenkinsclient.Jenkins
|
jenkinsClient jenkinsclient.Jenkins
|
||||||
}
|
}
|
||||||
|
|
||||||
// New returns instance of backup manager
|
// New returns instance of backup manager
|
||||||
func New(jenkins *virtuslabv1alpha1.Jenkins, k8sClient k8s.Client, logger logr.Logger, jenkinsClient jenkinsclient.Jenkins) *Backup {
|
func New(jenkins *v1alpha1.Jenkins, k8sClient k8s.Client, logger logr.Logger, jenkinsClient jenkinsclient.Jenkins) *Backup {
|
||||||
return &Backup{jenkins: jenkins, k8sClient: k8sClient, logger: logger, jenkinsClient: jenkinsClient}
|
return &Backup{jenkins: jenkins, k8sClient: k8sClient, logger: logger, jenkinsClient: jenkinsClient}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -127,11 +127,11 @@ func (b *Backup) EnsureBackupJob() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBackupProvider returns backup provider by type
|
// GetBackupProvider returns backup provider by type
|
||||||
func GetBackupProvider(backupType virtuslabv1alpha1.JenkinsBackup) (Provider, error) {
|
func GetBackupProvider(backupType v1alpha1.JenkinsBackup) (Provider, error) {
|
||||||
switch backupType {
|
switch backupType {
|
||||||
case virtuslabv1alpha1.JenkinsBackupTypeNoBackup:
|
case v1alpha1.JenkinsBackupTypeNoBackup:
|
||||||
return &nobackup.NoBackup{}, nil
|
return &nobackup.NoBackup{}, nil
|
||||||
case virtuslabv1alpha1.JenkinsBackupTypeAmazonS3:
|
case v1alpha1.JenkinsBackupTypeAmazonS3:
|
||||||
return &aws.AmazonS3Backup{}, nil
|
return &aws.AmazonS3Backup{}, nil
|
||||||
default:
|
default:
|
||||||
return nil, errors.Errorf("Invalid BackupManager type '%s'", backupType)
|
return nil, errors.Errorf("Invalid BackupManager type '%s'", backupType)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package nobackup
|
package nobackup
|
||||||
|
|
||||||
import (
|
import (
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins"
|
||||||
|
|
||||||
"github.com/go-logr/logr"
|
"github.com/go-logr/logr"
|
||||||
|
|
@ -27,22 +27,22 @@ var emptyJob = `<?xml version='1.1' encoding='UTF-8'?>
|
||||||
`
|
`
|
||||||
|
|
||||||
// GetRestoreJobXML returns Jenkins restore backup job config XML
|
// GetRestoreJobXML returns Jenkins restore backup job config XML
|
||||||
func (b *NoBackup) GetRestoreJobXML(jenkins virtuslabv1alpha1.Jenkins) (string, error) {
|
func (b *NoBackup) GetRestoreJobXML(jenkins v1alpha1.Jenkins) (string, error) {
|
||||||
return emptyJob, nil
|
return emptyJob, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBackupJobXML returns Jenkins backup job config XML
|
// GetBackupJobXML returns Jenkins backup job config XML
|
||||||
func (b *NoBackup) GetBackupJobXML(jenkins virtuslabv1alpha1.Jenkins) (string, error) {
|
func (b *NoBackup) GetBackupJobXML(jenkins v1alpha1.Jenkins) (string, error) {
|
||||||
return emptyJob, nil
|
return emptyJob, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsConfigurationValidForBasePhase validates if user provided valid configuration of backup for base phase
|
// IsConfigurationValidForBasePhase validates if user provided valid configuration of backup for base phase
|
||||||
func (b *NoBackup) IsConfigurationValidForBasePhase(jenkins virtuslabv1alpha1.Jenkins, logger logr.Logger) bool {
|
func (b *NoBackup) IsConfigurationValidForBasePhase(jenkins v1alpha1.Jenkins, logger logr.Logger) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsConfigurationValidForUserPhase validates if user provided valid configuration of backup for user phase
|
// IsConfigurationValidForUserPhase validates if user provided valid configuration of backup for user phase
|
||||||
func (b *NoBackup) IsConfigurationValidForUserPhase(k8sClient k8s.Client, jenkins virtuslabv1alpha1.Jenkins, logger logr.Logger) (bool, error) {
|
func (b *NoBackup) IsConfigurationValidForUserPhase(k8sClient k8s.Client, jenkins v1alpha1.Jenkins, logger logr.Logger) (bool, error) {
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/backup"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/backup"
|
||||||
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
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/base/resources"
|
||||||
|
|
@ -36,13 +36,13 @@ type ReconcileJenkinsBaseConfiguration struct {
|
||||||
k8sClient client.Client
|
k8sClient client.Client
|
||||||
scheme *runtime.Scheme
|
scheme *runtime.Scheme
|
||||||
logger logr.Logger
|
logger logr.Logger
|
||||||
jenkins *virtuslabv1alpha1.Jenkins
|
jenkins *v1alpha1.Jenkins
|
||||||
local, minikube bool
|
local, minikube bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// New create structure which takes care of base configuration
|
// New create structure which takes care of base configuration
|
||||||
func New(client client.Client, scheme *runtime.Scheme, logger logr.Logger,
|
func New(client client.Client, scheme *runtime.Scheme, logger logr.Logger,
|
||||||
jenkins *virtuslabv1alpha1.Jenkins, local, minikube bool) *ReconcileJenkinsBaseConfiguration {
|
jenkins *v1alpha1.Jenkins, local, minikube bool) *ReconcileJenkinsBaseConfiguration {
|
||||||
return &ReconcileJenkinsBaseConfiguration{
|
return &ReconcileJenkinsBaseConfiguration{
|
||||||
k8sClient: client,
|
k8sClient: client,
|
||||||
scheme: scheme,
|
scheme: scheme,
|
||||||
|
|
@ -305,7 +305,7 @@ func (r *ReconcileJenkinsBaseConfiguration) ensureJenkinsMasterPod(meta metav1.O
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return reconcile.Result{}, err
|
return reconcile.Result{}, err
|
||||||
}
|
}
|
||||||
r.jenkins.Status = virtuslabv1alpha1.JenkinsStatus{}
|
r.jenkins.Status = v1alpha1.JenkinsStatus{}
|
||||||
err = r.updateResource(r.jenkins)
|
err = r.updateResource(r.jenkins)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return reconcile.Result{}, err
|
return reconcile.Result{}, err
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
@ -17,16 +17,16 @@ import (
|
||||||
func TestReconcileJenkinsBaseConfiguration_ensurePluginsRequiredByAllBackupProviders(t *testing.T) {
|
func TestReconcileJenkinsBaseConfiguration_ensurePluginsRequiredByAllBackupProviders(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
jenkins *virtuslabv1alpha1.Jenkins
|
jenkins *v1alpha1.Jenkins
|
||||||
requiredPlugins map[string][]plugins.Plugin
|
requiredPlugins map[string][]plugins.Plugin
|
||||||
want reconcile.Result
|
want reconcile.Result
|
||||||
wantErr bool
|
wantErr bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "happy, no required plugins",
|
name: "happy, no required plugins",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Master: virtuslabv1alpha1.JenkinsMaster{
|
Master: v1alpha1.JenkinsMaster{
|
||||||
Plugins: map[string][]string{
|
Plugins: map[string][]string{
|
||||||
"first-plugin:0.0.1": {"second-plugin:0.0.1"},
|
"first-plugin:0.0.1": {"second-plugin:0.0.1"},
|
||||||
},
|
},
|
||||||
|
|
@ -38,9 +38,9 @@ func TestReconcileJenkinsBaseConfiguration_ensurePluginsRequiredByAllBackupProvi
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "happy, required plugins are set",
|
name: "happy, required plugins are set",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Master: virtuslabv1alpha1.JenkinsMaster{
|
Master: v1alpha1.JenkinsMaster{
|
||||||
Plugins: map[string][]string{
|
Plugins: map[string][]string{
|
||||||
"first-plugin:0.0.1": {"second-plugin:0.0.1"},
|
"first-plugin:0.0.1": {"second-plugin:0.0.1"},
|
||||||
},
|
},
|
||||||
|
|
@ -55,9 +55,9 @@ func TestReconcileJenkinsBaseConfiguration_ensurePluginsRequiredByAllBackupProvi
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "happy, jenkins CR must be updated",
|
name: "happy, jenkins CR must be updated",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Master: virtuslabv1alpha1.JenkinsMaster{
|
Master: v1alpha1.JenkinsMaster{
|
||||||
Plugins: map[string][]string{
|
Plugins: map[string][]string{
|
||||||
"first-plugin:0.0.1": {"second-plugin:0.0.1"},
|
"first-plugin:0.0.1": {"second-plugin:0.0.1"},
|
||||||
},
|
},
|
||||||
|
|
@ -73,9 +73,9 @@ func TestReconcileJenkinsBaseConfiguration_ensurePluginsRequiredByAllBackupProvi
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "happy, jenkins CR must be updated",
|
name: "happy, jenkins CR must be updated",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Master: virtuslabv1alpha1.JenkinsMaster{
|
Master: v1alpha1.JenkinsMaster{
|
||||||
Plugins: map[string][]string{
|
Plugins: map[string][]string{
|
||||||
"first-plugin:0.0.1": {"second-plugin:0.0.1"},
|
"first-plugin:0.0.1": {"second-plugin:0.0.1"},
|
||||||
},
|
},
|
||||||
|
|
@ -92,7 +92,7 @@ func TestReconcileJenkinsBaseConfiguration_ensurePluginsRequiredByAllBackupProvi
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
err := virtuslabv1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme)
|
err := v1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
r := &ReconcileJenkinsBaseConfiguration{
|
r := &ReconcileJenkinsBaseConfiguration{
|
||||||
k8sClient: fake.NewFakeClient(),
|
k8sClient: fake.NewFakeClient(),
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package resources
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
|
@ -11,12 +11,12 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetBackupCredentialsSecretName returns name of Kubernetes secret used to store backup credentials
|
// GetBackupCredentialsSecretName returns name of Kubernetes secret used to store backup credentials
|
||||||
func GetBackupCredentialsSecretName(jenkins *virtuslabv1alpha1.Jenkins) string {
|
func GetBackupCredentialsSecretName(jenkins *v1alpha1.Jenkins) string {
|
||||||
return fmt.Sprintf("%s-backup-credentials-%s", constants.OperatorName, jenkins.Name)
|
return fmt.Sprintf("%s-backup-credentials-%s", constants.OperatorName, jenkins.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewBackupCredentialsSecret builds the Kubernetes secret used to store backup credentials
|
// NewBackupCredentialsSecret builds the Kubernetes secret used to store backup credentials
|
||||||
func NewBackupCredentialsSecret(jenkins *virtuslabv1alpha1.Jenkins) *corev1.Secret {
|
func NewBackupCredentialsSecret(jenkins *v1alpha1.Jenkins) *corev1.Secret {
|
||||||
meta := metav1.ObjectMeta{
|
meta := metav1.ObjectMeta{
|
||||||
Name: GetBackupCredentialsSecretName(jenkins),
|
Name: GetBackupCredentialsSecretName(jenkins),
|
||||||
Namespace: jenkins.ObjectMeta.Namespace,
|
Namespace: jenkins.ObjectMeta.Namespace,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package resources
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
|
@ -162,12 +162,12 @@ jenkins.save()
|
||||||
`
|
`
|
||||||
|
|
||||||
// GetBaseConfigurationConfigMapName returns name of Kubernetes config map used to base configuration
|
// GetBaseConfigurationConfigMapName returns name of Kubernetes config map used to base configuration
|
||||||
func GetBaseConfigurationConfigMapName(jenkins *virtuslabv1alpha1.Jenkins) string {
|
func GetBaseConfigurationConfigMapName(jenkins *v1alpha1.Jenkins) string {
|
||||||
return fmt.Sprintf("%s-base-configuration-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
return fmt.Sprintf("%s-base-configuration-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewBaseConfigurationConfigMap builds Kubernetes config map used to base configuration
|
// NewBaseConfigurationConfigMap builds Kubernetes config map used to base configuration
|
||||||
func NewBaseConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *virtuslabv1alpha1.Jenkins) (*corev1.ConfigMap, error) {
|
func NewBaseConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha1.Jenkins) (*corev1.ConfigMap, error) {
|
||||||
meta.Name = GetBaseConfigurationConfigMapName(jenkins)
|
meta.Name = GetBaseConfigurationConfigMapName(jenkins)
|
||||||
|
|
||||||
return &corev1.ConfigMap{
|
return &corev1.ConfigMap{
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
@ -50,12 +50,12 @@ func buildCreateJenkinsOperatorUserGroovyScript() (*string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetInitConfigurationConfigMapName returns name of Kubernetes config map used to init configuration
|
// GetInitConfigurationConfigMapName returns name of Kubernetes config map used to init configuration
|
||||||
func GetInitConfigurationConfigMapName(jenkins *virtuslabv1alpha1.Jenkins) string {
|
func GetInitConfigurationConfigMapName(jenkins *v1alpha1.Jenkins) string {
|
||||||
return fmt.Sprintf("%s-init-configuration-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
return fmt.Sprintf("%s-init-configuration-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewInitConfigurationConfigMap builds Kubernetes config map used to init configuration
|
// NewInitConfigurationConfigMap builds Kubernetes config map used to init configuration
|
||||||
func NewInitConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *virtuslabv1alpha1.Jenkins) (*corev1.ConfigMap, error) {
|
func NewInitConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha1.Jenkins) (*corev1.ConfigMap, error) {
|
||||||
meta.Name = GetInitConfigurationConfigMapName(jenkins)
|
meta.Name = GetInitConfigurationConfigMapName(jenkins)
|
||||||
|
|
||||||
createJenkinsOperatorUserGroovy, err := buildCreateJenkinsOperatorUserGroovyScript()
|
createJenkinsOperatorUserGroovy, err := buildCreateJenkinsOperatorUserGroovyScript()
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,14 @@ package resources
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewResourceObjectMeta builds ObjectMeta for all Kubernetes resources created by operator
|
// NewResourceObjectMeta builds ObjectMeta for all Kubernetes resources created by operator
|
||||||
func NewResourceObjectMeta(jenkins *virtuslabv1alpha1.Jenkins) metav1.ObjectMeta {
|
func NewResourceObjectMeta(jenkins *v1alpha1.Jenkins) metav1.ObjectMeta {
|
||||||
return metav1.ObjectMeta{
|
return metav1.ObjectMeta{
|
||||||
Name: GetResourceName(jenkins),
|
Name: GetResourceName(jenkins),
|
||||||
Namespace: jenkins.ObjectMeta.Namespace,
|
Namespace: jenkins.ObjectMeta.Namespace,
|
||||||
|
|
@ -19,7 +19,7 @@ func NewResourceObjectMeta(jenkins *virtuslabv1alpha1.Jenkins) metav1.ObjectMeta
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildResourceLabels returns labels for all Kubernetes resources created by operator
|
// BuildResourceLabels returns labels for all Kubernetes resources created by operator
|
||||||
func BuildResourceLabels(jenkins *virtuslabv1alpha1.Jenkins) map[string]string {
|
func BuildResourceLabels(jenkins *v1alpha1.Jenkins) map[string]string {
|
||||||
return map[string]string{
|
return map[string]string{
|
||||||
constants.LabelAppKey: constants.LabelAppValue,
|
constants.LabelAppKey: constants.LabelAppValue,
|
||||||
constants.LabelJenkinsCRKey: jenkins.Name,
|
constants.LabelJenkinsCRKey: jenkins.Name,
|
||||||
|
|
@ -29,7 +29,7 @@ func BuildResourceLabels(jenkins *virtuslabv1alpha1.Jenkins) map[string]string {
|
||||||
// BuildLabelsForWatchedResources returns labels for Kubernetes resources which operator want to watch
|
// 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
|
// resources with that labels should not be deleted after Jenkins CR deletion, to prevent this situation don't set
|
||||||
// any owner
|
// any owner
|
||||||
func BuildLabelsForWatchedResources(jenkins *virtuslabv1alpha1.Jenkins) map[string]string {
|
func BuildLabelsForWatchedResources(jenkins *v1alpha1.Jenkins) map[string]string {
|
||||||
return map[string]string{
|
return map[string]string{
|
||||||
constants.LabelAppKey: constants.LabelAppValue,
|
constants.LabelAppKey: constants.LabelAppValue,
|
||||||
constants.LabelJenkinsCRKey: jenkins.Name,
|
constants.LabelJenkinsCRKey: jenkins.Name,
|
||||||
|
|
@ -38,6 +38,6 @@ func BuildLabelsForWatchedResources(jenkins *virtuslabv1alpha1.Jenkins) map[stri
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetResourceName returns name of Kubernetes resource base on Jenkins CR
|
// GetResourceName returns name of Kubernetes resource base on Jenkins CR
|
||||||
func GetResourceName(jenkins *virtuslabv1alpha1.Jenkins) string {
|
func GetResourceName(jenkins *v1alpha1.Jenkins) string {
|
||||||
return fmt.Sprintf("%s-%s", constants.LabelAppValue, jenkins.ObjectMeta.Name)
|
return fmt.Sprintf("%s-%s", constants.LabelAppValue, jenkins.ObjectMeta.Name)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
@ -32,13 +32,13 @@ func buildSecretTypeMeta() metav1.TypeMeta {
|
||||||
|
|
||||||
// GetOperatorCredentialsSecretName returns name of Kubernetes secret used to store jenkins operator credentials
|
// GetOperatorCredentialsSecretName returns name of Kubernetes secret used to store jenkins operator credentials
|
||||||
// to allow calls to Jenkins API
|
// to allow calls to Jenkins API
|
||||||
func GetOperatorCredentialsSecretName(jenkins *virtuslabv1alpha1.Jenkins) string {
|
func GetOperatorCredentialsSecretName(jenkins *v1alpha1.Jenkins) string {
|
||||||
return fmt.Sprintf("%s-credentials-%s", constants.OperatorName, jenkins.Name)
|
return fmt.Sprintf("%s-credentials-%s", constants.OperatorName, jenkins.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewOperatorCredentialsSecret builds the Kubernetes secret used to store jenkins operator credentials
|
// NewOperatorCredentialsSecret builds the Kubernetes secret used to store jenkins operator credentials
|
||||||
// to allow calls to Jenkins API
|
// to allow calls to Jenkins API
|
||||||
func NewOperatorCredentialsSecret(meta metav1.ObjectMeta, jenkins *virtuslabv1alpha1.Jenkins) *corev1.Secret {
|
func NewOperatorCredentialsSecret(meta metav1.ObjectMeta, jenkins *v1alpha1.Jenkins) *corev1.Secret {
|
||||||
meta.Name = GetOperatorCredentialsSecretName(jenkins)
|
meta.Name = GetOperatorCredentialsSecretName(jenkins)
|
||||||
return &corev1.Secret{
|
return &corev1.Secret{
|
||||||
TypeMeta: buildSecretTypeMeta(),
|
TypeMeta: buildSecretTypeMeta(),
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ package resources
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
@ -58,7 +58,7 @@ func buildPodTypeMeta() metav1.TypeMeta {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewJenkinsMasterPod builds Jenkins Master Kubernetes Pod resource
|
// NewJenkinsMasterPod builds Jenkins Master Kubernetes Pod resource
|
||||||
func NewJenkinsMasterPod(objectMeta metav1.ObjectMeta, jenkins *virtuslabv1alpha1.Jenkins) *corev1.Pod {
|
func NewJenkinsMasterPod(objectMeta metav1.ObjectMeta, jenkins *v1alpha1.Jenkins) *corev1.Pod {
|
||||||
initialDelaySeconds := int32(30)
|
initialDelaySeconds := int32(30)
|
||||||
timeoutSeconds := int32(5)
|
timeoutSeconds := int32(5)
|
||||||
failureThreshold := int32(12)
|
failureThreshold := int32(12)
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
|
@ -358,12 +358,12 @@ func buildInitBashScript(pluginsToInstall map[string][]string) (*string, error)
|
||||||
return &output, nil
|
return &output, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getScriptsConfigMapName(jenkins *virtuslabv1alpha1.Jenkins) string {
|
func getScriptsConfigMapName(jenkins *v1alpha1.Jenkins) string {
|
||||||
return fmt.Sprintf("%s-scripts-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
return fmt.Sprintf("%s-scripts-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewScriptsConfigMap builds Kubernetes config map used to store scripts
|
// NewScriptsConfigMap builds Kubernetes config map used to store scripts
|
||||||
func NewScriptsConfigMap(meta metav1.ObjectMeta, jenkins *virtuslabv1alpha1.Jenkins) (*corev1.ConfigMap, error) {
|
func NewScriptsConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha1.Jenkins) (*corev1.ConfigMap, error) {
|
||||||
meta.Name = getScriptsConfigMapName(jenkins)
|
meta.Name = getScriptsConfigMapName(jenkins)
|
||||||
|
|
||||||
initBashScript, err := buildInitBashScript(jenkins.Spec.Master.Plugins)
|
initBashScript, err := buildInitBashScript(jenkins.Spec.Master.Plugins)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package resources
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
|
@ -33,12 +33,12 @@ jenkins.save()
|
||||||
`
|
`
|
||||||
|
|
||||||
// GetUserConfigurationConfigMapName returns name of Kubernetes config map used to user configuration
|
// GetUserConfigurationConfigMapName returns name of Kubernetes config map used to user configuration
|
||||||
func GetUserConfigurationConfigMapName(jenkins *virtuslabv1alpha1.Jenkins) string {
|
func GetUserConfigurationConfigMapName(jenkins *v1alpha1.Jenkins) string {
|
||||||
return fmt.Sprintf("%s-user-configuration-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
return fmt.Sprintf("%s-user-configuration-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewUserConfigurationConfigMap builds Kubernetes config map used to user configuration
|
// NewUserConfigurationConfigMap builds Kubernetes config map used to user configuration
|
||||||
func NewUserConfigurationConfigMap(jenkins *virtuslabv1alpha1.Jenkins) *corev1.ConfigMap {
|
func NewUserConfigurationConfigMap(jenkins *v1alpha1.Jenkins) *corev1.ConfigMap {
|
||||||
meta := metav1.ObjectMeta{
|
meta := metav1.ObjectMeta{
|
||||||
Name: GetUserConfigurationConfigMapName(jenkins),
|
Name: GetUserConfigurationConfigMapName(jenkins),
|
||||||
Namespace: jenkins.ObjectMeta.Namespace,
|
Namespace: jenkins.ObjectMeta.Namespace,
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/backup"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/backup"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources"
|
"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/controller/jenkins/plugins"
|
||||||
|
|
@ -22,7 +22,7 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
// Validate validates Jenkins CR Spec.master section
|
// Validate validates Jenkins CR Spec.master section
|
||||||
func (r *ReconcileJenkinsBaseConfiguration) Validate(jenkins *virtuslabv1alpha1.Jenkins) (bool, error) {
|
func (r *ReconcileJenkinsBaseConfiguration) Validate(jenkins *v1alpha1.Jenkins) (bool, error) {
|
||||||
if jenkins.Spec.Master.Image == "" {
|
if jenkins.Spec.Master.Image == "" {
|
||||||
r.logger.V(log.VWarn).Info("Image not set")
|
r.logger.V(log.VWarn).Info("Image not set")
|
||||||
return false, nil
|
return false, nil
|
||||||
|
|
@ -92,7 +92,7 @@ func (r *ReconcileJenkinsBaseConfiguration) verifyBackup() (bool, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
valid := false
|
valid := false
|
||||||
for _, backupType := range virtuslabv1alpha1.AllowedJenkinsBackups {
|
for _, backupType := range v1alpha1.AllowedJenkinsBackups {
|
||||||
if r.jenkins.Spec.Backup == backupType {
|
if r.jenkins.Spec.Backup == backupType {
|
||||||
valid = true
|
valid = true
|
||||||
}
|
}
|
||||||
|
|
@ -100,11 +100,11 @@ func (r *ReconcileJenkinsBaseConfiguration) verifyBackup() (bool, error) {
|
||||||
|
|
||||||
if !valid {
|
if !valid {
|
||||||
r.logger.V(log.VWarn).Info(fmt.Sprintf("Invalid backup strategy '%s'", r.jenkins.Spec.Backup))
|
r.logger.V(log.VWarn).Info(fmt.Sprintf("Invalid backup strategy '%s'", r.jenkins.Spec.Backup))
|
||||||
r.logger.V(log.VWarn).Info(fmt.Sprintf("Allowed backups '%+v'", virtuslabv1alpha1.AllowedJenkinsBackups))
|
r.logger.V(log.VWarn).Info(fmt.Sprintf("Allowed backups '%+v'", v1alpha1.AllowedJenkinsBackups))
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.jenkins.Spec.Backup == virtuslabv1alpha1.JenkinsBackupTypeNoBackup {
|
if r.jenkins.Spec.Backup == v1alpha1.JenkinsBackupTypeNoBackup {
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
|
@ -66,17 +66,17 @@ func TestValidatePlugins(t *testing.T) {
|
||||||
func TestReconcileJenkinsBaseConfiguration_verifyBackup(t *testing.T) {
|
func TestReconcileJenkinsBaseConfiguration_verifyBackup(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
jenkins *virtuslabv1alpha1.Jenkins
|
jenkins *v1alpha1.Jenkins
|
||||||
secret *corev1.Secret
|
secret *corev1.Secret
|
||||||
want bool
|
want bool
|
||||||
wantErr bool
|
wantErr bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "happy, no backup",
|
name: "happy, no backup",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Backup: virtuslabv1alpha1.JenkinsBackupTypeNoBackup,
|
Backup: v1alpha1.JenkinsBackupTypeNoBackup,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
want: true,
|
want: true,
|
||||||
|
|
@ -84,10 +84,10 @@ func TestReconcileJenkinsBaseConfiguration_verifyBackup(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "happy",
|
name: "happy",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Backup: virtuslabv1alpha1.JenkinsBackupTypeAmazonS3,
|
Backup: v1alpha1.JenkinsBackupTypeAmazonS3,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
secret: &corev1.Secret{
|
secret: &corev1.Secret{
|
||||||
|
|
@ -98,10 +98,10 @@ func TestReconcileJenkinsBaseConfiguration_verifyBackup(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "fail, no secret",
|
name: "fail, no secret",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Backup: virtuslabv1alpha1.JenkinsBackupTypeAmazonS3,
|
Backup: v1alpha1.JenkinsBackupTypeAmazonS3,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
want: false,
|
want: false,
|
||||||
|
|
@ -109,9 +109,9 @@ func TestReconcileJenkinsBaseConfiguration_verifyBackup(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "fail, empty backup type",
|
name: "fail, empty backup type",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
ObjectMeta: metav1.ObjectMeta{Namespace: "namespace-name", Name: "jenkins-cr-name"},
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Backup: "",
|
Backup: "",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/backup"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/backup"
|
||||||
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
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/base/resources"
|
||||||
|
|
@ -25,12 +25,12 @@ type ReconcileUserConfiguration struct {
|
||||||
k8sClient k8s.Client
|
k8sClient k8s.Client
|
||||||
jenkinsClient jenkinsclient.Jenkins
|
jenkinsClient jenkinsclient.Jenkins
|
||||||
logger logr.Logger
|
logger logr.Logger
|
||||||
jenkins *virtuslabv1alpha1.Jenkins
|
jenkins *v1alpha1.Jenkins
|
||||||
}
|
}
|
||||||
|
|
||||||
// New create structure which takes care of user configuration
|
// New create structure which takes care of user configuration
|
||||||
func New(k8sClient k8s.Client, jenkinsClient jenkinsclient.Jenkins, logger logr.Logger,
|
func New(k8sClient k8s.Client, jenkinsClient jenkinsclient.Jenkins, logger logr.Logger,
|
||||||
jenkins *virtuslabv1alpha1.Jenkins) *ReconcileUserConfiguration {
|
jenkins *v1alpha1.Jenkins) *ReconcileUserConfiguration {
|
||||||
return &ReconcileUserConfiguration{
|
return &ReconcileUserConfiguration{
|
||||||
k8sClient: k8sClient,
|
k8sClient: k8sClient,
|
||||||
jenkinsClient: jenkinsClient,
|
jenkinsClient: jenkinsClient,
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/jobs"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/jobs"
|
||||||
|
|
@ -47,7 +47,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
|
// EnsureSeedJobs configures seed job and runs it for every entry from Jenkins.Spec.SeedJobs
|
||||||
func (s *SeedJobs) EnsureSeedJobs(jenkins *virtuslabv1alpha1.Jenkins) (done bool, err error) {
|
func (s *SeedJobs) EnsureSeedJobs(jenkins *v1alpha1.Jenkins) (done bool, err error) {
|
||||||
err = s.createJob()
|
err = s.createJob()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.V(log.VWarn).Info("Couldn't create jenkins seed job")
|
s.logger.V(log.VWarn).Info("Couldn't create jenkins seed job")
|
||||||
|
|
@ -74,7 +74,7 @@ func (s *SeedJobs) createJob() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// buildJobs is responsible for running jenkins builds which configures jenkins seed jobs and deploy keys
|
// buildJobs is responsible for running jenkins builds which configures jenkins seed jobs and deploy keys
|
||||||
func (s *SeedJobs) buildJobs(jenkins *virtuslabv1alpha1.Jenkins) (done bool, err error) {
|
func (s *SeedJobs) buildJobs(jenkins *v1alpha1.Jenkins) (done bool, err error) {
|
||||||
allDone := true
|
allDone := true
|
||||||
seedJobs := jenkins.Spec.SeedJobs
|
seedJobs := jenkins.Spec.SeedJobs
|
||||||
for _, seedJob := range seedJobs {
|
for _, seedJob := range seedJobs {
|
||||||
|
|
@ -113,7 +113,7 @@ func (s *SeedJobs) buildJobs(jenkins *virtuslabv1alpha1.Jenkins) (done bool, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// privateKeyFromSecret it's utility function which extracts deploy key from the kubernetes secret
|
// privateKeyFromSecret it's utility function which extracts deploy key from the kubernetes secret
|
||||||
func (s *SeedJobs) privateKeyFromSecret(namespace string, seedJob virtuslabv1alpha1.SeedJob) (string, error) {
|
func (s *SeedJobs) privateKeyFromSecret(namespace string, seedJob v1alpha1.SeedJob) (string, error) {
|
||||||
if seedJob.PrivateKey.SecretKeyRef != nil {
|
if seedJob.PrivateKey.SecretKeyRef != nil {
|
||||||
deployKeySecret := &v1.Secret{}
|
deployKeySecret := &v1.Secret{}
|
||||||
namespaceName := types.NamespacedName{Namespace: namespace, Name: seedJob.PrivateKey.SecretKeyRef.Name}
|
namespaceName := types.NamespacedName{Namespace: namespace, Name: seedJob.PrivateKey.SecretKeyRef.Name}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
||||||
|
|
||||||
"github.com/bndr/gojenkins"
|
"github.com/bndr/gojenkins"
|
||||||
|
|
@ -29,7 +29,7 @@ func TestEnsureSeedJobs(t *testing.T) {
|
||||||
|
|
||||||
jenkinsClient := client.NewMockJenkins(ctrl)
|
jenkinsClient := client.NewMockJenkins(ctrl)
|
||||||
fakeClient := fake.NewFakeClient()
|
fakeClient := fake.NewFakeClient()
|
||||||
err := virtuslabv1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme)
|
err := v1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
jenkins := jenkinsCustomResource()
|
jenkins := jenkinsCustomResource()
|
||||||
|
|
@ -76,7 +76,7 @@ func TestEnsureSeedJobs(t *testing.T) {
|
||||||
GetBuild(ConfigureSeedJobsName, gomock.Any()).
|
GetBuild(ConfigureSeedJobsName, gomock.Any()).
|
||||||
Return(&gojenkins.Build{
|
Return(&gojenkins.Build{
|
||||||
Raw: &gojenkins.BuildResponse{
|
Raw: &gojenkins.BuildResponse{
|
||||||
Result: string(virtuslabv1alpha1.BuildSuccessStatus),
|
Result: string(v1alpha1.BuildSuccessStatus),
|
||||||
},
|
},
|
||||||
}, nil)
|
}, nil)
|
||||||
}
|
}
|
||||||
|
|
@ -99,26 +99,26 @@ func TestEnsureSeedJobs(t *testing.T) {
|
||||||
// first run - should create job and schedule build
|
// first run - should create job and schedule build
|
||||||
if reconcileAttempt == 1 {
|
if reconcileAttempt == 1 {
|
||||||
assert.False(t, done)
|
assert.False(t, done)
|
||||||
assert.Equal(t, string(virtuslabv1alpha1.BuildRunningStatus), string(build.Status))
|
assert.Equal(t, string(v1alpha1.BuildRunningStatus), string(build.Status))
|
||||||
}
|
}
|
||||||
|
|
||||||
// second run - should update and finish job
|
// second run - should update and finish job
|
||||||
if reconcileAttempt == 2 {
|
if reconcileAttempt == 2 {
|
||||||
assert.True(t, done)
|
assert.True(t, done)
|
||||||
assert.Equal(t, string(virtuslabv1alpha1.BuildSuccessStatus), string(build.Status))
|
assert.Equal(t, string(v1alpha1.BuildSuccessStatus), string(build.Status))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func jenkinsCustomResource() *virtuslabv1alpha1.Jenkins {
|
func jenkinsCustomResource() *v1alpha1.Jenkins {
|
||||||
return &virtuslabv1alpha1.Jenkins{
|
return &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "jenkins",
|
Name: "jenkins",
|
||||||
Namespace: "default",
|
Namespace: "default",
|
||||||
},
|
},
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Master: virtuslabv1alpha1.JenkinsMaster{
|
Master: v1alpha1.JenkinsMaster{
|
||||||
Image: "jenkins/jenkins",
|
Image: "jenkins/jenkins",
|
||||||
Annotations: map[string]string{"test": "label"},
|
Annotations: map[string]string{"test": "label"},
|
||||||
Resources: corev1.ResourceRequirements{
|
Resources: corev1.ResourceRequirements{
|
||||||
|
|
@ -132,13 +132,13 @@ func jenkinsCustomResource() *virtuslabv1alpha1.Jenkins {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
SeedJobs: []virtuslabv1alpha1.SeedJob{
|
SeedJobs: []v1alpha1.SeedJob{
|
||||||
{
|
{
|
||||||
ID: "jenkins-operator-e2e",
|
ID: "jenkins-operator-e2e",
|
||||||
Targets: "cicd/jobs/*.jenkins",
|
Targets: "cicd/jobs/*.jenkins",
|
||||||
Description: "Jenkins Operator e2e tests repository",
|
Description: "Jenkins Operator e2e tests repository",
|
||||||
RepositoryBranch: "master",
|
RepositoryBranch: "master",
|
||||||
RepositoryURL: "https://github.com/VirtusLab/jenkins-operator-e2e.git",
|
RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/backup"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/backup"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/log"
|
"github.com/jenkinsci/kubernetes-operator/pkg/log"
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// Validate validates Jenkins CR Spec section
|
// Validate validates Jenkins CR Spec section
|
||||||
func (r *ReconcileUserConfiguration) Validate(jenkins *virtuslabv1alpha1.Jenkins) (bool, error) {
|
func (r *ReconcileUserConfiguration) Validate(jenkins *v1alpha1.Jenkins) (bool, error) {
|
||||||
valid, err := r.validateSeedJobs(jenkins)
|
valid, err := r.validateSeedJobs(jenkins)
|
||||||
if !valid || err != nil {
|
if !valid || err != nil {
|
||||||
return valid, err
|
return valid, err
|
||||||
|
|
@ -32,7 +32,7 @@ func (r *ReconcileUserConfiguration) Validate(jenkins *virtuslabv1alpha1.Jenkins
|
||||||
return backupProvider.IsConfigurationValidForUserPhase(r.k8sClient, *r.jenkins, r.logger)
|
return backupProvider.IsConfigurationValidForUserPhase(r.k8sClient, *r.jenkins, r.logger)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *ReconcileUserConfiguration) validateSeedJobs(jenkins *virtuslabv1alpha1.Jenkins) (bool, error) {
|
func (r *ReconcileUserConfiguration) validateSeedJobs(jenkins *v1alpha1.Jenkins) (bool, error) {
|
||||||
valid := true
|
valid := true
|
||||||
if jenkins.Spec.SeedJobs != nil {
|
if jenkins.Spec.SeedJobs != nil {
|
||||||
for _, seedJob := range jenkins.Spec.SeedJobs {
|
for _, seedJob := range jenkins.Spec.SeedJobs {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
|
@ -52,21 +52,21 @@ SwiLd8TWAvXkxdXm8fDOGAZbYK2alMV+M+9E2OpZsBUCxmb/3FAofF6JccKoJOH8
|
||||||
func TestValidateSeedJobs(t *testing.T) {
|
func TestValidateSeedJobs(t *testing.T) {
|
||||||
data := []struct {
|
data := []struct {
|
||||||
description string
|
description string
|
||||||
jenkins *virtuslabv1alpha1.Jenkins
|
jenkins *v1alpha1.Jenkins
|
||||||
secret *corev1.Secret
|
secret *corev1.Secret
|
||||||
expectedResult bool
|
expectedResult bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
description: "Valid with public repository and without private key",
|
description: "Valid with public repository and without private key",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
SeedJobs: []virtuslabv1alpha1.SeedJob{
|
SeedJobs: []v1alpha1.SeedJob{
|
||||||
{
|
{
|
||||||
ID: "jenkins-operator-e2e",
|
ID: "jenkins-operator-e2e",
|
||||||
Targets: "cicd/jobs/*.jenkins",
|
Targets: "cicd/jobs/*.jenkins",
|
||||||
Description: "Jenkins Operator e2e tests repository",
|
Description: "Jenkins Operator e2e tests repository",
|
||||||
RepositoryBranch: "master",
|
RepositoryBranch: "master",
|
||||||
RepositoryURL: "https://github.com/VirtusLab/jenkins-operator-e2e.git",
|
RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -75,14 +75,14 @@ func TestValidateSeedJobs(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "Invalid without id",
|
description: "Invalid without id",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
SeedJobs: []virtuslabv1alpha1.SeedJob{
|
SeedJobs: []v1alpha1.SeedJob{
|
||||||
{
|
{
|
||||||
Targets: "cicd/jobs/*.jenkins",
|
Targets: "cicd/jobs/*.jenkins",
|
||||||
Description: "Jenkins Operator e2e tests repository",
|
Description: "Jenkins Operator e2e tests repository",
|
||||||
RepositoryBranch: "master",
|
RepositoryBranch: "master",
|
||||||
RepositoryURL: "https://github.com/VirtusLab/jenkins-operator-e2e.git",
|
RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -91,16 +91,16 @@ func TestValidateSeedJobs(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "Valid with private key and secret",
|
description: "Valid with private key and secret",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
SeedJobs: []virtuslabv1alpha1.SeedJob{
|
SeedJobs: []v1alpha1.SeedJob{
|
||||||
{
|
{
|
||||||
ID: "jenkins-operator-e2e",
|
ID: "jenkins-operator-e2e",
|
||||||
Targets: "cicd/jobs/*.jenkins",
|
Targets: "cicd/jobs/*.jenkins",
|
||||||
Description: "Jenkins Operator e2e tests repository",
|
Description: "Jenkins Operator e2e tests repository",
|
||||||
RepositoryBranch: "master",
|
RepositoryBranch: "master",
|
||||||
RepositoryURL: "https://github.com/VirtusLab/jenkins-operator-e2e.git",
|
RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git",
|
||||||
PrivateKey: virtuslabv1alpha1.PrivateKey{
|
PrivateKey: v1alpha1.PrivateKey{
|
||||||
SecretKeyRef: &corev1.SecretKeySelector{
|
SecretKeyRef: &corev1.SecretKeySelector{
|
||||||
LocalObjectReference: corev1.LocalObjectReference{
|
LocalObjectReference: corev1.LocalObjectReference{
|
||||||
Name: "deploy-keys",
|
Name: "deploy-keys",
|
||||||
|
|
@ -129,16 +129,16 @@ func TestValidateSeedJobs(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "Invalid private key in secret",
|
description: "Invalid private key in secret",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
SeedJobs: []virtuslabv1alpha1.SeedJob{
|
SeedJobs: []v1alpha1.SeedJob{
|
||||||
{
|
{
|
||||||
ID: "jenkins-operator-e2e",
|
ID: "jenkins-operator-e2e",
|
||||||
Targets: "cicd/jobs/*.jenkins",
|
Targets: "cicd/jobs/*.jenkins",
|
||||||
Description: "Jenkins Operator e2e tests repository",
|
Description: "Jenkins Operator e2e tests repository",
|
||||||
RepositoryBranch: "master",
|
RepositoryBranch: "master",
|
||||||
RepositoryURL: "https://github.com/VirtusLab/jenkins-operator-e2e.git",
|
RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git",
|
||||||
PrivateKey: virtuslabv1alpha1.PrivateKey{
|
PrivateKey: v1alpha1.PrivateKey{
|
||||||
SecretKeyRef: &corev1.SecretKeySelector{
|
SecretKeyRef: &corev1.SecretKeySelector{
|
||||||
LocalObjectReference: corev1.LocalObjectReference{
|
LocalObjectReference: corev1.LocalObjectReference{
|
||||||
Name: "deploy-keys",
|
Name: "deploy-keys",
|
||||||
|
|
@ -167,16 +167,16 @@ func TestValidateSeedJobs(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "Invalid with PrivateKey and empty Secret data",
|
description: "Invalid with PrivateKey and empty Secret data",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
SeedJobs: []virtuslabv1alpha1.SeedJob{
|
SeedJobs: []v1alpha1.SeedJob{
|
||||||
{
|
{
|
||||||
ID: "jenkins-operator-e2e",
|
ID: "jenkins-operator-e2e",
|
||||||
Targets: "cicd/jobs/*.jenkins",
|
Targets: "cicd/jobs/*.jenkins",
|
||||||
Description: "Jenkins Operator e2e tests repository",
|
Description: "Jenkins Operator e2e tests repository",
|
||||||
RepositoryBranch: "master",
|
RepositoryBranch: "master",
|
||||||
RepositoryURL: "https://github.com/VirtusLab/jenkins-operator-e2e.git",
|
RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git",
|
||||||
PrivateKey: virtuslabv1alpha1.PrivateKey{
|
PrivateKey: v1alpha1.PrivateKey{
|
||||||
SecretKeyRef: &corev1.SecretKeySelector{
|
SecretKeyRef: &corev1.SecretKeySelector{
|
||||||
LocalObjectReference: corev1.LocalObjectReference{
|
LocalObjectReference: corev1.LocalObjectReference{
|
||||||
Name: "deploy-keys",
|
Name: "deploy-keys",
|
||||||
|
|
@ -205,15 +205,15 @@ func TestValidateSeedJobs(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "Invalid with ssh RepositoryURL and empty PrivateKey",
|
description: "Invalid with ssh RepositoryURL and empty PrivateKey",
|
||||||
jenkins: &virtuslabv1alpha1.Jenkins{
|
jenkins: &v1alpha1.Jenkins{
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
SeedJobs: []virtuslabv1alpha1.SeedJob{
|
SeedJobs: []v1alpha1.SeedJob{
|
||||||
{
|
{
|
||||||
ID: "jenkins-operator-e2e",
|
ID: "jenkins-operator-e2e",
|
||||||
Targets: "cicd/jobs/*.jenkins",
|
Targets: "cicd/jobs/*.jenkins",
|
||||||
Description: "Jenkins Operator e2e tests repository",
|
Description: "Jenkins Operator e2e tests repository",
|
||||||
RepositoryBranch: "master",
|
RepositoryBranch: "master",
|
||||||
RepositoryURL: "git@github.com:VirtusLab/jenkins-operator.git",
|
RepositoryURL: "git@github.com:jenkinsci/kubernetes-operator.git",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/jobs"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/jobs"
|
||||||
|
|
||||||
|
|
@ -51,7 +51,7 @@ func (g *Groovy) ConfigureGroovyJob() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnsureGroovyJob executes groovy script and verifies jenkins job status according to reconciliation loop lifecycle
|
// EnsureGroovyJob executes groovy script and verifies jenkins job status according to reconciliation loop lifecycle
|
||||||
func (g *Groovy) EnsureGroovyJob(secretOrConfigMapData map[string]string, jenkins *virtuslabv1alpha1.Jenkins) (bool, error) {
|
func (g *Groovy) EnsureGroovyJob(secretOrConfigMapData map[string]string, jenkins *v1alpha1.Jenkins) (bool, error) {
|
||||||
jobsClient := jobs.New(g.jenkinsClient, g.k8sClient, g.logger)
|
jobsClient := jobs.New(g.jenkinsClient, g.k8sClient, g.logger)
|
||||||
|
|
||||||
hash := g.calculateHash(secretOrConfigMapData)
|
hash := g.calculateHash(secretOrConfigMapData)
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base"
|
"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/configuration/user"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
|
|
@ -61,7 +61,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Watch for changes to primary resource Jenkins
|
// Watch for changes to primary resource Jenkins
|
||||||
err = c.Watch(&source.Kind{Type: &virtuslabv1alpha1.Jenkins{}}, &handler.EnqueueRequestForObject{})
|
err = c.Watch(&source.Kind{Type: &v1alpha1.Jenkins{}}, &handler.EnqueueRequestForObject{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -69,7 +69,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
|
||||||
// Watch for changes to secondary resource Pods and requeue the owner Jenkins
|
// Watch for changes to secondary resource Pods and requeue the owner Jenkins
|
||||||
err = c.Watch(&source.Kind{Type: &corev1.Pod{}}, &handler.EnqueueRequestForOwner{
|
err = c.Watch(&source.Kind{Type: &corev1.Pod{}}, &handler.EnqueueRequestForOwner{
|
||||||
IsController: true,
|
IsController: true,
|
||||||
OwnerType: &virtuslabv1alpha1.Jenkins{},
|
OwnerType: &v1alpha1.Jenkins{},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -117,7 +117,7 @@ func (r *ReconcileJenkins) Reconcile(request reconcile.Request) (reconcile.Resul
|
||||||
|
|
||||||
func (r *ReconcileJenkins) reconcile(request reconcile.Request, logger logr.Logger) (reconcile.Result, error) {
|
func (r *ReconcileJenkins) reconcile(request reconcile.Request, logger logr.Logger) (reconcile.Result, error) {
|
||||||
// Fetch the Jenkins instance
|
// Fetch the Jenkins instance
|
||||||
jenkins := &virtuslabv1alpha1.Jenkins{}
|
jenkins := &v1alpha1.Jenkins{}
|
||||||
err := r.client.Get(context.TODO(), request.NamespacedName, jenkins)
|
err := r.client.Get(context.TODO(), request.NamespacedName, jenkins)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if apierrors.IsNotFound(err) {
|
if apierrors.IsNotFound(err) {
|
||||||
|
|
@ -205,7 +205,7 @@ func (r *ReconcileJenkins) buildLogger(jenkinsName string) logr.Logger {
|
||||||
return log.Log.WithValues("cr", jenkinsName)
|
return log.Log.WithValues("cr", jenkinsName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *ReconcileJenkins) setDefaults(jenkins *virtuslabv1alpha1.Jenkins, logger logr.Logger) error {
|
func (r *ReconcileJenkins) setDefaults(jenkins *v1alpha1.Jenkins, logger logr.Logger) error {
|
||||||
changed := false
|
changed := false
|
||||||
if len(jenkins.Spec.Master.Image) == 0 {
|
if len(jenkins.Spec.Master.Image) == 0 {
|
||||||
logger.Info("Setting default Jenkins master image: " + constants.DefaultJenkinsMasterImage)
|
logger.Info("Setting default Jenkins master image: " + constants.DefaultJenkinsMasterImage)
|
||||||
|
|
@ -213,10 +213,10 @@ func (r *ReconcileJenkins) setDefaults(jenkins *virtuslabv1alpha1.Jenkins, logge
|
||||||
jenkins.Spec.Master.Image = constants.DefaultJenkinsMasterImage
|
jenkins.Spec.Master.Image = constants.DefaultJenkinsMasterImage
|
||||||
}
|
}
|
||||||
if len(jenkins.Spec.Backup) == 0 {
|
if len(jenkins.Spec.Backup) == 0 {
|
||||||
logger.Info("Setting default backup strategy: " + virtuslabv1alpha1.JenkinsBackupTypeNoBackup)
|
logger.Info("Setting default backup strategy: " + v1alpha1.JenkinsBackupTypeNoBackup)
|
||||||
logger.V(log.VWarn).Info("Backup is disable !!! Please configure backup in '.spec.backup'")
|
logger.V(log.VWarn).Info("Backup is disable !!! Please configure backup in '.spec.backup'")
|
||||||
changed = true
|
changed = true
|
||||||
jenkins.Spec.Backup = virtuslabv1alpha1.JenkinsBackupTypeNoBackup
|
jenkins.Spec.Backup = v1alpha1.JenkinsBackupTypeNoBackup
|
||||||
}
|
}
|
||||||
if len(jenkins.Spec.Master.Plugins) == 0 {
|
if len(jenkins.Spec.Master.Plugins) == 0 {
|
||||||
logger.Info("Setting default base plugins")
|
logger.Info("Setting default base plugins")
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/log"
|
"github.com/jenkinsci/kubernetes-operator/pkg/log"
|
||||||
|
|
||||||
|
|
@ -51,7 +51,7 @@ func New(jenkinsClient client.Jenkins, k8sClient k8s.Client, logger logr.Logger)
|
||||||
// entire state is saved in Jenkins.Status.Builds section
|
// 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
|
// 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
|
// 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 *virtuslabv1alpha1.Jenkins, preserveStatus bool) (done bool, err error) {
|
func (jobs *Jobs) EnsureBuildJob(jobName, hash string, parameters map[string]string, jenkins *v1alpha1.Jenkins, preserveStatus bool) (done bool, err error) {
|
||||||
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring build, name:'%s' hash:'%s'", jobName, hash))
|
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring build, name:'%s' hash:'%s'", jobName, hash))
|
||||||
|
|
||||||
build, err := jobs.getBuildFromStatus(jobName, hash, jenkins)
|
build, err := jobs.getBuildFromStatus(jobName, hash, jenkins)
|
||||||
|
|
@ -62,13 +62,13 @@ func (jobs *Jobs) EnsureBuildJob(jobName, hash string, parameters map[string]str
|
||||||
if build != nil {
|
if build != nil {
|
||||||
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Build exists in status, %+v", build))
|
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Build exists in status, %+v", build))
|
||||||
switch build.Status {
|
switch build.Status {
|
||||||
case virtuslabv1alpha1.BuildSuccessStatus:
|
case v1alpha1.BuildSuccessStatus:
|
||||||
return jobs.ensureSuccessBuild(*build, jenkins, preserveStatus)
|
return jobs.ensureSuccessBuild(*build, jenkins, preserveStatus)
|
||||||
case virtuslabv1alpha1.BuildRunningStatus:
|
case v1alpha1.BuildRunningStatus:
|
||||||
return jobs.ensureRunningBuild(*build, jenkins, preserveStatus)
|
return jobs.ensureRunningBuild(*build, jenkins, preserveStatus)
|
||||||
case virtuslabv1alpha1.BuildUnstableStatus, virtuslabv1alpha1.BuildNotBuildStatus, virtuslabv1alpha1.BuildFailureStatus, virtuslabv1alpha1.BuildAbortedStatus:
|
case v1alpha1.BuildUnstableStatus, v1alpha1.BuildNotBuildStatus, v1alpha1.BuildFailureStatus, v1alpha1.BuildAbortedStatus:
|
||||||
return jobs.ensureFailedBuild(*build, jenkins, parameters, preserveStatus)
|
return jobs.ensureFailedBuild(*build, jenkins, parameters, preserveStatus)
|
||||||
case virtuslabv1alpha1.BuildExpiredStatus:
|
case v1alpha1.BuildExpiredStatus:
|
||||||
return jobs.ensureExpiredBuild(*build, jenkins, preserveStatus)
|
return jobs.ensureExpiredBuild(*build, jenkins, preserveStatus)
|
||||||
default:
|
default:
|
||||||
jobs.logger.V(log.VWarn).Info(fmt.Sprintf("Unexpected build status, %+v", build))
|
jobs.logger.V(log.VWarn).Info(fmt.Sprintf("Unexpected build status, %+v", build))
|
||||||
|
|
@ -78,7 +78,7 @@ func (jobs *Jobs) EnsureBuildJob(jobName, hash string, parameters map[string]str
|
||||||
|
|
||||||
// build is run first time - build job and update status
|
// build is run first time - build job and update status
|
||||||
created := metav1.Now()
|
created := metav1.Now()
|
||||||
newBuild := virtuslabv1alpha1.Build{
|
newBuild := v1alpha1.Build{
|
||||||
JobName: jobName,
|
JobName: jobName,
|
||||||
Hash: hash,
|
Hash: hash,
|
||||||
CreateTime: &created,
|
CreateTime: &created,
|
||||||
|
|
@ -86,7 +86,7 @@ func (jobs *Jobs) EnsureBuildJob(jobName, hash string, parameters map[string]str
|
||||||
return jobs.buildJob(newBuild, parameters, jenkins)
|
return jobs.buildJob(newBuild, parameters, jenkins)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (jobs *Jobs) getBuildFromStatus(jobName string, hash string, jenkins *virtuslabv1alpha1.Jenkins) (*virtuslabv1alpha1.Build, error) {
|
func (jobs *Jobs) getBuildFromStatus(jobName string, hash string, jenkins *v1alpha1.Jenkins) (*v1alpha1.Build, error) {
|
||||||
if jenkins != nil {
|
if jenkins != nil {
|
||||||
builds := jenkins.Status.Builds
|
builds := jenkins.Status.Builds
|
||||||
for _, build := range builds {
|
for _, build := range builds {
|
||||||
|
|
@ -98,7 +98,7 @@ func (jobs *Jobs) getBuildFromStatus(jobName string, hash string, jenkins *virtu
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (jobs *Jobs) ensureSuccessBuild(build virtuslabv1alpha1.Build, jenkins *virtuslabv1alpha1.Jenkins, preserveStatus bool) (bool, error) {
|
func (jobs *Jobs) ensureSuccessBuild(build v1alpha1.Build, jenkins *v1alpha1.Jenkins, preserveStatus bool) (bool, error) {
|
||||||
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring success build, %+v", build))
|
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring success build, %+v", build))
|
||||||
|
|
||||||
if !preserveStatus {
|
if !preserveStatus {
|
||||||
|
|
@ -112,7 +112,7 @@ func (jobs *Jobs) ensureSuccessBuild(build virtuslabv1alpha1.Build, jenkins *vir
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (jobs *Jobs) ensureRunningBuild(build virtuslabv1alpha1.Build, jenkins *virtuslabv1alpha1.Jenkins, preserveStatus bool) (bool, error) {
|
func (jobs *Jobs) ensureRunningBuild(build v1alpha1.Build, jenkins *v1alpha1.Jenkins, preserveStatus bool) (bool, error) {
|
||||||
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring running build, %+v", build))
|
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring running build, %+v", build))
|
||||||
// FIXME (antoniaklja) implement build expiration
|
// FIXME (antoniaklja) implement build expiration
|
||||||
|
|
||||||
|
|
@ -126,7 +126,7 @@ func (jobs *Jobs) ensureRunningBuild(build virtuslabv1alpha1.Build, jenkins *vir
|
||||||
}
|
}
|
||||||
|
|
||||||
if jenkinsBuild.GetResult() != "" {
|
if jenkinsBuild.GetResult() != "" {
|
||||||
build.Status = virtuslabv1alpha1.BuildStatus(strings.ToLower(jenkinsBuild.GetResult()))
|
build.Status = v1alpha1.BuildStatus(strings.ToLower(jenkinsBuild.GetResult()))
|
||||||
}
|
}
|
||||||
|
|
||||||
err = jobs.updateBuildStatus(build, jenkins)
|
err = jobs.updateBuildStatus(build, jenkins)
|
||||||
|
|
@ -135,13 +135,13 @@ func (jobs *Jobs) ensureRunningBuild(build virtuslabv1alpha1.Build, jenkins *vir
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if build.Status == virtuslabv1alpha1.BuildSuccessStatus {
|
if build.Status == v1alpha1.BuildSuccessStatus {
|
||||||
jobs.logger.Info(fmt.Sprintf("Build finished successfully, %+v", build))
|
jobs.logger.Info(fmt.Sprintf("Build finished successfully, %+v", build))
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if build.Status == virtuslabv1alpha1.BuildFailureStatus || build.Status == virtuslabv1alpha1.BuildUnstableStatus ||
|
if build.Status == v1alpha1.BuildFailureStatus || build.Status == v1alpha1.BuildUnstableStatus ||
|
||||||
build.Status == virtuslabv1alpha1.BuildNotBuildStatus || build.Status == virtuslabv1alpha1.BuildAbortedStatus {
|
build.Status == v1alpha1.BuildNotBuildStatus || build.Status == v1alpha1.BuildAbortedStatus {
|
||||||
jobs.logger.V(log.VWarn).Info(fmt.Sprintf("Build failed, %+v", build))
|
jobs.logger.V(log.VWarn).Info(fmt.Sprintf("Build failed, %+v", build))
|
||||||
return false, ErrorBuildFailed
|
return false, ErrorBuildFailed
|
||||||
}
|
}
|
||||||
|
|
@ -149,7 +149,7 @@ func (jobs *Jobs) ensureRunningBuild(build virtuslabv1alpha1.Build, jenkins *vir
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (jobs *Jobs) ensureFailedBuild(build virtuslabv1alpha1.Build, jenkins *virtuslabv1alpha1.Jenkins, parameters map[string]string, preserveStatus bool) (bool, error) {
|
func (jobs *Jobs) ensureFailedBuild(build v1alpha1.Build, jenkins *v1alpha1.Jenkins, parameters map[string]string, preserveStatus bool) (bool, error) {
|
||||||
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring failed build, %+v", build))
|
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring failed build, %+v", build))
|
||||||
|
|
||||||
if build.Retires < BuildRetires {
|
if build.Retires < BuildRetires {
|
||||||
|
|
@ -176,7 +176,7 @@ func (jobs *Jobs) ensureFailedBuild(build virtuslabv1alpha1.Build, jenkins *virt
|
||||||
return false, ErrorUnrecoverableBuildFailed
|
return false, ErrorUnrecoverableBuildFailed
|
||||||
}
|
}
|
||||||
|
|
||||||
func (jobs *Jobs) ensureExpiredBuild(build virtuslabv1alpha1.Build, jenkins *virtuslabv1alpha1.Jenkins, preserveStatus bool) (bool, error) {
|
func (jobs *Jobs) ensureExpiredBuild(build v1alpha1.Build, jenkins *v1alpha1.Jenkins, preserveStatus bool) (bool, error) {
|
||||||
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring expired build, %+v", build))
|
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring expired build, %+v", build))
|
||||||
|
|
||||||
jenkinsBuild, err := jobs.jenkinsClient.GetBuild(build.JobName, build.Number)
|
jenkinsBuild, err := jobs.jenkinsClient.GetBuild(build.JobName, build.Number)
|
||||||
|
|
@ -194,7 +194,7 @@ func (jobs *Jobs) ensureExpiredBuild(build virtuslabv1alpha1.Build, jenkins *vir
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if virtuslabv1alpha1.BuildStatus(jenkinsBuild.GetResult()) != virtuslabv1alpha1.BuildAbortedStatus {
|
if v1alpha1.BuildStatus(jenkinsBuild.GetResult()) != v1alpha1.BuildAbortedStatus {
|
||||||
return false, ErrorAbortBuildFailed
|
return false, ErrorAbortBuildFailed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -217,8 +217,8 @@ func (jobs *Jobs) ensureExpiredBuild(build virtuslabv1alpha1.Build, jenkins *vir
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (jobs *Jobs) removeBuildFromStatus(build virtuslabv1alpha1.Build, jenkins *virtuslabv1alpha1.Jenkins) error {
|
func (jobs *Jobs) removeBuildFromStatus(build v1alpha1.Build, jenkins *v1alpha1.Jenkins) error {
|
||||||
builds := make([]virtuslabv1alpha1.Build, len(jenkins.Status.Builds))
|
builds := make([]v1alpha1.Build, len(jenkins.Status.Builds))
|
||||||
for _, existingBuild := range jenkins.Status.Builds {
|
for _, existingBuild := range jenkins.Status.Builds {
|
||||||
if existingBuild.JobName != build.JobName && existingBuild.Hash != build.Hash {
|
if existingBuild.JobName != build.JobName && existingBuild.Hash != build.Hash {
|
||||||
builds = append(builds, existingBuild)
|
builds = append(builds, existingBuild)
|
||||||
|
|
@ -233,7 +233,7 @@ func (jobs *Jobs) removeBuildFromStatus(build virtuslabv1alpha1.Build, jenkins *
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (jobs *Jobs) buildJob(build virtuslabv1alpha1.Build, parameters map[string]string, jenkins *virtuslabv1alpha1.Jenkins) (bool, error) {
|
func (jobs *Jobs) buildJob(build v1alpha1.Build, parameters map[string]string, jenkins *v1alpha1.Jenkins) (bool, error) {
|
||||||
jobs.logger.Info(fmt.Sprintf("Running job, %+v", build))
|
jobs.logger.Info(fmt.Sprintf("Running job, %+v", build))
|
||||||
job, err := jobs.jenkinsClient.GetJob(build.JobName)
|
job, err := jobs.jenkinsClient.GetJob(build.JobName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -249,7 +249,7 @@ func (jobs *Jobs) buildJob(build virtuslabv1alpha1.Build, parameters map[string]
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
build.Status = virtuslabv1alpha1.BuildRunningStatus
|
build.Status = v1alpha1.BuildRunningStatus
|
||||||
build.Number = nextBuildNumber
|
build.Number = nextBuildNumber
|
||||||
|
|
||||||
err = jobs.updateBuildStatus(build, jenkins)
|
err = jobs.updateBuildStatus(build, jenkins)
|
||||||
|
|
@ -260,7 +260,7 @@ func (jobs *Jobs) buildJob(build virtuslabv1alpha1.Build, parameters map[string]
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (jobs *Jobs) updateBuildStatus(build virtuslabv1alpha1.Build, jenkins *virtuslabv1alpha1.Jenkins) error {
|
func (jobs *Jobs) updateBuildStatus(build v1alpha1.Build, jenkins *v1alpha1.Jenkins) error {
|
||||||
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Updating build status, %+v", build))
|
jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Updating build status, %+v", build))
|
||||||
// get index of existing build from status if exists
|
// get index of existing build from status if exists
|
||||||
buildIndex := -1
|
buildIndex := -1
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
||||||
|
|
||||||
"github.com/bndr/gojenkins"
|
"github.com/bndr/gojenkins"
|
||||||
|
|
@ -37,7 +37,7 @@ func TestSuccessEnsureJob(t *testing.T) {
|
||||||
// when
|
// when
|
||||||
jenkins := jenkinsCustomResource()
|
jenkins := jenkinsCustomResource()
|
||||||
fakeClient := fake.NewFakeClient()
|
fakeClient := fake.NewFakeClient()
|
||||||
err := virtuslabv1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme)
|
err := v1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
err = fakeClient.Create(ctx, jenkins)
|
err = fakeClient.Create(ctx, jenkins)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
@ -67,7 +67,7 @@ func TestSuccessEnsureJob(t *testing.T) {
|
||||||
GetBuild(jobName, buildNumber).
|
GetBuild(jobName, buildNumber).
|
||||||
Return(&gojenkins.Build{
|
Return(&gojenkins.Build{
|
||||||
Raw: &gojenkins.BuildResponse{
|
Raw: &gojenkins.BuildResponse{
|
||||||
Result: string(virtuslabv1alpha1.BuildSuccessStatus),
|
Result: string(v1alpha1.BuildSuccessStatus),
|
||||||
},
|
},
|
||||||
}, nil).AnyTimes()
|
}, nil).AnyTimes()
|
||||||
|
|
||||||
|
|
@ -91,13 +91,13 @@ func TestSuccessEnsureJob(t *testing.T) {
|
||||||
// first run - build should be scheduled and status updated
|
// first run - build should be scheduled and status updated
|
||||||
if reconcileAttempt == 1 {
|
if reconcileAttempt == 1 {
|
||||||
assert.False(t, done)
|
assert.False(t, done)
|
||||||
assert.Equal(t, build.Status, virtuslabv1alpha1.BuildRunningStatus)
|
assert.Equal(t, build.Status, v1alpha1.BuildRunningStatus)
|
||||||
}
|
}
|
||||||
|
|
||||||
// second run -job should be success and status updated
|
// second run -job should be success and status updated
|
||||||
if reconcileAttempt == 2 {
|
if reconcileAttempt == 2 {
|
||||||
assert.True(t, done)
|
assert.True(t, done)
|
||||||
assert.Equal(t, build.Status, virtuslabv1alpha1.BuildSuccessStatus)
|
assert.Equal(t, build.Status, v1alpha1.BuildSuccessStatus)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -149,7 +149,7 @@ func TestEnsureJobWithFailedBuild(t *testing.T) {
|
||||||
GetBuild(jobName, int64(1)).
|
GetBuild(jobName, int64(1)).
|
||||||
Return(&gojenkins.Build{
|
Return(&gojenkins.Build{
|
||||||
Raw: &gojenkins.BuildResponse{
|
Raw: &gojenkins.BuildResponse{
|
||||||
Result: string(virtuslabv1alpha1.BuildFailureStatus),
|
Result: string(v1alpha1.BuildFailureStatus),
|
||||||
},
|
},
|
||||||
}, nil)
|
}, nil)
|
||||||
}
|
}
|
||||||
|
|
@ -178,7 +178,7 @@ func TestEnsureJobWithFailedBuild(t *testing.T) {
|
||||||
GetBuild(jobName, int64(2)).
|
GetBuild(jobName, int64(2)).
|
||||||
Return(&gojenkins.Build{
|
Return(&gojenkins.Build{
|
||||||
Raw: &gojenkins.BuildResponse{
|
Raw: &gojenkins.BuildResponse{
|
||||||
Result: string(virtuslabv1alpha1.BuildSuccessStatus),
|
Result: string(v1alpha1.BuildSuccessStatus),
|
||||||
},
|
},
|
||||||
}, nil)
|
}, nil)
|
||||||
}
|
}
|
||||||
|
|
@ -204,7 +204,7 @@ func TestEnsureJobWithFailedBuild(t *testing.T) {
|
||||||
assert.NoError(t, errEnsureBuildJob)
|
assert.NoError(t, errEnsureBuildJob)
|
||||||
assert.False(t, done)
|
assert.False(t, done)
|
||||||
assert.Equal(t, build.Number, int64(1))
|
assert.Equal(t, build.Number, int64(1))
|
||||||
assert.Equal(t, build.Status, virtuslabv1alpha1.BuildRunningStatus)
|
assert.Equal(t, build.Status, v1alpha1.BuildRunningStatus)
|
||||||
}
|
}
|
||||||
|
|
||||||
// second run - build should be failure and status updated
|
// second run - build should be failure and status updated
|
||||||
|
|
@ -212,7 +212,7 @@ func TestEnsureJobWithFailedBuild(t *testing.T) {
|
||||||
assert.Error(t, errEnsureBuildJob)
|
assert.Error(t, errEnsureBuildJob)
|
||||||
assert.False(t, done)
|
assert.False(t, done)
|
||||||
assert.Equal(t, build.Number, int64(1))
|
assert.Equal(t, build.Number, int64(1))
|
||||||
assert.Equal(t, build.Status, virtuslabv1alpha1.BuildFailureStatus)
|
assert.Equal(t, build.Status, v1alpha1.BuildFailureStatus)
|
||||||
}
|
}
|
||||||
|
|
||||||
// third run - build should be rescheduled and status updated
|
// third run - build should be rescheduled and status updated
|
||||||
|
|
@ -220,7 +220,7 @@ func TestEnsureJobWithFailedBuild(t *testing.T) {
|
||||||
assert.NoError(t, errEnsureBuildJob)
|
assert.NoError(t, errEnsureBuildJob)
|
||||||
assert.False(t, done)
|
assert.False(t, done)
|
||||||
assert.Equal(t, build.Number, int64(2))
|
assert.Equal(t, build.Number, int64(2))
|
||||||
assert.Equal(t, build.Status, virtuslabv1alpha1.BuildRunningStatus)
|
assert.Equal(t, build.Status, v1alpha1.BuildRunningStatus)
|
||||||
}
|
}
|
||||||
|
|
||||||
// fourth run - build should be success and status updated
|
// fourth run - build should be success and status updated
|
||||||
|
|
@ -228,7 +228,7 @@ func TestEnsureJobWithFailedBuild(t *testing.T) {
|
||||||
assert.NoError(t, errEnsureBuildJob)
|
assert.NoError(t, errEnsureBuildJob)
|
||||||
assert.True(t, done)
|
assert.True(t, done)
|
||||||
assert.Equal(t, build.Number, int64(2))
|
assert.Equal(t, build.Number, int64(2))
|
||||||
assert.Equal(t, build.Status, virtuslabv1alpha1.BuildSuccessStatus)
|
assert.Equal(t, build.Status, v1alpha1.BuildSuccessStatus)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -281,7 +281,7 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) {
|
||||||
GetBuild(buildName, int64(1)).
|
GetBuild(buildName, int64(1)).
|
||||||
Return(&gojenkins.Build{
|
Return(&gojenkins.Build{
|
||||||
Raw: &gojenkins.BuildResponse{
|
Raw: &gojenkins.BuildResponse{
|
||||||
Result: string(virtuslabv1alpha1.BuildFailureStatus),
|
Result: string(v1alpha1.BuildFailureStatus),
|
||||||
},
|
},
|
||||||
}, nil)
|
}, nil)
|
||||||
}
|
}
|
||||||
|
|
@ -310,7 +310,7 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) {
|
||||||
GetBuild(buildName, int64(2)).
|
GetBuild(buildName, int64(2)).
|
||||||
Return(&gojenkins.Build{
|
Return(&gojenkins.Build{
|
||||||
Raw: &gojenkins.BuildResponse{
|
Raw: &gojenkins.BuildResponse{
|
||||||
Result: string(virtuslabv1alpha1.BuildFailureStatus),
|
Result: string(v1alpha1.BuildFailureStatus),
|
||||||
},
|
},
|
||||||
}, nil)
|
}, nil)
|
||||||
}
|
}
|
||||||
|
|
@ -337,7 +337,7 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) {
|
||||||
assert.False(t, done)
|
assert.False(t, done)
|
||||||
assert.Equal(t, build.Number, int64(1))
|
assert.Equal(t, build.Number, int64(1))
|
||||||
assert.Equal(t, build.Retires, 0)
|
assert.Equal(t, build.Retires, 0)
|
||||||
assert.Equal(t, build.Status, virtuslabv1alpha1.BuildRunningStatus)
|
assert.Equal(t, build.Status, v1alpha1.BuildRunningStatus)
|
||||||
}
|
}
|
||||||
|
|
||||||
// second run - build should be failure and status updated
|
// second run - build should be failure and status updated
|
||||||
|
|
@ -346,7 +346,7 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) {
|
||||||
assert.False(t, done)
|
assert.False(t, done)
|
||||||
assert.Equal(t, build.Number, int64(1))
|
assert.Equal(t, build.Number, int64(1))
|
||||||
assert.Equal(t, build.Retires, 0)
|
assert.Equal(t, build.Retires, 0)
|
||||||
assert.Equal(t, build.Status, virtuslabv1alpha1.BuildFailureStatus)
|
assert.Equal(t, build.Status, v1alpha1.BuildFailureStatus)
|
||||||
}
|
}
|
||||||
|
|
||||||
// third run - build should be rescheduled and status updated
|
// 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.Retires, 1)
|
||||||
assert.Equal(t, build.Number, int64(2))
|
assert.Equal(t, build.Number, int64(2))
|
||||||
assert.Equal(t, build.Retires, 1)
|
assert.Equal(t, build.Retires, 1)
|
||||||
assert.Equal(t, build.Status, virtuslabv1alpha1.BuildRunningStatus)
|
assert.Equal(t, build.Status, v1alpha1.BuildRunningStatus)
|
||||||
}
|
}
|
||||||
|
|
||||||
// fourth run - build should be failure and status updated
|
// fourth run - build should be failure and status updated
|
||||||
|
|
@ -365,7 +365,7 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) {
|
||||||
assert.False(t, done)
|
assert.False(t, done)
|
||||||
assert.Equal(t, build.Number, int64(2))
|
assert.Equal(t, build.Number, int64(2))
|
||||||
assert.Equal(t, build.Retires, 1)
|
assert.Equal(t, build.Retires, 1)
|
||||||
assert.Equal(t, build.Status, virtuslabv1alpha1.BuildFailureStatus)
|
assert.Equal(t, build.Status, v1alpha1.BuildFailureStatus)
|
||||||
}
|
}
|
||||||
|
|
||||||
// fifth run - build should be unrecoverable failed and status updated
|
// fifth run - build should be unrecoverable failed and status updated
|
||||||
|
|
@ -374,19 +374,19 @@ func TestEnsureJobFailedWithMaxRetries(t *testing.T) {
|
||||||
assert.False(t, done)
|
assert.False(t, done)
|
||||||
assert.Equal(t, build.Number, int64(2))
|
assert.Equal(t, build.Number, int64(2))
|
||||||
assert.Equal(t, build.Retires, 1)
|
assert.Equal(t, build.Retires, 1)
|
||||||
assert.Equal(t, build.Status, virtuslabv1alpha1.BuildFailureStatus)
|
assert.Equal(t, build.Status, v1alpha1.BuildFailureStatus)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func jenkinsCustomResource() *virtuslabv1alpha1.Jenkins {
|
func jenkinsCustomResource() *v1alpha1.Jenkins {
|
||||||
return &virtuslabv1alpha1.Jenkins{
|
return &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "jenkins",
|
Name: "jenkins",
|
||||||
Namespace: "default",
|
Namespace: "default",
|
||||||
},
|
},
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Master: virtuslabv1alpha1.JenkinsMaster{
|
Master: v1alpha1.JenkinsMaster{
|
||||||
Image: "jenkins/jenkins",
|
Image: "jenkins/jenkins",
|
||||||
Annotations: map[string]string{"test": "label"},
|
Annotations: map[string]string{"test": "label"},
|
||||||
Resources: corev1.ResourceRequirements{
|
Resources: corev1.ResourceRequirements{
|
||||||
|
|
@ -400,13 +400,13 @@ func jenkinsCustomResource() *virtuslabv1alpha1.Jenkins {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
SeedJobs: []virtuslabv1alpha1.SeedJob{
|
SeedJobs: []v1alpha1.SeedJob{
|
||||||
{
|
{
|
||||||
ID: "jenkins-operator-e2e",
|
ID: "jenkins-operator-e2e",
|
||||||
Targets: "cicd/jobs/*.jenkins",
|
Targets: "cicd/jobs/*.jenkins",
|
||||||
Description: "Jenkins Operator e2e tests repository",
|
Description: "Jenkins Operator e2e tests repository",
|
||||||
RepositoryBranch: "master",
|
RepositoryBranch: "master",
|
||||||
RepositoryURL: "https://github.com/VirtusLab/jenkins-operator-e2e.git",
|
RepositoryURL: "https://github.com/jenkinsci/kubernetes-operator.git",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
|
|
||||||
|
|
@ -98,20 +98,20 @@ func verifyIfBackupAndRestoreWasSuccessfull(t *testing.T, jenkinsClient *gojenki
|
||||||
assert.True(t, latestBackupFound)
|
assert.True(t, latestBackupFound)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createJenkinsCRWithAmazonS3Backup(t *testing.T, namespace string, backupConfig amazonS3BackupConfiguration) *virtuslabv1alpha1.Jenkins {
|
func createJenkinsCRWithAmazonS3Backup(t *testing.T, namespace string, backupConfig amazonS3BackupConfiguration) *v1alpha1.Jenkins {
|
||||||
jenkins := &virtuslabv1alpha1.Jenkins{
|
jenkins := &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "e2e",
|
Name: "e2e",
|
||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
},
|
},
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Backup: virtuslabv1alpha1.JenkinsBackupTypeAmazonS3,
|
Backup: v1alpha1.JenkinsBackupTypeAmazonS3,
|
||||||
BackupAmazonS3: virtuslabv1alpha1.JenkinsBackupAmazonS3{
|
BackupAmazonS3: v1alpha1.JenkinsBackupAmazonS3{
|
||||||
Region: backupConfig.Region,
|
Region: backupConfig.Region,
|
||||||
BucketPath: backupConfig.BucketPath,
|
BucketPath: backupConfig.BucketPath,
|
||||||
BucketName: backupConfig.BucketName,
|
BucketName: backupConfig.BucketName,
|
||||||
},
|
},
|
||||||
Master: virtuslabv1alpha1.JenkinsMaster{
|
Master: v1alpha1.JenkinsMaster{
|
||||||
Image: "jenkins/jenkins",
|
Image: "jenkins/jenkins",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins"
|
||||||
|
|
||||||
"github.com/bndr/gojenkins"
|
"github.com/bndr/gojenkins"
|
||||||
|
|
@ -59,7 +59,7 @@ func createDefaultLimitsForContainersInNamespace(t *testing.T, namespace string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func verifyJenkinsMasterPodAttributes(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) {
|
func verifyJenkinsMasterPodAttributes(t *testing.T, jenkins *v1alpha1.Jenkins) {
|
||||||
jenkinsPod := getJenkinsMasterPod(t, jenkins)
|
jenkinsPod := getJenkinsMasterPod(t, jenkins)
|
||||||
jenkins = getJenkins(t, jenkins.Namespace, jenkins.Name)
|
jenkins = getJenkins(t, jenkins.Namespace, jenkins.Name)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
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/base/resources"
|
||||||
|
|
||||||
|
|
@ -18,8 +18,8 @@ import (
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getJenkins(t *testing.T, namespace, name string) *virtuslabv1alpha1.Jenkins {
|
func getJenkins(t *testing.T, namespace, name string) *v1alpha1.Jenkins {
|
||||||
jenkins := &virtuslabv1alpha1.Jenkins{}
|
jenkins := &v1alpha1.Jenkins{}
|
||||||
namespaceName := types.NamespacedName{Namespace: namespace, Name: name}
|
namespaceName := types.NamespacedName{Namespace: namespace, Name: name}
|
||||||
if err := framework.Global.Client.Get(context.TODO(), namespaceName, jenkins); err != nil {
|
if err := framework.Global.Client.Get(context.TODO(), namespaceName, jenkins); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
|
@ -28,7 +28,7 @@ func getJenkins(t *testing.T, namespace, name string) *virtuslabv1alpha1.Jenkins
|
||||||
return jenkins
|
return jenkins
|
||||||
}
|
}
|
||||||
|
|
||||||
func getJenkinsMasterPod(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) *v1.Pod {
|
func getJenkinsMasterPod(t *testing.T, jenkins *v1alpha1.Jenkins) *v1.Pod {
|
||||||
lo := metav1.ListOptions{
|
lo := metav1.ListOptions{
|
||||||
LabelSelector: labels.SelectorFromSet(resources.BuildResourceLabels(jenkins)).String(),
|
LabelSelector: labels.SelectorFromSet(resources.BuildResourceLabels(jenkins)).String(),
|
||||||
}
|
}
|
||||||
|
|
@ -42,7 +42,7 @@ func getJenkinsMasterPod(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) *v1.P
|
||||||
return &podList.Items[0]
|
return &podList.Items[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
func createJenkinsAPIClient(jenkins *virtuslabv1alpha1.Jenkins) (*gojenkins.Jenkins, error) {
|
func createJenkinsAPIClient(jenkins *v1alpha1.Jenkins) (*gojenkins.Jenkins, error) {
|
||||||
adminSecret := &v1.Secret{}
|
adminSecret := &v1.Secret{}
|
||||||
namespaceName := types.NamespacedName{Namespace: jenkins.Namespace, Name: resources.GetOperatorCredentialsSecretName(jenkins)}
|
namespaceName := types.NamespacedName{Namespace: jenkins.Namespace, Name: resources.GetOperatorCredentialsSecretName(jenkins)}
|
||||||
if err := framework.Global.Client.Get(context.TODO(), namespaceName, adminSecret); err != nil {
|
if err := framework.Global.Client.Get(context.TODO(), namespaceName, adminSecret); err != nil {
|
||||||
|
|
@ -75,14 +75,14 @@ func createJenkinsAPIClient(jenkins *virtuslabv1alpha1.Jenkins) (*gojenkins.Jenk
|
||||||
return jenkinsClient, nil
|
return jenkinsClient, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createJenkinsCR(t *testing.T, namespace string) *virtuslabv1alpha1.Jenkins {
|
func createJenkinsCR(t *testing.T, namespace string) *v1alpha1.Jenkins {
|
||||||
jenkins := &virtuslabv1alpha1.Jenkins{
|
jenkins := &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "e2e",
|
Name: "e2e",
|
||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
},
|
},
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Master: virtuslabv1alpha1.JenkinsMaster{
|
Master: v1alpha1.JenkinsMaster{
|
||||||
Image: "jenkins/jenkins",
|
Image: "jenkins/jenkins",
|
||||||
Annotations: map[string]string{"test": "label"},
|
Annotations: map[string]string{"test": "label"},
|
||||||
},
|
},
|
||||||
|
|
@ -97,19 +97,19 @@ func createJenkinsCR(t *testing.T, namespace string) *virtuslabv1alpha1.Jenkins
|
||||||
return jenkins
|
return jenkins
|
||||||
}
|
}
|
||||||
|
|
||||||
func createJenkinsCRWithSeedJob(t *testing.T, namespace string) *virtuslabv1alpha1.Jenkins {
|
func createJenkinsCRWithSeedJob(t *testing.T, namespace string) *v1alpha1.Jenkins {
|
||||||
jenkins := &virtuslabv1alpha1.Jenkins{
|
jenkins := &v1alpha1.Jenkins{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "e2e",
|
Name: "e2e",
|
||||||
Namespace: namespace,
|
Namespace: namespace,
|
||||||
},
|
},
|
||||||
Spec: virtuslabv1alpha1.JenkinsSpec{
|
Spec: v1alpha1.JenkinsSpec{
|
||||||
Master: virtuslabv1alpha1.JenkinsMaster{
|
Master: v1alpha1.JenkinsMaster{
|
||||||
Image: "jenkins/jenkins",
|
Image: "jenkins/jenkins",
|
||||||
Annotations: map[string]string{"test": "label"},
|
Annotations: map[string]string{"test": "label"},
|
||||||
},
|
},
|
||||||
//TODO(bantoniak) add seed job with private key
|
//TODO(bantoniak) add seed job with private key
|
||||||
SeedJobs: []virtuslabv1alpha1.SeedJob{
|
SeedJobs: []v1alpha1.SeedJob{
|
||||||
{
|
{
|
||||||
ID: "jenkins-operator",
|
ID: "jenkins-operator",
|
||||||
Targets: "cicd/jobs/*.jenkins",
|
Targets: "cicd/jobs/*.jenkins",
|
||||||
|
|
@ -129,7 +129,7 @@ func createJenkinsCRWithSeedJob(t *testing.T, namespace string) *virtuslabv1alph
|
||||||
return jenkins
|
return jenkins
|
||||||
}
|
}
|
||||||
|
|
||||||
func verifyJenkinsAPIConnection(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) *gojenkins.Jenkins {
|
func verifyJenkinsAPIConnection(t *testing.T, jenkins *v1alpha1.Jenkins) *gojenkins.Jenkins {
|
||||||
client, err := createJenkinsAPIClient(jenkins)
|
client, err := createJenkinsAPIClient(jenkins)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
|
@ -139,7 +139,7 @@ func verifyJenkinsAPIConnection(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins
|
||||||
return client
|
return client
|
||||||
}
|
}
|
||||||
|
|
||||||
func restartJenkinsMasterPod(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) {
|
func restartJenkinsMasterPod(t *testing.T, jenkins *v1alpha1.Jenkins) {
|
||||||
t.Log("Restarting Jenkins master pod")
|
t.Log("Restarting Jenkins master pod")
|
||||||
jenkinsPod := getJenkinsMasterPod(t, jenkins)
|
jenkinsPod := getJenkinsMasterPod(t, jenkins)
|
||||||
err := framework.Global.Client.Delete(context.TODO(), jenkinsPod)
|
err := framework.Global.Client.Delete(context.TODO(), jenkinsPod)
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/apis"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis"
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
||||||
|
|
||||||
f "github.com/operator-framework/operator-sdk/pkg/test"
|
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)
|
t.Fatalf("could not initialize cluster resources: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
jenkinsServiceList := &virtuslabv1alpha1.JenkinsList{
|
jenkinsServiceList := &v1alpha1.JenkinsList{
|
||||||
TypeMeta: metav1.TypeMeta{
|
TypeMeta: metav1.TypeMeta{
|
||||||
Kind: virtuslabv1alpha1.Kind,
|
Kind: v1alpha1.Kind,
|
||||||
APIVersion: virtuslabv1alpha1.SchemeGroupVersion.String(),
|
APIVersion: v1alpha1.SchemeGroupVersion.String(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
err = framework.AddToFrameworkScheme(apis.AddToScheme, jenkinsServiceList)
|
err = framework.AddToFrameworkScheme(apis.AddToScheme, jenkinsServiceList)
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
|
|
||||||
framework "github.com/operator-framework/operator-sdk/pkg/test"
|
framework "github.com/operator-framework/operator-sdk/pkg/test"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
|
@ -24,8 +24,8 @@ func TestJenkinsMasterPodRestart(t *testing.T) {
|
||||||
waitForJenkinsBaseConfigurationToComplete(t, jenkins)
|
waitForJenkinsBaseConfigurationToComplete(t, jenkins)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkBaseConfigurationCompleteTimeIsNotSet(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) {
|
func checkBaseConfigurationCompleteTimeIsNotSet(t *testing.T, jenkins *v1alpha1.Jenkins) {
|
||||||
jenkinsStatus := &virtuslabv1alpha1.Jenkins{}
|
jenkinsStatus := &v1alpha1.Jenkins{}
|
||||||
namespaceName := types.NamespacedName{Namespace: jenkins.Namespace, Name: jenkins.Name}
|
namespaceName := types.NamespacedName{Namespace: jenkins.Namespace, Name: jenkins.Name}
|
||||||
err := framework.Global.Client.Get(context.TODO(), namespaceName, jenkinsStatus)
|
err := framework.Global.Client.Get(context.TODO(), namespaceName, jenkinsStatus)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/user/seedjobs"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/user/seedjobs"
|
||||||
|
|
||||||
"github.com/bndr/gojenkins"
|
"github.com/bndr/gojenkins"
|
||||||
|
|
@ -31,7 +31,7 @@ func TestUserConfiguration(t *testing.T) {
|
||||||
verifyJenkinsSeedJobs(t, client, jenkins)
|
verifyJenkinsSeedJobs(t, client, jenkins)
|
||||||
}
|
}
|
||||||
|
|
||||||
func verifyJenkinsSeedJobs(t *testing.T, client *gojenkins.Jenkins, jenkins *virtuslabv1alpha1.Jenkins) {
|
func verifyJenkinsSeedJobs(t *testing.T, client *gojenkins.Jenkins, jenkins *v1alpha1.Jenkins) {
|
||||||
t.Logf("Attempting to get configure seed job status '%v'", seedjobs.ConfigureSeedJobsName)
|
t.Logf("Attempting to get configure seed job status '%v'", seedjobs.ConfigureSeedJobsName)
|
||||||
|
|
||||||
configureSeedJobs, err := client.GetJob(seedjobs.ConfigureSeedJobsName)
|
configureSeedJobs, err := client.GetJob(seedjobs.ConfigureSeedJobsName)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
virtuslabv1alpha1 "github.com/jenkinsci/kubernetes-operator/pkg/apis/virtuslab/v1alpha1"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkinsio/v1alpha1"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources"
|
||||||
|
|
||||||
framework "github.com/operator-framework/operator-sdk/pkg/test"
|
framework "github.com/operator-framework/operator-sdk/pkg/test"
|
||||||
|
|
@ -22,11 +22,11 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
// checkConditionFunc is used to check if a condition for the jenkins CR is true
|
// checkConditionFunc is used to check if a condition for the jenkins CR is true
|
||||||
type checkConditionFunc func(*virtuslabv1alpha1.Jenkins) bool
|
type checkConditionFunc func(*v1alpha1.Jenkins) bool
|
||||||
|
|
||||||
func waitForJenkinsBaseConfigurationToComplete(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) {
|
func waitForJenkinsBaseConfigurationToComplete(t *testing.T, jenkins *v1alpha1.Jenkins) {
|
||||||
t.Log("Waiting for Jenkins base configuration to complete")
|
t.Log("Waiting for Jenkins base configuration to complete")
|
||||||
_, err := WaitUntilJenkinsConditionTrue(retryInterval, 150, jenkins, func(jenkins *virtuslabv1alpha1.Jenkins) bool {
|
_, err := WaitUntilJenkinsConditionTrue(retryInterval, 150, jenkins, func(jenkins *v1alpha1.Jenkins) bool {
|
||||||
t.Logf("Current Jenkins status '%+v'", jenkins.Status)
|
t.Logf("Current Jenkins status '%+v'", jenkins.Status)
|
||||||
return jenkins.Status.BaseConfigurationCompletedTime != nil
|
return jenkins.Status.BaseConfigurationCompletedTime != nil
|
||||||
})
|
})
|
||||||
|
|
@ -36,7 +36,7 @@ func waitForJenkinsBaseConfigurationToComplete(t *testing.T, jenkins *virtuslabv
|
||||||
t.Log("Jenkins pod is running")
|
t.Log("Jenkins pod is running")
|
||||||
}
|
}
|
||||||
|
|
||||||
func waitForRecreateJenkinsMasterPod(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) {
|
func waitForRecreateJenkinsMasterPod(t *testing.T, jenkins *v1alpha1.Jenkins) {
|
||||||
err := wait.Poll(retryInterval, 30*retryInterval, func() (bool, error) {
|
err := wait.Poll(retryInterval, 30*retryInterval, func() (bool, error) {
|
||||||
lo := metav1.ListOptions{
|
lo := metav1.ListOptions{
|
||||||
LabelSelector: labels.SelectorFromSet(resources.BuildResourceLabels(jenkins)).String(),
|
LabelSelector: labels.SelectorFromSet(resources.BuildResourceLabels(jenkins)).String(),
|
||||||
|
|
@ -57,9 +57,9 @@ func waitForRecreateJenkinsMasterPod(t *testing.T, jenkins *virtuslabv1alpha1.Je
|
||||||
t.Log("Jenkins pod has been recreated")
|
t.Log("Jenkins pod has been recreated")
|
||||||
}
|
}
|
||||||
|
|
||||||
func waitForJenkinsUserConfigurationToComplete(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) {
|
func waitForJenkinsUserConfigurationToComplete(t *testing.T, jenkins *v1alpha1.Jenkins) {
|
||||||
t.Log("Waiting for Jenkins user configuration to complete")
|
t.Log("Waiting for Jenkins user configuration to complete")
|
||||||
_, err := WaitUntilJenkinsConditionTrue(retryInterval, 30, jenkins, func(jenkins *virtuslabv1alpha1.Jenkins) bool {
|
_, err := WaitUntilJenkinsConditionTrue(retryInterval, 30, jenkins, func(jenkins *v1alpha1.Jenkins) bool {
|
||||||
t.Logf("Current Jenkins status '%+v'", jenkins.Status)
|
t.Logf("Current Jenkins status '%+v'", jenkins.Status)
|
||||||
return jenkins.Status.UserConfigurationCompletedTime != nil
|
return jenkins.Status.UserConfigurationCompletedTime != nil
|
||||||
})
|
})
|
||||||
|
|
@ -70,8 +70,8 @@ func waitForJenkinsUserConfigurationToComplete(t *testing.T, jenkins *virtuslabv
|
||||||
}
|
}
|
||||||
|
|
||||||
// WaitUntilJenkinsConditionTrue retries until the specified condition check becomes true for the jenkins CR
|
// WaitUntilJenkinsConditionTrue retries until the specified condition check becomes true for the jenkins CR
|
||||||
func WaitUntilJenkinsConditionTrue(retryInterval time.Duration, retries int, jenkins *virtuslabv1alpha1.Jenkins, checkCondition checkConditionFunc) (*virtuslabv1alpha1.Jenkins, error) {
|
func WaitUntilJenkinsConditionTrue(retryInterval time.Duration, retries int, jenkins *v1alpha1.Jenkins, checkCondition checkConditionFunc) (*v1alpha1.Jenkins, error) {
|
||||||
jenkinsStatus := &virtuslabv1alpha1.Jenkins{}
|
jenkinsStatus := &v1alpha1.Jenkins{}
|
||||||
err := wait.Poll(retryInterval, time.Duration(retries)*retryInterval, func() (bool, error) {
|
err := wait.Poll(retryInterval, time.Duration(retries)*retryInterval, func() (bool, error) {
|
||||||
namespacedName := types.NamespacedName{Namespace: jenkins.Namespace, Name: jenkins.Name}
|
namespacedName := types.NamespacedName{Namespace: jenkins.Namespace, Name: jenkins.Name}
|
||||||
err := framework.Global.Client.Get(goctx.TODO(), namespacedName, jenkinsStatus)
|
err := framework.Global.Client.Get(goctx.TODO(), namespacedName, jenkinsStatus)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue