diff --git a/pkg/controller/jenkins/configuration/base/resources/init_configuration_configmap.go b/pkg/controller/jenkins/configuration/base/resources/init_configuration_configmap.go new file mode 100644 index 00000000..5ede315e --- /dev/null +++ b/pkg/controller/jenkins/configuration/base/resources/init_configuration_configmap.go @@ -0,0 +1,73 @@ +package resources + +import ( + "fmt" + "text/template" + + virtuslabv1alpha1 "github.com/VirtusLab/jenkins-operator/pkg/apis/virtuslab/v1alpha1" + "github.com/VirtusLab/jenkins-operator/pkg/controller/render" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +const createOperatorUserFileName = "createOperatorUser.groovy" + +var createOperatorUserGroovyFmtTemplate = template.Must(template.New(createOperatorUserFileName).Parse(` +import hudson.security.* + +def jenkins = jenkins.model.Jenkins.getInstance() + +def hudsonRealm = new HudsonPrivateSecurityRealm(false) +hudsonRealm.createAccount( + new File('{{ .OperatorCredentialsPath }}/{{ .OperatorUserNameFile }}').text, + new File('{{ .OperatorCredentialsPath }}/{{ .OperatorPasswordFile }}').text) +jenkins.setSecurityRealm(hudsonRealm) + +def strategy = new FullControlOnceLoggedInAuthorizationStrategy() +strategy.setAllowAnonymousRead(false) +jenkins.setAuthorizationStrategy(strategy) +jenkins.save() +`)) + +func buildCreateJenkinsOperatorUserGroovyScript() (*string, error) { + data := struct { + OperatorCredentialsPath string + OperatorUserNameFile string + OperatorPasswordFile string + }{ + OperatorCredentialsPath: jenkinsOperatorCredentialsVolumePath, + OperatorUserNameFile: OperatorCredentialsSecretUserNameKey, + OperatorPasswordFile: OperatorCredentialsSecretPasswordKey, + } + + output, err := render.Render(createOperatorUserGroovyFmtTemplate, data) + if err != nil { + return nil, err + } + + return &output, nil +} + +// GetBaseConfigurationConfigMapName returns name of Kubernetes config map used to base configuration +func GetBaseConfigurationConfigMapName(jenkins *virtuslabv1alpha1.Jenkins) string { + return fmt.Sprintf("jenkins-operator-base-configuration-%s", jenkins.ObjectMeta.Name) +} + +// NewBaseConfigurationConfigMap builds Kubernetes config map used to base configuration +func NewBaseConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *virtuslabv1alpha1.Jenkins) (*corev1.ConfigMap, error) { + meta.Name = GetBaseConfigurationConfigMapName(jenkins) + + createJenkinsOperatorUserGroovy, err := buildCreateJenkinsOperatorUserGroovyScript() + if err != nil { + return nil, err + } + + return &corev1.ConfigMap{ + TypeMeta: buildConfigMapTypeMeta(), + ObjectMeta: meta, + Data: map[string]string{ + createOperatorUserFileName: *createJenkinsOperatorUserGroovy, + }, + }, nil +} diff --git a/pkg/controller/jenkins/constants/constants.go b/pkg/controller/jenkins/constants/constants.go new file mode 100644 index 00000000..1255fc8b --- /dev/null +++ b/pkg/controller/jenkins/constants/constants.go @@ -0,0 +1 @@ +package constants diff --git a/pkg/controller/jenkins/constants/labels.go b/pkg/controller/jenkins/constants/labels.go new file mode 100644 index 00000000..1255fc8b --- /dev/null +++ b/pkg/controller/jenkins/constants/labels.go @@ -0,0 +1 @@ +package constants diff --git a/pkg/controller/jenkins/handler.go b/pkg/controller/jenkins/handler.go new file mode 100644 index 00000000..44adaafe --- /dev/null +++ b/pkg/controller/jenkins/handler.go @@ -0,0 +1 @@ +package jenkins