pkg/controller/jenkins_job/chain/factory.go (83 lines of code) (raw):

package chain import ( "fmt" "github.com/go-logr/logr" "k8s.io/apimachinery/pkg/runtime" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" jenkinsApi "github.com/epam/edp-jenkins-operator/v2/pkg/apis/v2/v1" "github.com/epam/edp-jenkins-operator/v2/pkg/controller/helper" jobhandler "github.com/epam/edp-jenkins-operator/v2/pkg/controller/jenkins_job/chain/handler" "github.com/epam/edp-jenkins-operator/v2/pkg/service/platform" ) var log = ctrl.Log.WithName("jenkins_job") type Chain interface { Build() jobhandler.JenkinsJobHandler } func NewChain(chain Chain) jobhandler.JenkinsJobHandler { return chain.Build() } type DefChain struct { client client.Client platform platform.PlatformService log logr.Logger } func InitDefChain(scheme *runtime.Scheme, k8sClient client.Client) (*DefChain, error) { env, err := helper.GetPlatformTypeEnv() if err != nil { return nil, fmt.Errorf("failed to GetPlatformTypeEnv: %w", err) } ps, err := platform.NewPlatformService(env, scheme, k8sClient) if err != nil { return nil, fmt.Errorf("failed to create NewPlatformService: %w", err) } return &DefChain{ client: k8sClient, platform: ps, log: log.WithName("default-chain"), }, nil } func (c DefChain) Build() jobhandler.JenkinsJobHandler { return PutJenkinsPipeline{ client: c.client, ps: c.platform, log: c.log, } } type TriggerJobProvisionChain struct { client client.Client platform platform.PlatformService log logr.Logger } func InitTriggerJobProvisionChain(scheme *runtime.Scheme, k8sClient client.Client) (*TriggerJobProvisionChain, error) { env, err := helper.GetPlatformTypeEnv() if err != nil { return nil, fmt.Errorf("failed to get PlatformtypeEnv: %w", err) } ps, err := platform.NewPlatformService(env, scheme, k8sClient) if err != nil { return nil, fmt.Errorf("failed to create new PlatformService: %w", err) } return &TriggerJobProvisionChain{ client: k8sClient, platform: ps, log: log.WithName("trigger-job-provision-chain"), }, nil } func (c TriggerJobProvisionChain) Build() jobhandler.JenkinsJobHandler { return TriggerJobProvision{ client: c.client, ps: c.platform, log: c.log, } } func nextServeOrNil(next jobhandler.JenkinsJobHandler, jj *jenkinsApi.JenkinsJob) error { if next == nil { log.Info("handling of jenkins job has been finished", "name", jj.Name) return nil } if err := next.ServeRequest(jj); err != nil { return fmt.Errorf("failed to serve next request: %w", err) } return nil }