pkg/service/platform/platform.go (64 lines of code) (raw):
package platform
import (
"errors"
"fmt"
"strings"
coreV1Api "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/tools/clientcmd"
"sigs.k8s.io/controller-runtime/pkg/client"
cdPipeApi "github.com/epam/edp-cd-pipeline-operator/v2/pkg/apis/edp/v1"
keycloakV1Api "github.com/epam/edp-keycloak-operator/pkg/apis/v1/v1"
jenkinsApi "github.com/epam/edp-jenkins-operator/v2/pkg/apis/v2/v1"
"github.com/epam/edp-jenkins-operator/v2/pkg/service/platform/kubernetes"
"github.com/epam/edp-jenkins-operator/v2/pkg/service/platform/openshift"
)
const (
K8SPlatformType = "kubernetes"
OpenShiftPlatformType = "openshift"
)
// PlatformService interface.
type PlatformService interface {
CreateSecret(instance *jenkinsApi.Jenkins, name string, data map[string][]byte) error
CreateConfigMapFromFileOrDir(instance *jenkinsApi.Jenkins, configMapName string, configMapKey *string, path string, ownerReference metav1.Object, customLabels ...map[string]string) error
GetExternalEndpoint(namespace, name string) (string, string, string, error)
IsDeploymentReady(instance *jenkinsApi.Jenkins) (bool, error)
GetSecretData(namespace, name string) (map[string][]byte, error)
GetConfigMapData(namespace, name string) (map[string]string, error)
AddVolumeToInitContainer(instance *jenkinsApi.Jenkins, containerName string, vol []coreV1Api.Volume, volMount []coreV1Api.VolumeMount) error
CreateKeycloakClient(kc *keycloakV1Api.KeycloakClient) error
GetKeycloakClient(name, namespace string) (keycloakV1Api.KeycloakClient, error)
CreateJenkinsScript(namespace string, configMap string, forceExecute bool) (*jenkinsApi.JenkinsScript, error)
CreateConfigMap(instance *jenkinsApi.Jenkins, name string, data map[string]string,
labels ...map[string]string) (*coreV1Api.ConfigMap, error)
CreateConfigMapWithUpdate(instance *jenkinsApi.Jenkins, name string, data map[string]string,
labels ...map[string]string) (isUpdated bool, err error)
CreateEDPComponentIfNotExist(instance *jenkinsApi.Jenkins, url, icon string) error
CreateStageJSON(stage *cdPipeApi.Stage) (string, error)
}
// NewPlatformService returns platform service interface implementation.
func NewPlatformService(platformType string, scheme *runtime.Scheme, k8sClient client.Client) (PlatformService, error) {
config := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
clientcmd.NewDefaultClientConfigLoadingRules(),
&clientcmd.ConfigOverrides{},
)
restConfig, err := config.ClientConfig()
if err != nil {
return nil, fmt.Errorf("failed to get rest configs for platform: %w", err)
}
switch strings.ToLower(platformType) {
case OpenShiftPlatformType:
platform := openshift.OpenshiftService{}
if err := platform.Init(restConfig, scheme, k8sClient); err != nil {
return nil, fmt.Errorf("failed to init Openshift platform: %w", err)
}
return &platform, nil
case K8SPlatformType:
platform := kubernetes.K8SService{}
if err := platform.Init(restConfig, scheme, k8sClient); err != nil {
return nil, fmt.Errorf(" failed to init Kubernetes platform: %w", err)
}
return &platform, nil
default:
return nil, errors.New("received unknown platform type")
}
}