diff --git a/pkg/apis/jenkinsio/v1alpha1/jenkins_types.go b/pkg/apis/jenkinsio/v1alpha1/jenkins_types.go index 4a828442..ac7fa218 100644 --- a/pkg/apis/jenkinsio/v1alpha1/jenkins_types.go +++ b/pkg/apis/jenkinsio/v1alpha1/jenkins_types.go @@ -48,6 +48,7 @@ type Service struct { type JenkinsStatus struct { // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster // Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file + OperatorVersion string `json:"operatorVersion,omitempty"` ProvisionStartTime *metav1.Time `json:"provisionStartTime,omitempty"` BaseConfigurationCompletedTime *metav1.Time `json:"baseConfigurationCompletedTime,omitempty"` UserConfigurationCompletedTime *metav1.Time `json:"userConfigurationCompletedTime,omitempty"` diff --git a/pkg/controller/jenkins/configuration/base/reconcile.go b/pkg/controller/jenkins/configuration/base/reconcile.go index c6775376..96e7642f 100644 --- a/pkg/controller/jenkins/configuration/base/reconcile.go +++ b/pkg/controller/jenkins/configuration/base/reconcile.go @@ -13,6 +13,7 @@ import ( "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/groovy" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins" "github.com/jenkinsci/kubernetes-operator/pkg/log" + "github.com/jenkinsci/kubernetes-operator/version" "github.com/bndr/gojenkins" "github.com/go-logr/logr" @@ -373,6 +374,12 @@ func isPodTerminating(pod corev1.Pod) bool { } func (r *ReconcileJenkinsBaseConfiguration) isRecreatePodNeeded(currentJenkinsMasterPod corev1.Pod) bool { + if version.Version != r.jenkins.Status.OperatorVersion { + r.logger.Info(fmt.Sprintf("Jenkins Operator version has changed, actual '%+v' new '%+v' - recreating pod", + r.jenkins.Status.OperatorVersion, version.Version)) + return true + } + if currentJenkinsMasterPod.Status.Phase == corev1.PodFailed || currentJenkinsMasterPod.Status.Phase == corev1.PodSucceeded || currentJenkinsMasterPod.Status.Phase == corev1.PodUnknown { diff --git a/pkg/controller/jenkins/jenkins_controller.go b/pkg/controller/jenkins/jenkins_controller.go index 1c594500..c387e622 100644 --- a/pkg/controller/jenkins/jenkins_controller.go +++ b/pkg/controller/jenkins/jenkins_controller.go @@ -12,6 +12,7 @@ import ( "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/plugins" "github.com/jenkinsci/kubernetes-operator/pkg/event" "github.com/jenkinsci/kubernetes-operator/pkg/log" + "github.com/jenkinsci/kubernetes-operator/version" "github.com/go-logr/logr" "github.com/pkg/errors" @@ -231,6 +232,16 @@ func (r *ReconcileJenkins) setDefaults(jenkins *v1alpha1.Jenkins, logger logr.Lo changed = true jenkins.Spec.Master.OperatorPlugins = plugins.BasePlugins() } + if len(jenkins.Status.OperatorVersion) > 0 && version.Version != jenkins.Status.OperatorVersion { + logger.Info("Setting default operator plugins after Operator version change") + changed = true + jenkins.Spec.Master.OperatorPlugins = plugins.BasePlugins() + } + if len(jenkins.Status.OperatorVersion) == 0 { + logger.Info("Setting operator version") + changed = true + jenkins.Status.OperatorVersion = version.Version + } if len(jenkins.Spec.Master.Plugins) == 0 { changed = true jenkins.Spec.Master.Plugins = map[string][]string{"simple-theme-plugin:0.5.1": {}}