mirror of
https://github.com/jenkinsci/kubernetes-operator.git
synced 2026-10-18 05:54:47 +02:00
update to go1.24
This commit is contained in:
@@ -74,11 +74,11 @@ func New(configuration configuration.Configuration, logger logr.Logger) *BackupA
|
||||
func (bar *BackupAndRestore) Validate() []string {
|
||||
var messages []string
|
||||
allContainers := map[string]v1alpha2.Container{}
|
||||
for _, container := range bar.Configuration.Jenkins.Spec.Master.Containers {
|
||||
for _, container := range bar.Jenkins.Spec.Master.Containers {
|
||||
allContainers[container.Name] = container
|
||||
}
|
||||
|
||||
restore := bar.Configuration.Jenkins.Spec.Restore
|
||||
restore := bar.Jenkins.Spec.Restore
|
||||
if len(restore.ContainerName) > 0 {
|
||||
_, found := allContainers[restore.ContainerName]
|
||||
if !found {
|
||||
@@ -89,7 +89,7 @@ func (bar *BackupAndRestore) Validate() []string {
|
||||
}
|
||||
}
|
||||
|
||||
backup := bar.Configuration.Jenkins.Spec.Backup
|
||||
backup := bar.Jenkins.Spec.Backup
|
||||
if len(backup.ContainerName) > 0 {
|
||||
_, found := allContainers[backup.ContainerName]
|
||||
if !found {
|
||||
@@ -118,7 +118,7 @@ const noBackup = "-1"
|
||||
|
||||
// Restore performs Jenkins restore backup operation
|
||||
func (bar *BackupAndRestore) Restore(jenkinsClient jenkinsclient.Jenkins) error {
|
||||
jenkins := bar.Configuration.Jenkins
|
||||
jenkins := bar.Jenkins
|
||||
if len(jenkins.Spec.Restore.ContainerName) == 0 || jenkins.Spec.Restore.Action.Exec == nil {
|
||||
bar.logger.V(log.VDebug).Info("Skipping restore backup, backup restore not configured")
|
||||
return nil
|
||||
@@ -195,7 +195,7 @@ func (bar *BackupAndRestore) Restore(jenkinsClient jenkinsclient.Jenkins) error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
bar.Configuration.Jenkins = jenkins
|
||||
bar.Jenkins = jenkins
|
||||
|
||||
jenkins.Status.RestoredBackup = backupNumber
|
||||
jenkins.Status.PendingBackup = backupNumber + 1
|
||||
@@ -207,7 +207,7 @@ func (bar *BackupAndRestore) Restore(jenkinsClient jenkinsclient.Jenkins) error
|
||||
|
||||
// Backup performs Jenkins backup operation
|
||||
func (bar *BackupAndRestore) Backup(setBackupDoneBeforePodDeletion bool) error {
|
||||
jenkins := bar.Configuration.Jenkins
|
||||
jenkins := bar.Jenkins
|
||||
if len(jenkins.Spec.Backup.ContainerName) == 0 || jenkins.Spec.Backup.Action.Exec == nil {
|
||||
bar.logger.V(log.VDebug).Info("Skipping backup, backup creation not configured")
|
||||
return nil
|
||||
@@ -268,9 +268,9 @@ func triggerBackup(ticker *time.Ticker, k8sClient k8s.Client, logger logr.Logger
|
||||
|
||||
// EnsureBackupTrigger creates or update trigger which update CR to make backup
|
||||
func (bar *BackupAndRestore) EnsureBackupTrigger() error {
|
||||
trigger, found := triggers.get(bar.Configuration.Jenkins.Namespace, bar.Configuration.Jenkins.Name)
|
||||
trigger, found := triggers.get(bar.Jenkins.Namespace, bar.Jenkins.Name)
|
||||
|
||||
isBackupConfigured := len(bar.Configuration.Jenkins.Spec.Backup.ContainerName) > 0 && bar.Configuration.Jenkins.Spec.Backup.Interval > 0
|
||||
isBackupConfigured := len(bar.Jenkins.Spec.Backup.ContainerName) > 0 && bar.Jenkins.Spec.Backup.Interval > 0
|
||||
if found && !isBackupConfigured {
|
||||
bar.StopBackupTrigger()
|
||||
return nil
|
||||
@@ -282,7 +282,7 @@ func (bar *BackupAndRestore) EnsureBackupTrigger() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
if found && isBackupConfigured && bar.Configuration.Jenkins.Spec.Backup.Interval != trigger.interval {
|
||||
if found && isBackupConfigured && bar.Jenkins.Spec.Backup.Interval != trigger.interval {
|
||||
bar.StopBackupTrigger()
|
||||
bar.startBackupTrigger()
|
||||
}
|
||||
@@ -292,21 +292,21 @@ func (bar *BackupAndRestore) EnsureBackupTrigger() error {
|
||||
|
||||
// StopBackupTrigger stops trigger which update CR to make backup
|
||||
func (bar *BackupAndRestore) StopBackupTrigger() {
|
||||
triggers.stop(bar.logger, bar.Configuration.Jenkins.Namespace, bar.Configuration.Jenkins.Name)
|
||||
triggers.stop(bar.logger, bar.Jenkins.Namespace, bar.Jenkins.Name)
|
||||
}
|
||||
|
||||
// IsBackupTriggerEnabled returns true if the backup trigger is enabled
|
||||
func (bar *BackupAndRestore) IsBackupTriggerEnabled() bool {
|
||||
_, enabled := triggers.get(bar.Configuration.Jenkins.Namespace, bar.Configuration.Jenkins.Name)
|
||||
_, enabled := triggers.get(bar.Jenkins.Namespace, bar.Jenkins.Name)
|
||||
return enabled
|
||||
}
|
||||
|
||||
func (bar *BackupAndRestore) startBackupTrigger() {
|
||||
bar.logger.Info("Starting backup trigger")
|
||||
ticker := time.NewTicker(time.Duration(bar.Configuration.Jenkins.Spec.Backup.Interval) * time.Second)
|
||||
triggers.add(bar.Configuration.Jenkins.Namespace, bar.Configuration.Jenkins.Name, backupTrigger{
|
||||
interval: bar.Configuration.Jenkins.Spec.Backup.Interval,
|
||||
ticker := time.NewTicker(time.Duration(bar.Jenkins.Spec.Backup.Interval) * time.Second)
|
||||
triggers.add(bar.Jenkins.Namespace, bar.Jenkins.Name, backupTrigger{
|
||||
interval: bar.Jenkins.Spec.Backup.Interval,
|
||||
ticker: ticker,
|
||||
})
|
||||
go triggerBackup(ticker, bar.Client, bar.logger, bar.Configuration.Jenkins.Namespace, bar.Configuration.Jenkins.Name)
|
||||
go triggerBackup(ticker, bar.Client, bar.logger, bar.Jenkins.Namespace, bar.Jenkins.Name)
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
)
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) createScriptsConfigMap(meta metav1.ObjectMeta) error {
|
||||
configMap, err := resources.NewScriptsConfigMap(meta, r.Configuration.Jenkins)
|
||||
configMap, err := resources.NewScriptsConfigMap(meta, r.Jenkins)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -16,7 +16,7 @@ func (r *JenkinsBaseConfigurationReconciler) createScriptsConfigMap(meta metav1.
|
||||
}
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) createInitConfigurationConfigMap(meta metav1.ObjectMeta) error {
|
||||
configMap, err := resources.NewInitConfigurationConfigMap(meta, r.Configuration.Jenkins)
|
||||
configMap, err := resources.NewInitConfigurationConfigMap(meta, r.Jenkins)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -24,7 +24,7 @@ func (r *JenkinsBaseConfigurationReconciler) createInitConfigurationConfigMap(me
|
||||
}
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) createBaseConfigurationConfigMap(meta metav1.ObjectMeta) error {
|
||||
configMap, err := resources.NewBaseConfigurationConfigMap(meta, r.Configuration.Jenkins, r.KubernetesClusterDomain)
|
||||
configMap, err := resources.NewBaseConfigurationConfigMap(meta, r.Jenkins, r.KubernetesClusterDomain)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -24,9 +24,9 @@ func (r *JenkinsBaseConfigurationReconciler) ensureJenkinsDeployment(meta metav1
|
||||
|
||||
_, err = r.GetJenkinsDeployment()
|
||||
if apierrors.IsNotFound(err) {
|
||||
jenkinsDeployment := resources.NewJenkinsDeployment(meta, r.Configuration.Jenkins)
|
||||
jenkinsDeployment := resources.NewJenkinsDeployment(meta, r.Jenkins)
|
||||
*r.Notifications <- event.Event{
|
||||
Jenkins: *r.Configuration.Jenkins,
|
||||
Jenkins: *r.Jenkins,
|
||||
Phase: event.PhaseBase,
|
||||
Level: v1alpha2.NotificationLevelInfo,
|
||||
Reason: reason.NewPodCreation(reason.OperatorSource, []string{"Creating a Jenkins Deployment"}),
|
||||
@@ -39,14 +39,14 @@ func (r *JenkinsBaseConfigurationReconciler) ensureJenkinsDeployment(meta metav1
|
||||
}
|
||||
|
||||
now := metav1.Now()
|
||||
r.Configuration.Jenkins.Status = v1alpha2.JenkinsStatus{
|
||||
r.Jenkins.Status = v1alpha2.JenkinsStatus{
|
||||
OperatorVersion: version.Version,
|
||||
ProvisionStartTime: &now,
|
||||
LastBackup: r.Configuration.Jenkins.Status.LastBackup,
|
||||
PendingBackup: r.Configuration.Jenkins.Status.LastBackup,
|
||||
LastBackup: r.Jenkins.Status.LastBackup,
|
||||
PendingBackup: r.Jenkins.Status.LastBackup,
|
||||
UserAndPasswordHash: userAndPasswordHash,
|
||||
}
|
||||
return reconcile.Result{Requeue: true}, r.Client.Update(context.TODO(), r.Configuration.Jenkins)
|
||||
return reconcile.Result{Requeue: true}, r.Client.Update(context.TODO(), r.Jenkins)
|
||||
} else if err != nil && !apierrors.IsNotFound(err) {
|
||||
return reconcile.Result{}, stackerr.WithStack(err)
|
||||
}
|
||||
|
||||
@@ -12,21 +12,21 @@ import (
|
||||
)
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) addLabelForWatchesResources(customization v1alpha2.Customization) error {
|
||||
labelsForWatchedResources := resources.BuildLabelsForWatchedResources(*r.Configuration.Jenkins)
|
||||
labelsForWatchedResources := resources.BuildLabelsForWatchedResources(*r.Jenkins)
|
||||
|
||||
if len(customization.Secret.Name) > 0 {
|
||||
secret := &corev1.Secret{}
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: customization.Secret.Name, Namespace: r.Configuration.Jenkins.Namespace}, secret)
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: customization.Secret.Name, Namespace: r.Jenkins.Namespace}, secret)
|
||||
if err != nil {
|
||||
return stackerr.WithStack(err)
|
||||
}
|
||||
|
||||
if !resources.VerifyIfLabelsAreSet(secret, labelsForWatchedResources) {
|
||||
if len(secret.ObjectMeta.Labels) == 0 {
|
||||
secret.ObjectMeta.Labels = map[string]string{}
|
||||
if len(secret.Labels) == 0 {
|
||||
secret.Labels = map[string]string{}
|
||||
}
|
||||
for key, value := range labelsForWatchedResources {
|
||||
secret.ObjectMeta.Labels[key] = value
|
||||
secret.Labels[key] = value
|
||||
}
|
||||
|
||||
if err = r.Client.Update(context.TODO(), secret); err != nil {
|
||||
@@ -37,17 +37,17 @@ func (r *JenkinsBaseConfigurationReconciler) addLabelForWatchesResources(customi
|
||||
|
||||
for _, configMapRef := range customization.Configurations {
|
||||
configMap := &corev1.ConfigMap{}
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: configMapRef.Name, Namespace: r.Configuration.Jenkins.Namespace}, configMap)
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: configMapRef.Name, Namespace: r.Jenkins.Namespace}, configMap)
|
||||
if err != nil {
|
||||
return stackerr.WithStack(err)
|
||||
}
|
||||
|
||||
if !resources.VerifyIfLabelsAreSet(configMap, labelsForWatchedResources) {
|
||||
if len(configMap.ObjectMeta.Labels) == 0 {
|
||||
configMap.ObjectMeta.Labels = map[string]string{}
|
||||
if len(configMap.Labels) == 0 {
|
||||
configMap.Labels = map[string]string{}
|
||||
}
|
||||
for key, value := range labelsForWatchedResources {
|
||||
configMap.ObjectMeta.Labels[key] = value
|
||||
configMap.Labels[key] = value
|
||||
}
|
||||
|
||||
if err = r.Client.Update(context.TODO(), configMap); err != nil {
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
)
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) verifyPlugins(jenkinsClient jenkinsclient.Jenkins) (bool, error) {
|
||||
if r.Configuration.Jenkins.Spec.Master.SkipPlugins != nil && *r.Configuration.Jenkins.Spec.Master.SkipPlugins {
|
||||
if r.Jenkins.Spec.Master.SkipPlugins != nil && *r.Jenkins.Spec.Master.SkipPlugins {
|
||||
return true, nil
|
||||
}
|
||||
allPluginsInJenkins, err := jenkinsClient.GetPlugins(fetchAllPlugins)
|
||||
@@ -30,7 +30,7 @@ func (r *JenkinsBaseConfigurationReconciler) verifyPlugins(jenkinsClient jenkins
|
||||
r.logger.V(log.VDebug).Info(fmt.Sprintf("Installed plugins '%+v'", installedPlugins))
|
||||
|
||||
status := true
|
||||
allRequiredPlugins := [][]v1alpha2.Plugin{r.Configuration.Jenkins.Spec.Master.BasePlugins, r.Configuration.Jenkins.Spec.Master.Plugins}
|
||||
allRequiredPlugins := [][]v1alpha2.Plugin{r.Jenkins.Spec.Master.BasePlugins, r.Jenkins.Spec.Master.Plugins}
|
||||
for _, requiredPlugins := range allRequiredPlugins {
|
||||
for _, plugin := range requiredPlugins {
|
||||
if _, ok := isPluginInstalled(allPluginsInJenkins, plugin); !ok {
|
||||
|
||||
@@ -32,83 +32,83 @@ func (r *JenkinsBaseConfigurationReconciler) checkForPodRecreation(currentJenkin
|
||||
return reason.NewPodRestart(reason.KubernetesSource, messages, verbose...)
|
||||
}
|
||||
|
||||
userAndPasswordHashIsDifferent := userAndPasswordHash != r.Configuration.Jenkins.Status.UserAndPasswordHash
|
||||
userAndPasswordHashStatusNotEmpty := r.Configuration.Jenkins.Status.UserAndPasswordHash != ""
|
||||
userAndPasswordHashIsDifferent := userAndPasswordHash != r.Jenkins.Status.UserAndPasswordHash
|
||||
userAndPasswordHashStatusNotEmpty := r.Jenkins.Status.UserAndPasswordHash != ""
|
||||
|
||||
if userAndPasswordHashIsDifferent && userAndPasswordHashStatusNotEmpty {
|
||||
messages = append(messages, "User or password have changed")
|
||||
verbose = append(verbose, "User or password have changed, recreating pod")
|
||||
}
|
||||
|
||||
if r.Configuration.Jenkins.Spec.Restore.RecoveryOnce != 0 && r.Configuration.Jenkins.Status.RestoredBackup != 0 {
|
||||
if r.Jenkins.Spec.Restore.RecoveryOnce != 0 && r.Jenkins.Status.RestoredBackup != 0 {
|
||||
messages = append(messages, "spec.restore.recoveryOnce is set")
|
||||
verbose = append(verbose, "spec.restore.recoveryOnce is set, recreating pod")
|
||||
}
|
||||
|
||||
if version.Version != r.Configuration.Jenkins.Status.OperatorVersion {
|
||||
if version.Version != r.Jenkins.Status.OperatorVersion {
|
||||
messages = append(messages, "Jenkins Operator version has changed")
|
||||
verbose = append(verbose, fmt.Sprintf("Jenkins Operator version has changed, actual '%+v' new '%+v'",
|
||||
r.Configuration.Jenkins.Status.OperatorVersion, version.Version))
|
||||
r.Jenkins.Status.OperatorVersion, version.Version))
|
||||
}
|
||||
|
||||
//FIXME too hacky
|
||||
var jenkinsSecurityContext *corev1.PodSecurityContext
|
||||
if r.Configuration.Jenkins.Spec.Master.SecurityContext == nil {
|
||||
if r.Jenkins.Spec.Master.SecurityContext == nil {
|
||||
jenkinsSecurityContext = &corev1.PodSecurityContext{}
|
||||
} else {
|
||||
jenkinsSecurityContext = r.Configuration.Jenkins.Spec.Master.SecurityContext
|
||||
jenkinsSecurityContext = r.Jenkins.Spec.Master.SecurityContext
|
||||
}
|
||||
if !reflect.DeepEqual(jenkinsSecurityContext, currentJenkinsMasterPod.Spec.SecurityContext) {
|
||||
messages = append(messages, "Jenkins pod security context has changed")
|
||||
verbose = append(verbose, fmt.Sprintf("Jenkins pod security context has changed, actual '%+v' required '%+v'",
|
||||
currentJenkinsMasterPod.Spec.SecurityContext, r.Configuration.Jenkins.Spec.Master.SecurityContext))
|
||||
currentJenkinsMasterPod.Spec.SecurityContext, r.Jenkins.Spec.Master.SecurityContext))
|
||||
}
|
||||
|
||||
if !compareImagePullSecrets(r.Configuration.Jenkins.Spec.Master.ImagePullSecrets, currentJenkinsMasterPod.Spec.ImagePullSecrets) {
|
||||
if !compareImagePullSecrets(r.Jenkins.Spec.Master.ImagePullSecrets, currentJenkinsMasterPod.Spec.ImagePullSecrets) {
|
||||
messages = append(messages, "Jenkins Pod ImagePullSecrets has changed")
|
||||
verbose = append(verbose, fmt.Sprintf("Jenkins Pod ImagePullSecrets has changed, actual '%+v' required '%+v'",
|
||||
currentJenkinsMasterPod.Spec.ImagePullSecrets, r.Configuration.Jenkins.Spec.Master.ImagePullSecrets))
|
||||
currentJenkinsMasterPod.Spec.ImagePullSecrets, r.Jenkins.Spec.Master.ImagePullSecrets))
|
||||
}
|
||||
|
||||
if !compareMap(r.Configuration.Jenkins.Spec.Master.NodeSelector, currentJenkinsMasterPod.Spec.NodeSelector) {
|
||||
if !compareMap(r.Jenkins.Spec.Master.NodeSelector, currentJenkinsMasterPod.Spec.NodeSelector) {
|
||||
messages = append(messages, "Jenkins pod node selector has changed")
|
||||
verbose = append(verbose, fmt.Sprintf("Jenkins pod node selector has changed, actual '%+v' required '%+v'",
|
||||
currentJenkinsMasterPod.Spec.NodeSelector, r.Configuration.Jenkins.Spec.Master.NodeSelector))
|
||||
currentJenkinsMasterPod.Spec.NodeSelector, r.Jenkins.Spec.Master.NodeSelector))
|
||||
}
|
||||
|
||||
if !compareMap(r.Configuration.Jenkins.Spec.Master.Labels, currentJenkinsMasterPod.Labels) {
|
||||
if !compareMap(r.Jenkins.Spec.Master.Labels, currentJenkinsMasterPod.Labels) {
|
||||
messages = append(messages, "Jenkins pod labels have changed")
|
||||
verbose = append(verbose, fmt.Sprintf("Jenkins pod labels have changed, actual '%+v' required '%+v'",
|
||||
currentJenkinsMasterPod.Labels, r.Configuration.Jenkins.Spec.Master.Labels))
|
||||
currentJenkinsMasterPod.Labels, r.Jenkins.Spec.Master.Labels))
|
||||
}
|
||||
|
||||
if !compareMap(r.Configuration.Jenkins.Spec.Master.Annotations, currentJenkinsMasterPod.ObjectMeta.Annotations) {
|
||||
if !compareMap(r.Jenkins.Spec.Master.Annotations, currentJenkinsMasterPod.Annotations) {
|
||||
messages = append(messages, "Jenkins pod annotations have changed")
|
||||
verbose = append(verbose, fmt.Sprintf("Jenkins pod annotations have changed, actual '%+v' required '%+v'",
|
||||
currentJenkinsMasterPod.ObjectMeta.Annotations, r.Configuration.Jenkins.Spec.Master.Annotations))
|
||||
currentJenkinsMasterPod.Annotations, r.Jenkins.Spec.Master.Annotations))
|
||||
}
|
||||
|
||||
if !r.compareVolumes(currentJenkinsMasterPod) {
|
||||
messages = append(messages, "Jenkins pod volumes have changed")
|
||||
verbose = append(verbose, fmt.Sprintf("Jenkins pod volumes have changed, actual '%v' required '%v'",
|
||||
currentJenkinsMasterPod.Spec.Volumes, r.Configuration.Jenkins.Spec.Master.Volumes))
|
||||
currentJenkinsMasterPod.Spec.Volumes, r.Jenkins.Spec.Master.Volumes))
|
||||
}
|
||||
|
||||
if len(r.Configuration.Jenkins.Spec.Master.Containers) != len(currentJenkinsMasterPod.Spec.Containers) {
|
||||
if len(r.Jenkins.Spec.Master.Containers) != len(currentJenkinsMasterPod.Spec.Containers) {
|
||||
messages = append(messages, "Jenkins amount of containers has changed")
|
||||
verbose = append(verbose, fmt.Sprintf("Jenkins amount of containers has changed, actual '%+v' required '%+v'",
|
||||
len(currentJenkinsMasterPod.Spec.Containers), len(r.Configuration.Jenkins.Spec.Master.Containers)))
|
||||
len(currentJenkinsMasterPod.Spec.Containers), len(r.Jenkins.Spec.Master.Containers)))
|
||||
}
|
||||
|
||||
if r.Configuration.Jenkins.Spec.Master.PriorityClassName != currentJenkinsMasterPod.Spec.PriorityClassName {
|
||||
if r.Jenkins.Spec.Master.PriorityClassName != currentJenkinsMasterPod.Spec.PriorityClassName {
|
||||
messages = append(messages, "Jenkins priorityClassName has changed")
|
||||
verbose = append(verbose, fmt.Sprintf("Jenkins priorityClassName has changed, actual '%+v' required '%+v'",
|
||||
currentJenkinsMasterPod.Spec.PriorityClassName, r.Configuration.Jenkins.Spec.Master.PriorityClassName))
|
||||
currentJenkinsMasterPod.Spec.PriorityClassName, r.Jenkins.Spec.Master.PriorityClassName))
|
||||
}
|
||||
|
||||
customResourceReplaced := (r.Configuration.Jenkins.Status.BaseConfigurationCompletedTime == nil ||
|
||||
r.Configuration.Jenkins.Status.UserConfigurationCompletedTime == nil) &&
|
||||
r.Configuration.Jenkins.Status.UserAndPasswordHash == ""
|
||||
customResourceReplaced := (r.Jenkins.Status.BaseConfigurationCompletedTime == nil ||
|
||||
r.Jenkins.Status.UserConfigurationCompletedTime == nil) &&
|
||||
r.Jenkins.Status.UserAndPasswordHash == ""
|
||||
|
||||
if customResourceReplaced {
|
||||
messages = append(messages, "Jenkins CR has been replaced")
|
||||
@@ -117,14 +117,14 @@ func (r *JenkinsBaseConfigurationReconciler) checkForPodRecreation(currentJenkin
|
||||
|
||||
for _, actualContainer := range currentJenkinsMasterPod.Spec.Containers {
|
||||
if actualContainer.Name == resources.JenkinsMasterContainerName {
|
||||
containerMessages, verboseMessages := r.compareContainers(resources.NewJenkinsMasterContainer(r.Configuration.Jenkins), actualContainer)
|
||||
containerMessages, verboseMessages := r.compareContainers(resources.NewJenkinsMasterContainer(r.Jenkins), actualContainer)
|
||||
messages = append(messages, containerMessages...)
|
||||
verbose = append(verbose, verboseMessages...)
|
||||
continue
|
||||
}
|
||||
|
||||
var expectedContainer *corev1.Container
|
||||
for _, jenkinsContainer := range r.Configuration.Jenkins.Spec.Master.Containers {
|
||||
for _, jenkinsContainer := range r.Jenkins.Spec.Master.Containers {
|
||||
if jenkinsContainer.Name == actualContainer.Name {
|
||||
tmp := resources.ConvertJenkinsContainerToKubernetesContainer(jenkinsContainer)
|
||||
expectedContainer = &tmp
|
||||
@@ -153,11 +153,11 @@ func (r *JenkinsBaseConfigurationReconciler) ensureJenkinsMasterPod(meta metav1.
|
||||
}
|
||||
|
||||
// Check if this Pod already exists
|
||||
currentJenkinsMasterPod, err := r.Configuration.GetJenkinsMasterPod()
|
||||
currentJenkinsMasterPod, err := r.GetJenkinsMasterPod()
|
||||
if err != nil && apierrors.IsNotFound(err) {
|
||||
jenkinsMasterPod := resources.NewJenkinsMasterPod(meta, r.Configuration.Jenkins)
|
||||
jenkinsMasterPod := resources.NewJenkinsMasterPod(meta, r.Jenkins)
|
||||
*r.Notifications <- event.Event{
|
||||
Jenkins: *r.Configuration.Jenkins,
|
||||
Jenkins: *r.Jenkins,
|
||||
Phase: event.PhaseBase,
|
||||
Level: v1alpha2.NotificationLevelInfo,
|
||||
Reason: reason.NewPodCreation(reason.OperatorSource, []string{"Creating a new Jenkins Master Pod"}),
|
||||
@@ -169,14 +169,14 @@ func (r *JenkinsBaseConfigurationReconciler) ensureJenkinsMasterPod(meta metav1.
|
||||
}
|
||||
|
||||
now := metav1.Now()
|
||||
r.Configuration.Jenkins.Status = v1alpha2.JenkinsStatus{
|
||||
r.Jenkins.Status = v1alpha2.JenkinsStatus{
|
||||
OperatorVersion: version.Version,
|
||||
ProvisionStartTime: &now,
|
||||
LastBackup: r.Configuration.Jenkins.Status.LastBackup,
|
||||
PendingBackup: r.Configuration.Jenkins.Status.LastBackup,
|
||||
LastBackup: r.Jenkins.Status.LastBackup,
|
||||
PendingBackup: r.Jenkins.Status.LastBackup,
|
||||
UserAndPasswordHash: userAndPasswordHash,
|
||||
}
|
||||
return reconcile.Result{Requeue: true}, r.Client.Status().Update(context.TODO(), r.Configuration.Jenkins)
|
||||
return reconcile.Result{Requeue: true}, r.Client.Status().Update(context.TODO(), r.Jenkins)
|
||||
} else if err != nil && !apierrors.IsNotFound(err) {
|
||||
return reconcile.Result{}, stackerr.WithStack(err)
|
||||
}
|
||||
@@ -185,15 +185,15 @@ func (r *JenkinsBaseConfigurationReconciler) ensureJenkinsMasterPod(meta metav1.
|
||||
return reconcile.Result{Requeue: true}, nil
|
||||
}
|
||||
|
||||
if r.IsJenkinsTerminating(*currentJenkinsMasterPod) && r.Configuration.Jenkins.Status.UserConfigurationCompletedTime != nil {
|
||||
if r.IsJenkinsTerminating(*currentJenkinsMasterPod) && r.Jenkins.Status.UserConfigurationCompletedTime != nil {
|
||||
backupAndRestore := backuprestore.New(r.Configuration, r.logger)
|
||||
if backupAndRestore.IsBackupTriggerEnabled() {
|
||||
backupAndRestore.StopBackupTrigger()
|
||||
return reconcile.Result{Requeue: true}, nil
|
||||
}
|
||||
if r.Configuration.Jenkins.Spec.Backup.MakeBackupBeforePodDeletion && !r.Configuration.Jenkins.Status.BackupDoneBeforePodDeletion {
|
||||
if r.Configuration.Jenkins.Status.LastBackup == r.Configuration.Jenkins.Status.PendingBackup {
|
||||
r.Configuration.Jenkins.Status.PendingBackup++
|
||||
if r.Jenkins.Spec.Backup.MakeBackupBeforePodDeletion && !r.Jenkins.Status.BackupDoneBeforePodDeletion {
|
||||
if r.Jenkins.Status.LastBackup == r.Jenkins.Status.PendingBackup {
|
||||
r.Jenkins.Status.PendingBackup++
|
||||
}
|
||||
if err = backupAndRestore.Backup(true); err != nil {
|
||||
return reconcile.Result{}, err
|
||||
@@ -209,7 +209,7 @@ func (r *JenkinsBaseConfigurationReconciler) ensureJenkinsMasterPod(meta metav1.
|
||||
r.logger.Info(msg)
|
||||
}
|
||||
|
||||
return reconcile.Result{Requeue: true}, r.Configuration.RestartJenkinsMasterPod(restartReason)
|
||||
return reconcile.Result{Requeue: true}, r.RestartJenkinsMasterPod(restartReason)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ func (r *JenkinsBaseConfigurationReconciler) createRBAC(meta metav1.ObjectMeta)
|
||||
func (r *JenkinsBaseConfigurationReconciler) ensureExtraRBAC(meta metav1.ObjectMeta) error {
|
||||
var err error
|
||||
var name string
|
||||
for _, roleRef := range r.Configuration.Jenkins.Spec.Roles {
|
||||
for _, roleRef := range r.Jenkins.Spec.Roles {
|
||||
name = getExtraRoleBindingName(meta.Name, roleRef)
|
||||
roleBinding := resources.NewRoleBinding(name, meta.Namespace, meta.Name, roleRef)
|
||||
err := r.Client.Create(context.TODO(), roleBinding)
|
||||
@@ -55,7 +55,7 @@ func (r *JenkinsBaseConfigurationReconciler) ensureExtraRBAC(meta metav1.ObjectM
|
||||
}
|
||||
|
||||
roleBindings := &rbacv1.RoleBindingList{}
|
||||
err = r.Client.List(context.TODO(), roleBindings, client.InNamespace(r.Configuration.Jenkins.Namespace))
|
||||
err = r.Client.List(context.TODO(), roleBindings, client.InNamespace(r.Jenkins.Namespace))
|
||||
if err != nil {
|
||||
return stackerr.WithStack(err)
|
||||
}
|
||||
@@ -66,7 +66,7 @@ func (r *JenkinsBaseConfigurationReconciler) ensureExtraRBAC(meta metav1.ObjectM
|
||||
}
|
||||
|
||||
found := false
|
||||
for _, roleRef := range r.Configuration.Jenkins.Spec.Roles {
|
||||
for _, roleRef := range r.Jenkins.Spec.Roles {
|
||||
name = getExtraRoleBindingName(meta.Name, roleRef)
|
||||
if roleBinding.Name == name {
|
||||
found = true
|
||||
|
||||
@@ -50,7 +50,7 @@ func New(config configuration.Configuration, jenkinsAPIConnectionSettings jenkin
|
||||
|
||||
// Reconcile takes care of base configuration.
|
||||
func (r *JenkinsBaseConfigurationReconciler) Reconcile() (reconcile.Result, jenkinsclient.Jenkins, error) {
|
||||
metaObject := resources.NewResourceObjectMeta(r.Configuration.Jenkins)
|
||||
metaObject := resources.NewResourceObjectMeta(r.Jenkins)
|
||||
|
||||
// Create Necessary Resources
|
||||
err := r.ensureResourcesRequiredForJenkinsPod(metaObject)
|
||||
@@ -59,12 +59,12 @@ func (r *JenkinsBaseConfigurationReconciler) Reconcile() (reconcile.Result, jenk
|
||||
}
|
||||
r.logger.V(log.VDebug).Info("Kubernetes resources are present")
|
||||
|
||||
if useDeploymentForJenkinsMaster(r.Configuration.Jenkins) {
|
||||
if useDeploymentForJenkinsMaster(r.Jenkins) {
|
||||
result, err := r.ensureJenkinsDeployment(metaObject)
|
||||
if err != nil {
|
||||
return reconcile.Result{}, nil, err
|
||||
}
|
||||
if result.Requeue {
|
||||
if result.RequeueAfter > 0 {
|
||||
return result, nil, nil
|
||||
}
|
||||
r.logger.V(log.VDebug).Info("Jenkins Deployment is present")
|
||||
@@ -76,7 +76,7 @@ func (r *JenkinsBaseConfigurationReconciler) Reconcile() (reconcile.Result, jenk
|
||||
if err != nil {
|
||||
return reconcile.Result{}, nil, err
|
||||
}
|
||||
if result.Requeue {
|
||||
if result.RequeueAfter > 0 {
|
||||
return result, nil, nil
|
||||
}
|
||||
r.logger.V(log.VDebug).Info("Jenkins master pod is present")
|
||||
@@ -86,19 +86,19 @@ func (r *JenkinsBaseConfigurationReconciler) Reconcile() (reconcile.Result, jenk
|
||||
return reconcile.Result{}, nil, err
|
||||
}
|
||||
if stopReconcileLoop {
|
||||
return reconcile.Result{Requeue: false}, nil, nil
|
||||
return reconcile.Result{}, nil, nil
|
||||
}
|
||||
|
||||
result, err = r.waitForJenkins()
|
||||
if err != nil {
|
||||
return reconcile.Result{}, nil, err
|
||||
}
|
||||
if result.Requeue {
|
||||
if result.RequeueAfter > 0 {
|
||||
return result, nil, nil
|
||||
}
|
||||
r.logger.V(log.VDebug).Info("Jenkins master pod is ready")
|
||||
|
||||
jenkinsClient, err := r.Configuration.GetJenkinsClient()
|
||||
jenkinsClient, err := r.GetJenkinsClient()
|
||||
if err != nil {
|
||||
return reconcile.Result{}, nil, err
|
||||
}
|
||||
@@ -117,7 +117,7 @@ func (r *JenkinsBaseConfigurationReconciler) Reconcile() (reconcile.Result, jenk
|
||||
reason.OperatorSource,
|
||||
[]string{message},
|
||||
)
|
||||
return reconcile.Result{Requeue: true}, nil, r.Configuration.RestartJenkinsMasterPod(restartReason)
|
||||
return reconcile.Result{Requeue: true}, nil, r.RestartJenkinsMasterPod(restartReason)
|
||||
}
|
||||
|
||||
result, err = r.ensureBaseConfiguration(jenkinsClient)
|
||||
@@ -158,12 +158,12 @@ func (r *JenkinsBaseConfigurationReconciler) ensureResourcesRequiredForJenkinsPo
|
||||
}
|
||||
r.logger.V(log.VDebug).Info("Base configuration config map is present")
|
||||
|
||||
if err := r.addLabelForWatchesResources(r.Configuration.Jenkins.Spec.GroovyScripts.Customization); err != nil {
|
||||
if err := r.addLabelForWatchesResources(r.Jenkins.Spec.GroovyScripts.Customization); err != nil {
|
||||
return err
|
||||
}
|
||||
r.logger.V(log.VDebug).Info("GroovyScripts Secret and ConfigMap added watched labels")
|
||||
|
||||
if err := r.addLabelForWatchesResources(r.Configuration.Jenkins.Spec.ConfigurationAsCode.Customization); err != nil {
|
||||
if err := r.addLabelForWatchesResources(r.Jenkins.Spec.ConfigurationAsCode.Customization); err != nil {
|
||||
return err
|
||||
}
|
||||
r.logger.V(log.VDebug).Info("ConfigurationAsCode Secret and ConfigMap added watched labels")
|
||||
@@ -178,20 +178,20 @@ func (r *JenkinsBaseConfigurationReconciler) ensureResourcesRequiredForJenkinsPo
|
||||
}
|
||||
r.logger.V(log.VDebug).Info("Extra role bindings are present")
|
||||
|
||||
httpServiceName := resources.GetJenkinsHTTPServiceName(r.Configuration.Jenkins)
|
||||
if err := r.createService(metaObject, httpServiceName, r.Configuration.Jenkins.Spec.Service, constants.DefaultHTTPPortInt32); err != nil {
|
||||
httpServiceName := resources.GetJenkinsHTTPServiceName(r.Jenkins)
|
||||
if err := r.createService(metaObject, httpServiceName, r.Jenkins.Spec.Service, constants.DefaultHTTPPortInt32); err != nil {
|
||||
return err
|
||||
}
|
||||
r.logger.V(log.VDebug).Info("Jenkins HTTP Service is present")
|
||||
|
||||
if err := r.createService(metaObject, resources.GetJenkinsSlavesServiceName(r.Configuration.Jenkins), r.Configuration.Jenkins.Spec.SlaveService, constants.DefaultSlavePortInt32); err != nil {
|
||||
if err := r.createService(metaObject, resources.GetJenkinsSlavesServiceName(r.Jenkins), r.Jenkins.Spec.SlaveService, constants.DefaultSlavePortInt32); err != nil {
|
||||
return err
|
||||
}
|
||||
r.logger.V(log.VDebug).Info("Jenkins slave Service is present")
|
||||
|
||||
if resources.IsRouteAPIAvailable(&r.ClientSet) {
|
||||
r.logger.V(log.VDebug).Info("Route API is available. Now creating route.")
|
||||
if err := r.createRoute(metaObject, httpServiceName, r.Configuration.Jenkins); err != nil {
|
||||
if err := r.createRoute(metaObject, httpServiceName, r.Jenkins); err != nil {
|
||||
return err
|
||||
}
|
||||
r.logger.V(log.VDebug).Info("Jenkins Route is present")
|
||||
@@ -202,10 +202,10 @@ func (r *JenkinsBaseConfigurationReconciler) ensureResourcesRequiredForJenkinsPo
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) createOperatorCredentialsSecret(meta metav1.ObjectMeta) error {
|
||||
found := &corev1.Secret{}
|
||||
err := r.Configuration.Client.Get(context.TODO(), types.NamespacedName{Name: resources.GetOperatorCredentialsSecretName(r.Configuration.Jenkins), Namespace: r.Configuration.Jenkins.ObjectMeta.Namespace}, found)
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: resources.GetOperatorCredentialsSecretName(r.Jenkins), Namespace: r.Jenkins.Namespace}, found)
|
||||
|
||||
if err != nil && apierrors.IsNotFound(err) {
|
||||
return stackerr.WithStack(r.CreateResource(resources.NewOperatorCredentialsSecret(meta, r.Configuration.Jenkins)))
|
||||
return stackerr.WithStack(r.CreateResource(resources.NewOperatorCredentialsSecret(meta, r.Jenkins)))
|
||||
} else if err != nil && !apierrors.IsNotFound(err) {
|
||||
return stackerr.WithStack(err)
|
||||
}
|
||||
@@ -214,12 +214,12 @@ func (r *JenkinsBaseConfigurationReconciler) createOperatorCredentialsSecret(met
|
||||
found.Data[resources.OperatorCredentialsSecretPasswordKey] != nil {
|
||||
return nil
|
||||
}
|
||||
return stackerr.WithStack(r.UpdateResource(resources.NewOperatorCredentialsSecret(meta, r.Configuration.Jenkins)))
|
||||
return stackerr.WithStack(r.UpdateResource(resources.NewOperatorCredentialsSecret(meta, r.Jenkins)))
|
||||
}
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) calculateUserAndPasswordHash() (string, error) {
|
||||
credentialsSecret := &corev1.Secret{}
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: resources.GetOperatorCredentialsSecretName(r.Configuration.Jenkins), Namespace: r.Configuration.Jenkins.ObjectMeta.Namespace}, credentialsSecret)
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: resources.GetOperatorCredentialsSecretName(r.Jenkins), Namespace: r.Jenkins.Namespace}, credentialsSecret)
|
||||
if err != nil {
|
||||
return "", stackerr.WithStack(err)
|
||||
}
|
||||
@@ -309,27 +309,27 @@ func (r *JenkinsBaseConfigurationReconciler) compareVolumes(actualPod corev1.Pod
|
||||
}
|
||||
|
||||
return reflect.DeepEqual(
|
||||
append(resources.GetJenkinsMasterPodBaseVolumes(r.Configuration.Jenkins), r.Configuration.Jenkins.Spec.Master.Volumes...),
|
||||
append(resources.GetJenkinsMasterPodBaseVolumes(r.Jenkins), r.Jenkins.Spec.Master.Volumes...),
|
||||
toCompare,
|
||||
)
|
||||
}
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) detectJenkinsMasterPodStartingIssues() (stopReconcileLoop bool, err error) {
|
||||
jenkinsMasterPod, err := r.Configuration.GetJenkinsMasterPod()
|
||||
jenkinsMasterPod, err := r.GetJenkinsMasterPod()
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
if r.Configuration.Jenkins.Status.ProvisionStartTime == nil {
|
||||
if r.Jenkins.Status.ProvisionStartTime == nil {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
if jenkinsMasterPod.Status.Phase == corev1.PodPending {
|
||||
timeout := r.Configuration.Jenkins.Status.ProvisionStartTime.Add(time.Minute * 2).UTC()
|
||||
timeout := r.Jenkins.Status.ProvisionStartTime.Add(time.Minute * 2).UTC()
|
||||
now := time.Now().UTC()
|
||||
if now.After(timeout) {
|
||||
events := &corev1.EventList{}
|
||||
err = r.Client.List(context.TODO(), events, client.InNamespace(r.Configuration.Jenkins.Namespace))
|
||||
err = r.Client.List(context.TODO(), events, client.InNamespace(r.Jenkins.Namespace))
|
||||
if err != nil {
|
||||
return false, stackerr.WithStack(err)
|
||||
}
|
||||
@@ -351,13 +351,13 @@ func (r *JenkinsBaseConfigurationReconciler) detectJenkinsMasterPodStartingIssue
|
||||
func (r *JenkinsBaseConfigurationReconciler) filterEvents(source corev1.EventList, jenkinsMasterPod corev1.Pod) []string {
|
||||
events := []string{}
|
||||
for _, eventItem := range source.Items {
|
||||
if r.Configuration.Jenkins.Status.ProvisionStartTime.UTC().After(eventItem.LastTimestamp.UTC()) {
|
||||
if r.Jenkins.Status.ProvisionStartTime.UTC().After(eventItem.LastTimestamp.UTC()) {
|
||||
continue
|
||||
}
|
||||
if eventItem.Type == corev1.EventTypeNormal {
|
||||
continue
|
||||
}
|
||||
if !strings.HasPrefix(eventItem.ObjectMeta.Name, jenkinsMasterPod.Name) {
|
||||
if !strings.HasPrefix(eventItem.Name, jenkinsMasterPod.Name) {
|
||||
continue
|
||||
}
|
||||
events = append(events, fmt.Sprintf("Message: %s Subobject: %s", eventItem.Message, eventItem.InvolvedObject.FieldPath))
|
||||
@@ -366,7 +366,7 @@ func (r *JenkinsBaseConfigurationReconciler) filterEvents(source corev1.EventLis
|
||||
}
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) waitForJenkins() (reconcile.Result, error) {
|
||||
jenkinsMasterPod, err := r.Configuration.GetJenkinsMasterPod()
|
||||
jenkinsMasterPod, err := r.GetJenkinsMasterPod()
|
||||
if err != nil {
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
@@ -391,7 +391,7 @@ func (r *JenkinsBaseConfigurationReconciler) waitForJenkins() (reconcile.Result,
|
||||
reason.KubernetesSource,
|
||||
[]string{message},
|
||||
)
|
||||
return reconcile.Result{Requeue: true}, r.Configuration.RestartJenkinsMasterPod(restartReason)
|
||||
return reconcile.Result{Requeue: true}, r.RestartJenkinsMasterPod(restartReason)
|
||||
}
|
||||
if !containerStatus.Ready {
|
||||
r.logger.V(log.VDebug).Info(fmt.Sprintf("Container '%s' not ready, readiness probe failed", containerStatus.Name))
|
||||
@@ -410,10 +410,10 @@ func (r *JenkinsBaseConfigurationReconciler) ensureBaseConfiguration(jenkinsClie
|
||||
customization := v1alpha2.GroovyScripts{
|
||||
Customization: v1alpha2.Customization{
|
||||
Secret: v1alpha2.SecretRef{Name: ""},
|
||||
Configurations: []v1alpha2.ConfigMapRef{{Name: resources.GetBaseConfigurationConfigMapName(r.Configuration.Jenkins)}},
|
||||
Configurations: []v1alpha2.ConfigMapRef{{Name: resources.GetBaseConfigurationConfigMapName(r.Jenkins)}},
|
||||
},
|
||||
}
|
||||
groovyClient := groovy.New(jenkinsClient, r.Client, r.Configuration.Jenkins, "base-groovy", customization.Customization)
|
||||
groovyClient := groovy.New(jenkinsClient, r.Client, r.Jenkins, "base-groovy", customization.Customization)
|
||||
requeue, err := groovyClient.Ensure(func(name string) bool {
|
||||
return strings.HasSuffix(name, ".groovy")
|
||||
}, func(groovyScript string) string {
|
||||
|
||||
@@ -154,7 +154,7 @@ GlobalConfiguration.all().get(GlobalJobDslSecurityConfiguration.class).save()
|
||||
|
||||
// GetBaseConfigurationConfigMapName returns name of Kubernetes config map used to base configuration.
|
||||
func GetBaseConfigurationConfigMapName(jenkins *v1alpha2.Jenkins) string {
|
||||
return fmt.Sprintf("%s-base-configuration-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
||||
return fmt.Sprintf("%s-base-configuration-%s", constants.OperatorName, jenkins.Name)
|
||||
}
|
||||
|
||||
// NewBaseConfigurationConfigMap builds Kubernetes config map used to base configuration.
|
||||
@@ -183,7 +183,7 @@ func NewBaseConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jen
|
||||
disableInsecureFeaturesGroovyScriptName: disableInsecureFeatures,
|
||||
configureKubernetesPluginGroovyScriptName: fmt.Sprintf(configureKubernetesPluginFmt,
|
||||
clusterDomain,
|
||||
jenkins.ObjectMeta.Namespace,
|
||||
jenkins.Namespace,
|
||||
fmt.Sprintf("http://%s:%d%s", jenkinsServiceFQDN, jenkins.Spec.Service.Port, suffix),
|
||||
fmt.Sprintf("%s:%d", jenkinsSlavesServiceFQDN, jenkins.Spec.SlaveService.Port),
|
||||
),
|
||||
|
||||
@@ -63,7 +63,7 @@ func buildCreateJenkinsOperatorUserGroovyScript(jenkins *v1alpha2.Jenkins) (*str
|
||||
|
||||
// GetInitConfigurationConfigMapName returns name of Kubernetes config map used to init configuration
|
||||
func GetInitConfigurationConfigMapName(jenkins *v1alpha2.Jenkins) string {
|
||||
return fmt.Sprintf("%s-init-configuration-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
||||
return fmt.Sprintf("%s-init-configuration-%s", constants.OperatorName, jenkins.Name)
|
||||
}
|
||||
|
||||
// NewInitConfigurationConfigMap builds Kubernetes config map used to init configuration
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
func NewResourceObjectMeta(jenkins *v1alpha2.Jenkins) metav1.ObjectMeta {
|
||||
return metav1.ObjectMeta{
|
||||
Name: GetResourceName(jenkins),
|
||||
Namespace: jenkins.ObjectMeta.Namespace,
|
||||
Namespace: jenkins.Namespace,
|
||||
Labels: BuildResourceLabels(jenkins),
|
||||
}
|
||||
}
|
||||
@@ -39,7 +39,7 @@ func BuildLabelsForWatchedResources(jenkins v1alpha2.Jenkins) map[string]string
|
||||
|
||||
// GetResourceName returns name of Kubernetes resource base on Jenkins CR
|
||||
func GetResourceName(jenkins *v1alpha2.Jenkins) string {
|
||||
return fmt.Sprintf("%s-%s", constants.LabelAppValue, jenkins.ObjectMeta.Name)
|
||||
return fmt.Sprintf("%s-%s", constants.LabelAppValue, jenkins.Name)
|
||||
}
|
||||
|
||||
// VerifyIfLabelsAreSet check is selected labels are set for specific resource
|
||||
|
||||
@@ -148,9 +148,10 @@ func TestGetJenkinsMasterPodBaseVolumes(t *testing.T) {
|
||||
|
||||
func checkSecretVolumesPresence(jenkins *v1alpha2.Jenkins) (groovyExists bool, cascExists bool) {
|
||||
for _, volume := range GetJenkinsMasterPodBaseVolumes(jenkins) {
|
||||
if volume.Name == ("gs-" + jenkins.Spec.GroovyScripts.Secret.Name) {
|
||||
switch volume.Name {
|
||||
case "gs-" + jenkins.Spec.GroovyScripts.Secret.Name:
|
||||
groovyExists = true
|
||||
} else if volume.Name == ("casc-" + jenkins.Spec.ConfigurationAsCode.Secret.Name) {
|
||||
case "casc-" + jenkins.Spec.ConfigurationAsCode.Secret.Name:
|
||||
cascExists = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ func buildInitBashScript(jenkins *v1alpha2.Jenkins) (*string, error) {
|
||||
}
|
||||
|
||||
func getScriptsConfigMapName(jenkins *v1alpha2.Jenkins) string {
|
||||
return fmt.Sprintf("%s-scripts-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
||||
return fmt.Sprintf("%s-scripts-%s", constants.OperatorName, jenkins.Name)
|
||||
}
|
||||
|
||||
// NewScriptsConfigMap builds Kubernetes config map used to store scripts
|
||||
|
||||
@@ -19,9 +19,9 @@ const ServiceKind = "Service"
|
||||
|
||||
// UpdateService returns new service with override fields from config
|
||||
func UpdateService(actual corev1.Service, config v1alpha2.Service, targetPort int32) corev1.Service {
|
||||
actual.ObjectMeta.Annotations = config.Annotations
|
||||
actual.Annotations = config.Annotations
|
||||
for key, value := range config.Labels {
|
||||
actual.ObjectMeta.Labels[key] = value
|
||||
actual.Labels[key] = value
|
||||
}
|
||||
actual.Spec.Type = config.Type
|
||||
actual.Spec.LoadBalancerIP = config.LoadBalancerIP
|
||||
@@ -40,12 +40,12 @@ func UpdateService(actual corev1.Service, config v1alpha2.Service, targetPort in
|
||||
|
||||
// GetJenkinsHTTPServiceName returns Kubernetes service name used for expose Jenkins HTTP endpoint
|
||||
func GetJenkinsHTTPServiceName(jenkins *v1alpha2.Jenkins) string {
|
||||
return fmt.Sprintf("%s-http-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
||||
return fmt.Sprintf("%s-http-%s", constants.OperatorName, jenkins.Name)
|
||||
}
|
||||
|
||||
// GetJenkinsSlavesServiceName returns Kubernetes service name used for expose Jenkins slave endpoint
|
||||
func GetJenkinsSlavesServiceName(jenkins *v1alpha2.Jenkins) string {
|
||||
return fmt.Sprintf("%s-slave-%s", constants.OperatorName, jenkins.ObjectMeta.Name)
|
||||
return fmt.Sprintf("%s-slave-%s", constants.OperatorName, jenkins.Name)
|
||||
}
|
||||
|
||||
// GetJenkinsHTTPServiceFQDN returns Kubernetes service FQDN used for expose Jenkins HTTP endpoint
|
||||
@@ -55,7 +55,7 @@ func GetJenkinsHTTPServiceFQDN(jenkins *v1alpha2.Jenkins, kubernetesClusterDomai
|
||||
return "", err
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s-http-%s.%s.svc.%s", constants.OperatorName, jenkins.ObjectMeta.Name, jenkins.ObjectMeta.Namespace, clusterDomain), nil
|
||||
return fmt.Sprintf("%s-http-%s.%s.svc.%s", constants.OperatorName, jenkins.Name, jenkins.Namespace, clusterDomain), nil
|
||||
}
|
||||
|
||||
// GetJenkinsSlavesServiceFQDN returns Kubernetes service FQDN used for expose Jenkins slave endpoint
|
||||
@@ -65,7 +65,7 @@ func GetJenkinsSlavesServiceFQDN(jenkins *v1alpha2.Jenkins, kubernetesClusterDom
|
||||
return "", err
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s-slave-%s.%s.svc.%s", constants.OperatorName, jenkins.ObjectMeta.Name, jenkins.ObjectMeta.Namespace, clusterDomain), nil
|
||||
return fmt.Sprintf("%s-slave-%s.%s.svc.%s", constants.OperatorName, jenkins.Name, jenkins.Namespace, clusterDomain), nil
|
||||
}
|
||||
|
||||
// GetClusterDomain returns Kubernetes cluster domain, default to "cluster.local"
|
||||
|
||||
@@ -18,7 +18,7 @@ import (
|
||||
// createRoute takes the ServiceName and Creates the Route based on it
|
||||
func (r *JenkinsBaseConfigurationReconciler) createRoute(meta metav1.ObjectMeta, serviceName string, config *v1alpha2.Jenkins) error {
|
||||
route := routev1.Route{}
|
||||
name := fmt.Sprintf("jenkins-%s", config.ObjectMeta.Name)
|
||||
name := fmt.Sprintf("jenkins-%s", config.Name)
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: name, Namespace: meta.Namespace}, &route)
|
||||
if err != nil && apierrors.IsNotFound(err) {
|
||||
port := &routev1.RoutePort{
|
||||
@@ -52,7 +52,7 @@ func (r *JenkinsBaseConfigurationReconciler) createRoute(meta metav1.ObjectMeta,
|
||||
return stackerr.WithStack(err)
|
||||
}
|
||||
|
||||
route.ObjectMeta.Labels = meta.Labels // make sure that user won't break service by hand
|
||||
route.Labels = meta.Labels // make sure that user won't break service by hand
|
||||
route = resources.UpdateRoute(route, config)
|
||||
return stackerr.WithStack(r.UpdateResource(&route))
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ import (
|
||||
func (r *JenkinsBaseConfigurationReconciler) createServiceAccount(meta metav1.ObjectMeta) error {
|
||||
serviceAccount := &corev1.ServiceAccount{}
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: meta.Name, Namespace: meta.Namespace}, serviceAccount)
|
||||
annotations := r.Configuration.Jenkins.Spec.ServiceAccount.Annotations
|
||||
annotations := r.Jenkins.Spec.ServiceAccount.Annotations
|
||||
msg := fmt.Sprintf("createServiceAccount with annotations %v", annotations)
|
||||
r.logger.V(log.VDebug).Info(msg)
|
||||
if err != nil && apierrors.IsNotFound(err) {
|
||||
|
||||
@@ -52,12 +52,12 @@ func (r *JenkinsBaseConfigurationReconciler) Validate(jenkins *v1alpha2.Jenkins)
|
||||
messages = append(messages, msg...)
|
||||
}
|
||||
|
||||
if msg, err := r.validateCustomization(r.Configuration.Jenkins.Spec.GroovyScripts.Customization, "spec.groovyScripts"); err != nil {
|
||||
if msg, err := r.validateCustomization(r.Jenkins.Spec.GroovyScripts.Customization, "spec.groovyScripts"); err != nil {
|
||||
return nil, err
|
||||
} else if len(msg) > 0 {
|
||||
messages = append(messages, msg...)
|
||||
}
|
||||
if msg, err := r.validateCustomization(r.Configuration.Jenkins.Spec.ConfigurationAsCode.Customization, "spec.configurationAsCode"); err != nil {
|
||||
if msg, err := r.validateCustomization(r.Jenkins.Spec.ConfigurationAsCode.Customization, "spec.configurationAsCode"); err != nil {
|
||||
return nil, err
|
||||
} else if len(msg) > 0 {
|
||||
messages = append(messages, msg...)
|
||||
@@ -71,7 +71,7 @@ func (r *JenkinsBaseConfigurationReconciler) Validate(jenkins *v1alpha2.Jenkins)
|
||||
}
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) validateJenkinsMasterContainerCommand() []string {
|
||||
masterContainer := r.Configuration.GetJenkinsMasterContainer()
|
||||
masterContainer := r.GetJenkinsMasterContainer()
|
||||
if masterContainer == nil {
|
||||
return []string{}
|
||||
}
|
||||
@@ -104,7 +104,7 @@ func (r *JenkinsBaseConfigurationReconciler) validateJenkinsMasterContainerComma
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) validateImagePullSecrets() ([]string, error) {
|
||||
var messages []string
|
||||
for _, sr := range r.Configuration.Jenkins.Spec.Master.ImagePullSecrets {
|
||||
for _, sr := range r.Jenkins.Spec.Master.ImagePullSecrets {
|
||||
msg, err := r.validateImagePullSecret(sr.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -119,7 +119,7 @@ func (r *JenkinsBaseConfigurationReconciler) validateImagePullSecrets() ([]strin
|
||||
func (r *JenkinsBaseConfigurationReconciler) validateImagePullSecret(secretName string) ([]string, error) {
|
||||
var messages []string
|
||||
secret := &corev1.Secret{}
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: secretName, Namespace: r.Configuration.Jenkins.ObjectMeta.Namespace}, secret)
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: secretName, Namespace: r.Jenkins.Namespace}, secret)
|
||||
if err != nil && apierrors.IsNotFound(err) {
|
||||
messages = append(messages, fmt.Sprintf("Secret %s not found defined in spec.master.imagePullSecrets", secretName))
|
||||
} else if err != nil && !apierrors.IsNotFound(err) {
|
||||
@@ -144,7 +144,7 @@ func (r *JenkinsBaseConfigurationReconciler) validateImagePullSecret(secretName
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) validateVolumes() ([]string, error) {
|
||||
var messages []string
|
||||
for _, volume := range r.Configuration.Jenkins.Spec.Master.Volumes {
|
||||
for _, volume := range r.Jenkins.Spec.Master.Volumes {
|
||||
switch {
|
||||
case volume.ConfigMap != nil:
|
||||
if msg, err := r.validateConfigMapVolume(volume); err != nil {
|
||||
@@ -174,7 +174,7 @@ func (r *JenkinsBaseConfigurationReconciler) validatePersistentVolumeClaim(volum
|
||||
var messages []string
|
||||
|
||||
pvc := &corev1.PersistentVolumeClaim{}
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: volume.PersistentVolumeClaim.ClaimName, Namespace: r.Configuration.Jenkins.ObjectMeta.Namespace}, pvc)
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: volume.PersistentVolumeClaim.ClaimName, Namespace: r.Jenkins.Namespace}, pvc)
|
||||
if err != nil && apierrors.IsNotFound(err) {
|
||||
messages = append(messages, fmt.Sprintf("PersistentVolumeClaim '%s' not found for volume '%v'", volume.PersistentVolumeClaim.ClaimName, volume))
|
||||
} else if err != nil && !apierrors.IsNotFound(err) {
|
||||
@@ -191,7 +191,7 @@ func (r *JenkinsBaseConfigurationReconciler) validateConfigMapVolume(volume core
|
||||
}
|
||||
|
||||
configMap := &corev1.ConfigMap{}
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: volume.ConfigMap.Name, Namespace: r.Configuration.Jenkins.ObjectMeta.Namespace}, configMap)
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: volume.ConfigMap.Name, Namespace: r.Jenkins.Namespace}, configMap)
|
||||
if err != nil && apierrors.IsNotFound(err) {
|
||||
messages = append(messages, fmt.Sprintf("ConfigMap '%s' not found for volume '%v'", volume.ConfigMap.Name, volume))
|
||||
} else if err != nil && !apierrors.IsNotFound(err) {
|
||||
@@ -208,7 +208,7 @@ func (r *JenkinsBaseConfigurationReconciler) validateSecretVolume(volume corev1.
|
||||
}
|
||||
|
||||
secret := &corev1.Secret{}
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: volume.Secret.SecretName, Namespace: r.Configuration.Jenkins.ObjectMeta.Namespace}, secret)
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: volume.Secret.SecretName, Namespace: r.Jenkins.Namespace}, secret)
|
||||
if err != nil && apierrors.IsNotFound(err) {
|
||||
messages = append(messages, fmt.Sprintf("Secret '%s' not found for volume '%v'", volume.Secret.SecretName, volume))
|
||||
} else if err != nil && !apierrors.IsNotFound(err) {
|
||||
@@ -221,8 +221,8 @@ func (r *JenkinsBaseConfigurationReconciler) validateSecretVolume(volume corev1.
|
||||
func (r *JenkinsBaseConfigurationReconciler) validateReservedVolumes() []string {
|
||||
var messages []string
|
||||
|
||||
for _, baseVolume := range resources.GetJenkinsMasterPodBaseVolumes(r.Configuration.Jenkins) {
|
||||
for _, volume := range r.Configuration.Jenkins.Spec.Master.Volumes {
|
||||
for _, baseVolume := range resources.GetJenkinsMasterPodBaseVolumes(r.Jenkins) {
|
||||
for _, volume := range r.Jenkins.Spec.Master.Volumes {
|
||||
if baseVolume.Name == volume.Name {
|
||||
messages = append(messages, fmt.Sprintf("Jenkins Master pod volume '%s' is reserved please choose different one", volume.Name))
|
||||
}
|
||||
@@ -255,7 +255,7 @@ func (r *JenkinsBaseConfigurationReconciler) validateContainer(container v1alpha
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) validateContainerVolumeMounts(container v1alpha2.Container) []string {
|
||||
var messages []string
|
||||
allVolumes := append(resources.GetJenkinsMasterPodBaseVolumes(r.Configuration.Jenkins), r.Configuration.Jenkins.Spec.Master.Volumes...)
|
||||
allVolumes := append(resources.GetJenkinsMasterPodBaseVolumes(r.Jenkins), r.Jenkins.Spec.Master.Volumes...)
|
||||
|
||||
for _, volumeMount := range container.VolumeMounts {
|
||||
if len(volumeMount.MountPath) == 0 {
|
||||
@@ -279,14 +279,14 @@ func (r *JenkinsBaseConfigurationReconciler) validateContainerVolumeMounts(conta
|
||||
|
||||
func (r *JenkinsBaseConfigurationReconciler) validateJenkinsMasterPodEnvs() []string {
|
||||
var messages []string
|
||||
baseEnvs := resources.GetJenkinsMasterContainerBaseEnvs(r.Configuration.Jenkins)
|
||||
baseEnvs := resources.GetJenkinsMasterContainerBaseEnvs(r.Jenkins)
|
||||
baseEnvNames := map[string]string{}
|
||||
for _, env := range baseEnvs {
|
||||
baseEnvNames[env.Name] = env.Value
|
||||
}
|
||||
|
||||
javaOpts := corev1.EnvVar{}
|
||||
for _, userEnv := range r.Configuration.Jenkins.Spec.Master.Containers[0].Env {
|
||||
for _, userEnv := range r.Jenkins.Spec.Master.Containers[0].Env {
|
||||
if userEnv.Name == constants.JavaOpsVariableName {
|
||||
javaOpts = userEnv
|
||||
}
|
||||
@@ -383,7 +383,7 @@ func (r *JenkinsBaseConfigurationReconciler) validateCustomization(customization
|
||||
|
||||
if len(customization.Secret.Name) > 0 {
|
||||
secret := &corev1.Secret{}
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: customization.Secret.Name, Namespace: r.Configuration.Jenkins.ObjectMeta.Namespace}, secret)
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: customization.Secret.Name, Namespace: r.Jenkins.Namespace}, secret)
|
||||
if err != nil && apierrors.IsNotFound(err) {
|
||||
messages = append(messages, fmt.Sprintf("Secret '%s' configured in %s.secret.name not found", customization.Secret.Name, name))
|
||||
} else if err != nil && !apierrors.IsNotFound(err) {
|
||||
@@ -398,7 +398,7 @@ func (r *JenkinsBaseConfigurationReconciler) validateCustomization(customization
|
||||
}
|
||||
|
||||
configMap := &corev1.ConfigMap{}
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: configMapRef.Name, Namespace: r.Configuration.Jenkins.ObjectMeta.Namespace}, configMap)
|
||||
err := r.Client.Get(context.TODO(), types.NamespacedName{Name: configMapRef.Name, Namespace: r.Jenkins.Namespace}, configMap)
|
||||
if err != nil && apierrors.IsNotFound(err) {
|
||||
messages = append(messages, fmt.Sprintf("ConfigMap '%s' configured in %s.configurations[%d] not found", configMapRef.Name, name, index))
|
||||
} else if err != nil && !apierrors.IsNotFound(err) {
|
||||
|
||||
@@ -137,7 +137,7 @@ func TestReconcileJenkinsBaseConfiguration_validateImagePullSecrets(t *testing.T
|
||||
Spec: v1alpha2.JenkinsSpec{
|
||||
Master: v1alpha2.JenkinsMaster{
|
||||
ImagePullSecrets: []corev1.LocalObjectReference{
|
||||
{Name: secret.ObjectMeta.Name},
|
||||
{Name: secret.Name},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -197,7 +197,7 @@ func TestReconcileJenkinsBaseConfiguration_validateImagePullSecrets(t *testing.T
|
||||
Spec: v1alpha2.JenkinsSpec{
|
||||
Master: v1alpha2.JenkinsMaster{
|
||||
ImagePullSecrets: []corev1.LocalObjectReference{
|
||||
{Name: secret.ObjectMeta.Name},
|
||||
{Name: secret.Name},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -233,7 +233,7 @@ func TestReconcileJenkinsBaseConfiguration_validateImagePullSecrets(t *testing.T
|
||||
Spec: v1alpha2.JenkinsSpec{
|
||||
Master: v1alpha2.JenkinsMaster{
|
||||
ImagePullSecrets: []corev1.LocalObjectReference{
|
||||
{Name: secret.ObjectMeta.Name},
|
||||
{Name: secret.Name},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -269,7 +269,7 @@ func TestReconcileJenkinsBaseConfiguration_validateImagePullSecrets(t *testing.T
|
||||
Spec: v1alpha2.JenkinsSpec{
|
||||
Master: v1alpha2.JenkinsMaster{
|
||||
ImagePullSecrets: []corev1.LocalObjectReference{
|
||||
{Name: secret.ObjectMeta.Name},
|
||||
{Name: secret.Name},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -305,7 +305,7 @@ func TestReconcileJenkinsBaseConfiguration_validateImagePullSecrets(t *testing.T
|
||||
Spec: v1alpha2.JenkinsSpec{
|
||||
Master: v1alpha2.JenkinsMaster{
|
||||
ImagePullSecrets: []corev1.LocalObjectReference{
|
||||
{Name: secret.ObjectMeta.Name},
|
||||
{Name: secret.Name},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -616,7 +616,8 @@ func TestValidateConfigMapVolume(t *testing.T) {
|
||||
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, got, []string{"ConfigMap 'configmap-name' not found for volume '{volume-name {nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil &ConfigMapVolumeSource{LocalObjectReference:LocalObjectReference{Name:configmap-name,},Items:[]KeyToPath{},DefaultMode:nil,Optional:*false,} nil nil nil nil nil nil nil nil nil nil}}'"})
|
||||
assert.Len(t, got, 1)
|
||||
assert.Contains(t, got[0], "ConfigMap 'configmap-name' not found for volume")
|
||||
})
|
||||
}
|
||||
|
||||
@@ -689,8 +690,8 @@ func TestValidateSecretVolume(t *testing.T) {
|
||||
got, err := baseReconcileLoop.validateSecretVolume(volume)
|
||||
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, got, []string{"Secret 'secret-name' not found for volume '{volume-name {nil nil nil nil nil &SecretVolumeSource{SecretName:secret-name,Items:[]KeyToPath{},DefaultMode:nil,Optional:*false,} nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil}}'"})
|
||||
assert.Len(t, got, 1)
|
||||
assert.Contains(t, got[0], "Secret 'secret-name' not found for volume")
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ func (c *Configuration) GetJenkinsDeployment() (*appsv1.Deployment, error) {
|
||||
|
||||
// IsJenkinsTerminating returns true if the Jenkins pod is terminating.
|
||||
func (c *Configuration) IsJenkinsTerminating(pod corev1.Pod) bool {
|
||||
return pod.ObjectMeta.DeletionTimestamp != nil
|
||||
return pod.DeletionTimestamp != nil
|
||||
}
|
||||
|
||||
// CreateResource is creating kubernetes resource and references it to Jenkins CR
|
||||
@@ -193,7 +193,7 @@ func (c *Configuration) getJenkinsAPIUrl() (string, error) {
|
||||
var service corev1.Service
|
||||
|
||||
err := c.Client.Get(context.TODO(), types.NamespacedName{
|
||||
Namespace: c.Jenkins.ObjectMeta.Namespace,
|
||||
Namespace: c.Jenkins.Namespace,
|
||||
Name: resources.GetJenkinsHTTPServiceName(c.Jenkins),
|
||||
}, &service)
|
||||
|
||||
@@ -230,7 +230,7 @@ func (c *Configuration) GetJenkinsClientFromSecret() (jenkinsclient.Jenkins, err
|
||||
return nil, err
|
||||
}
|
||||
credentialsSecret := &corev1.Secret{}
|
||||
err = c.Client.Get(context.TODO(), types.NamespacedName{Name: resources.GetOperatorCredentialsSecretName(c.Jenkins), Namespace: c.Jenkins.ObjectMeta.Namespace}, credentialsSecret)
|
||||
err = c.Client.Get(context.TODO(), types.NamespacedName{Name: resources.GetOperatorCredentialsSecretName(c.Jenkins), Namespace: c.Jenkins.Namespace}, credentialsSecret)
|
||||
if err != nil {
|
||||
return nil, stackerr.WithStack(err)
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package user
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/jenkinsci/kubernetes-operator/api/v1alpha2"
|
||||
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/client"
|
||||
@@ -45,7 +46,7 @@ func (r *reconcileUserConfiguration) ReconcileCasc() (reconcile.Result, error) {
|
||||
if err != nil {
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
if result.Requeue {
|
||||
if result.RequeueAfter > 0 {
|
||||
return result, nil
|
||||
}
|
||||
|
||||
@@ -72,7 +73,7 @@ func (r *reconcileUserConfiguration) ReconcileOthers() (reconcile.Result, error)
|
||||
if err != nil {
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
if result.Requeue {
|
||||
if result.RequeueAfter > 0 {
|
||||
return result, nil
|
||||
}
|
||||
|
||||
@@ -81,19 +82,19 @@ func (r *reconcileUserConfiguration) ReconcileOthers() (reconcile.Result, error)
|
||||
|
||||
func (r *reconcileUserConfiguration) ensureSeedJobs() (reconcile.Result, error) {
|
||||
seedJobs := seedjobs.New(r.jenkinsClient, r.Configuration)
|
||||
done, err := seedJobs.EnsureSeedJobs(r.Configuration.Jenkins)
|
||||
done, err := seedJobs.EnsureSeedJobs(r.Jenkins)
|
||||
if err != nil {
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
if !done {
|
||||
return reconcile.Result{Requeue: true}, nil
|
||||
return reconcile.Result{RequeueAfter: time.Second * 30}, nil
|
||||
}
|
||||
return reconcile.Result{}, nil
|
||||
}
|
||||
|
||||
func (r *reconcileUserConfiguration) ensureCasc(jenkinsClient jenkinsclient.Jenkins) (reconcile.Result, error) {
|
||||
configurationAsCodeClient := casc.New(jenkinsClient, r.Client, r.Configuration.Jenkins)
|
||||
requeue, err := configurationAsCodeClient.Ensure(r.Configuration.Jenkins)
|
||||
configurationAsCodeClient := casc.New(jenkinsClient, r.Client, r.Jenkins)
|
||||
requeue, err := configurationAsCodeClient.Ensure(r.Jenkins)
|
||||
if err != nil {
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
@@ -101,7 +102,7 @@ func (r *reconcileUserConfiguration) ensureCasc(jenkinsClient jenkinsclient.Jenk
|
||||
return reconcile.Result{Requeue: true}, nil
|
||||
}
|
||||
|
||||
groovyClient := groovy.New(jenkinsClient, r.Client, r.Configuration.Jenkins, "user-groovy", r.Configuration.Jenkins.Spec.GroovyScripts.Customization)
|
||||
groovyClient := groovy.New(jenkinsClient, r.Client, r.Jenkins, "user-groovy", r.Jenkins.Spec.GroovyScripts.Customization)
|
||||
requeue, err = groovyClient.WaitForSecretSynchronization(resources.GroovyScriptsSecretVolumePath)
|
||||
if err != nil {
|
||||
return reconcile.Result{}, err
|
||||
|
||||
@@ -311,14 +311,14 @@ func (s *seedJobs) ensureLabelsForSecrets(jenkins v1alpha2.Jenkins) error {
|
||||
requiredLabels[JenkinsCredentialTypeLabelName] = string(seedJob.JenkinsCredentialType)
|
||||
|
||||
secret := &corev1.Secret{}
|
||||
namespaceName := types.NamespacedName{Namespace: jenkins.ObjectMeta.Namespace, Name: seedJob.CredentialID}
|
||||
namespaceName := types.NamespacedName{Namespace: jenkins.Namespace, Name: seedJob.CredentialID}
|
||||
err := s.Client.Get(context.TODO(), namespaceName, secret)
|
||||
if err != nil {
|
||||
return stackerr.WithStack(err)
|
||||
}
|
||||
|
||||
if !resources.VerifyIfLabelsAreSet(secret, requiredLabels) {
|
||||
secret.ObjectMeta.Labels = requiredLabels
|
||||
secret.Labels = requiredLabels
|
||||
if err = s.Client.Update(context.TODO(), secret); err != nil {
|
||||
return stackerr.WithStack(err)
|
||||
}
|
||||
|
||||
@@ -166,21 +166,21 @@ func validateBasicSSHSecret(secret v1.Secret) []string {
|
||||
var messages []string
|
||||
username, exists := secret.Data[UsernameSecretKey]
|
||||
if !exists {
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", UsernameSecretKey, secret.ObjectMeta.Name))
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", UsernameSecretKey, secret.Name))
|
||||
}
|
||||
if len(username) == 0 {
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' is empty in secret '%s'", UsernameSecretKey, secret.ObjectMeta.Name))
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' is empty in secret '%s'", UsernameSecretKey, secret.Name))
|
||||
}
|
||||
|
||||
privateKey, exists := secret.Data[PrivateKeySecretKey]
|
||||
if !exists {
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", PrivateKeySecretKey, secret.ObjectMeta.Name))
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", PrivateKeySecretKey, secret.Name))
|
||||
}
|
||||
if len(string(privateKey)) == 0 {
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", PrivateKeySecretKey, secret.ObjectMeta.Name))
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", PrivateKeySecretKey, secret.Name))
|
||||
}
|
||||
if err := validatePrivateKey(string(privateKey)); err != nil {
|
||||
messages = append(messages, fmt.Sprintf("private key '%s' invalid in secret '%s': %s", PrivateKeySecretKey, secret.ObjectMeta.Name, err))
|
||||
messages = append(messages, fmt.Sprintf("private key '%s' invalid in secret '%s': %s", PrivateKeySecretKey, secret.Name, err))
|
||||
}
|
||||
|
||||
return messages
|
||||
@@ -190,17 +190,17 @@ func validateUsernamePasswordSecret(secret v1.Secret) []string {
|
||||
var messages []string
|
||||
username, exists := secret.Data[UsernameSecretKey]
|
||||
if !exists {
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", UsernameSecretKey, secret.ObjectMeta.Name))
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", UsernameSecretKey, secret.Name))
|
||||
}
|
||||
if len(username) == 0 {
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' is empty in secret '%s'", UsernameSecretKey, secret.ObjectMeta.Name))
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' is empty in secret '%s'", UsernameSecretKey, secret.Name))
|
||||
}
|
||||
password, exists := secret.Data[PasswordSecretKey]
|
||||
if !exists {
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", PasswordSecretKey, secret.ObjectMeta.Name))
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", PasswordSecretKey, secret.Name))
|
||||
}
|
||||
if len(password) == 0 {
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' is empty in secret '%s'", PasswordSecretKey, secret.ObjectMeta.Name))
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' is empty in secret '%s'", PasswordSecretKey, secret.Name))
|
||||
}
|
||||
|
||||
return messages
|
||||
@@ -210,17 +210,17 @@ func validateGithubAppSecret(secret v1.Secret) []string {
|
||||
var messages []string
|
||||
appid, exists := secret.Data[AppIDSecretKey]
|
||||
if !exists {
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", AppIDSecretKey, secret.ObjectMeta.Name))
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", AppIDSecretKey, secret.Name))
|
||||
}
|
||||
if len(appid) == 0 {
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' is empty in secret '%s'", AppIDSecretKey, secret.ObjectMeta.Name))
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' is empty in secret '%s'", AppIDSecretKey, secret.Name))
|
||||
}
|
||||
pkey, exists := secret.Data[PrivateKeySecretKey]
|
||||
if !exists {
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", PrivateKeySecretKey, secret.ObjectMeta.Name))
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' not found in secret '%s'", PrivateKeySecretKey, secret.Name))
|
||||
}
|
||||
if len(pkey) == 0 {
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' is empty in secret '%s'", PrivateKeySecretKey, secret.ObjectMeta.Name))
|
||||
messages = append(messages, fmt.Sprintf("required data '%s' is empty in secret '%s'", PrivateKeySecretKey, secret.Name))
|
||||
}
|
||||
|
||||
return messages
|
||||
|
||||
@@ -87,7 +87,7 @@ func (g *Groovy) WaitForSecretSynchronization(secretsPath string) (requeue bool,
|
||||
}
|
||||
|
||||
secret := &corev1.Secret{}
|
||||
err = g.k8sClient.Get(context.TODO(), types.NamespacedName{Name: g.customization.Secret.Name, Namespace: g.jenkins.ObjectMeta.Namespace}, secret)
|
||||
err = g.k8sClient.Get(context.TODO(), types.NamespacedName{Name: g.customization.Secret.Name, Namespace: g.jenkins.Namespace}, secret)
|
||||
if err != nil {
|
||||
return true, errors.WithStack(err)
|
||||
}
|
||||
@@ -116,7 +116,7 @@ func (g *Groovy) Ensure(filter func(name string) bool, updateGroovyScript func(g
|
||||
if len(g.customization.Secret.Name) > 0 {
|
||||
err := g.k8sClient.Get(context.TODO(), types.NamespacedName{
|
||||
Name: g.customization.Secret.Name,
|
||||
Namespace: g.jenkins.ObjectMeta.Namespace,
|
||||
Namespace: g.jenkins.Namespace,
|
||||
}, secret)
|
||||
if err != nil {
|
||||
return true, err
|
||||
@@ -125,7 +125,7 @@ func (g *Groovy) Ensure(filter func(name string) bool, updateGroovyScript func(g
|
||||
|
||||
for _, configMapRef := range g.customization.Configurations {
|
||||
configMap := &corev1.ConfigMap{}
|
||||
err := g.k8sClient.Get(context.TODO(), types.NamespacedName{Name: configMapRef.Name, Namespace: g.jenkins.ObjectMeta.Namespace}, configMap)
|
||||
err := g.k8sClient.Get(context.TODO(), types.NamespacedName{Name: configMapRef.Name, Namespace: g.jenkins.Namespace}, configMap)
|
||||
if err != nil {
|
||||
return true, errors.WithStack(err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user