Merge pull request #59 from jakalkhalili/v0.2.0

#28 Enable groovy scripts secret loader
This commit is contained in:
Tomasz Sęk 2019-07-18 13:20:04 +02:00 committed by GitHub
commit fd1d6ad075
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 17 deletions

View File

@ -112,10 +112,7 @@ func (r *ReconcileUserConfiguration) ensureUserConfiguration(jenkinsClient jenki
} }
requeue, err = groovyClient.Ensure(func(name string) bool { requeue, err = groovyClient.Ensure(func(name string) bool {
return strings.HasSuffix(name, ".groovy") return strings.HasSuffix(name, ".groovy")
}, func(groovyScript string) string { }, groovy.AddSecretsLoaderToGroovyScript(resources.GroovyScriptsSecretVolumePath))
// TODO load secrets to variables
return groovyScript
})
if err != nil { if err != nil {
return reconcile.Result{}, err return reconcile.Result{}, err
} }

View File

@ -6,17 +6,18 @@ import (
"testing" "testing"
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2"
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/groovy"
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" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base"
"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"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/bndr/gojenkins" "github.com/bndr/gojenkins"
"k8s.io/apimachinery/pkg/api/resource"
framework "github.com/operator-framework/operator-sdk/pkg/test" framework "github.com/operator-framework/operator-sdk/pkg/test"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
) )
func TestConfiguration(t *testing.T) { func TestConfiguration(t *testing.T) {
@ -27,6 +28,7 @@ func TestConfiguration(t *testing.T) {
jenkinsCRName := "e2e" jenkinsCRName := "e2e"
numberOfExecutors := 6 numberOfExecutors := 6
numberOfExecutorsEnvName := "NUMBER_OF_EXECUTORS"
systemMessage := "Configuration as Code integration works!!!" systemMessage := "Configuration as Code integration works!!!"
systemMessageEnvName := "SYSTEM_MESSAGE" systemMessageEnvName := "SYSTEM_MESSAGE"
mySeedJob := seedJobConfig{ mySeedJob := seedJobConfig{
@ -66,14 +68,17 @@ func TestConfiguration(t *testing.T) {
}, },
} }
stringData := make(map[string]string)
stringData[systemMessageEnvName] = systemMessage
stringData[numberOfExecutorsEnvName] = fmt.Sprintf("%d", numberOfExecutors)
// base // base
createUserConfigurationSecret(t, namespace, systemMessageEnvName, systemMessage) createUserConfigurationSecret(t, namespace, stringData)
createUserConfigurationConfigMap(t, namespace, numberOfExecutors, fmt.Sprintf("${%s}", systemMessageEnvName)) createUserConfigurationConfigMap(t, namespace, numberOfExecutorsEnvName, fmt.Sprintf("${%s}", systemMessageEnvName))
jenkins := createJenkinsCR(t, jenkinsCRName, namespace, &[]v1alpha2.SeedJob{mySeedJob.SeedJob}, groovyScripts, casc) jenkins := createJenkinsCR(t, jenkinsCRName, namespace, &[]v1alpha2.SeedJob{mySeedJob.SeedJob}, groovyScripts, casc)
createDefaultLimitsForContainersInNamespace(t, namespace) createDefaultLimitsForContainersInNamespace(t, namespace)
createKubernetesCredentialsProviderSecret(t, namespace, mySeedJob) createKubernetesCredentialsProviderSecret(t, namespace, mySeedJob)
waitForJenkinsBaseConfigurationToComplete(t, jenkins) waitForJenkinsBaseConfigurationToComplete(t, jenkins)
verifyJenkinsMasterPodAttributes(t, jenkins) verifyJenkinsMasterPodAttributes(t, jenkins)
client := verifyJenkinsAPIConnection(t, jenkins) client := verifyJenkinsAPIConnection(t, jenkins)
verifyPlugins(t, client, jenkins) verifyPlugins(t, client, jenkins)
@ -84,15 +89,13 @@ func TestConfiguration(t *testing.T) {
verifyJenkinsSeedJobs(t, client, []seedJobConfig{mySeedJob}) verifyJenkinsSeedJobs(t, client, []seedJobConfig{mySeedJob})
} }
func createUserConfigurationSecret(t *testing.T, namespace string, systemMessageEnvName, systemMessage string) { func createUserConfigurationSecret(t *testing.T, namespace string, stringData map[string]string) {
userConfiguration := &corev1.Secret{ userConfiguration := &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: userConfigurationSecretName, Name: userConfigurationSecretName,
Namespace: namespace, Namespace: namespace,
}, },
StringData: map[string]string{ StringData: stringData,
systemMessageEnvName: systemMessage,
},
} }
t.Logf("User configuration secret %+v", *userConfiguration) t.Logf("User configuration secret %+v", *userConfiguration)
@ -101,7 +104,7 @@ func createUserConfigurationSecret(t *testing.T, namespace string, systemMessage
} }
} }
func createUserConfigurationConfigMap(t *testing.T, namespace string, numberOfExecutors int, systemMessage string) { func createUserConfigurationConfigMap(t *testing.T, namespace string, numberOfExecutorsSecretKeyName string, systemMessage string) {
userConfiguration := &corev1.ConfigMap{ userConfiguration := &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: userConfigurationConfigMapName, Name: userConfigurationConfigMapName,
@ -111,8 +114,8 @@ func createUserConfigurationConfigMap(t *testing.T, namespace string, numberOfEx
"1-set-executors.groovy": fmt.Sprintf(` "1-set-executors.groovy": fmt.Sprintf(`
import jenkins.model.Jenkins import jenkins.model.Jenkins
Jenkins.instance.setNumExecutors(%d) Jenkins.instance.setNumExecutors(new Integer(secrets['%s']))
Jenkins.instance.save()`, numberOfExecutors), Jenkins.instance.save()`, numberOfExecutorsSecretKeyName),
"1-casc.yaml": fmt.Sprintf(` "1-casc.yaml": fmt.Sprintf(`
jenkins: jenkins:
systemMessage: "%s"`, systemMessage), systemMessage: "%s"`, systemMessage),
@ -275,6 +278,15 @@ if (!new Integer(%d).equals(Jenkins.instance.numExecutors)) {
logs, err := jenkinsClient.ExecuteScript(checkConfigurationViaGroovyScript) logs, err := jenkinsClient.ExecuteScript(checkConfigurationViaGroovyScript)
assert.NoError(t, err, logs) assert.NoError(t, err, logs)
checkSecretLoaderViaGroovyScript := fmt.Sprintf(`
if (!new Integer(%d).equals(new Integer(secrets['NUMBER_OF_EXECUTORS']))) {
throw new Exception("Secret not found by given key: NUMBER_OF_EXECUTORS")
}`, amountOfExecutors)
loader := groovy.AddSecretsLoaderToGroovyScript("/var/jenkins/groovy-scripts-secrets")
logs, err = jenkinsClient.ExecuteScript(loader(checkSecretLoaderViaGroovyScript))
assert.NoError(t, err, logs)
checkConfigurationAsCode := fmt.Sprintf(` checkConfigurationAsCode := fmt.Sprintf(`
if (!"%s".equals(Jenkins.instance.systemMessage)) { if (!"%s".equals(Jenkins.instance.systemMessage)) {
throw new Exception("Configuration as code failed") throw new Exception("Configuration as code failed")