pkg/client/jenkins/jenkins_client_factory.go (45 lines of code) (raw):
package jenkins
import (
"fmt"
"github.com/bndr/gojenkins"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/client"
"github.com/epam/edp-jenkins-operator/v2/pkg/service/platform"
plutil "github.com/epam/edp-jenkins-operator/v2/pkg/util/platform"
)
type ClientInterface interface {
GetJobByName(jobName string) (*gojenkins.Job, error)
BuildJob(jobName string, parameters map[string]string) (*int64, error)
GetLastBuild(job *gojenkins.Job) (*gojenkins.Build, error)
BuildIsRunning(build *gojenkins.Build) bool
AddRole(roleType, name, pattern string, permissions []string) error
RemoveRoles(roleType string, roleNames []string) error
AssignRole(roleType, roleName, subject string) error
GetRole(roleType, roleName string) (*Role, error)
UnAssignRole(roleType, roleName, subject string) error
}
type ClientFactory interface {
MakeNewClient(om *metav1.ObjectMeta, ownerName *string) (ClientInterface, error)
}
type ClientBuilder struct {
platform platform.PlatformService
client client.Client
}
func MakeClientBuilder(platformService platform.PlatformService, k8sClient client.Client) *ClientBuilder {
return &ClientBuilder{
platform: platformService,
client: k8sClient,
}
}
func (jcb *ClientBuilder) MakeNewClient(om *metav1.ObjectMeta, ownerName *string) (ClientInterface, error) {
j, err := plutil.GetJenkinsInstanceOwner(jcb.client, om.Name, om.Namespace, ownerName, om.GetOwnerReferences())
if err != nil {
return nil, fmt.Errorf("an error has been occurred while getting owner jenkins for jenkins folder %v: %w",
om.Name, err)
}
cl, err := InitGoJenkinsClient(j, jcb.platform)
if err != nil {
return nil, fmt.Errorf("failed to init go jenkins client: %w", err)
}
return cl, nil
}