51 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
| package casc
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2"
 | |
| 	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/groovy"
 | |
| 
 | |
| 	"github.com/go-logr/logr"
 | |
| 	k8s "sigs.k8s.io/controller-runtime/pkg/client"
 | |
| )
 | |
| 
 | |
| // ConfigurationAsCode defines API which configures Jenkins with help Configuration as a code plugin
 | |
| type ConfigurationAsCode struct {
 | |
| 	groovyClient *groovy.Groovy
 | |
| }
 | |
| 
 | |
| // New creates new instance of ConfigurationAsCode
 | |
| func New(jenkinsClient jenkinsclient.Jenkins, k8sClient k8s.Client, logger logr.Logger, jenkins *v1alpha2.Jenkins) *ConfigurationAsCode {
 | |
| 	return &ConfigurationAsCode{
 | |
| 		groovyClient: groovy.New(jenkinsClient, k8sClient, logger, jenkins, "user-casc", jenkins.Spec.ConfigurationAsCode.Customization),
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Ensure configures Jenkins with help Configuration as a code plugin
 | |
| func (c *ConfigurationAsCode) Ensure(jenkins *v1alpha2.Jenkins) (requeue bool, err error) {
 | |
| 	requeue, err = c.groovyClient.WaitForSecretSynchronization(resources.ConfigurationAsCodeSecretVolumePath)
 | |
| 	if err != nil || requeue {
 | |
| 		return requeue, err
 | |
| 	}
 | |
| 
 | |
| 	return c.groovyClient.Ensure(func(name string) bool {
 | |
| 		return strings.HasSuffix(name, ".yaml") || strings.HasSuffix(name, ".yml")
 | |
| 	}, func(groovyScript string) string {
 | |
| 		return fmt.Sprintf(applyConfigurationAsCodeGroovyScriptFmt, groovyScript)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| const applyConfigurationAsCodeGroovyScriptFmt = `
 | |
| def config = '''
 | |
| %s
 | |
| '''
 | |
| def stream = new ByteArrayInputStream(config.getBytes('UTF-8'))
 | |
| 
 | |
| def source = new io.jenkins.plugins.casc.yaml.YamlSource(stream, io.jenkins.plugins.casc.yaml.YamlSource.READ_FROM_INPUTSTREAM)
 | |
| io.jenkins.plugins.casc.ConfigurationAsCode.get().configureWith(source)
 | |
| `
 |