pkg/service/platform/platform.go (65 lines of code) (raw):

package platform import ( "fmt" "io" "strings" "github.com/pkg/errors" 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" gerritApi "github.com/epam/edp-gerrit-operator/v2/api/v1" "github.com/epam/edp-gerrit-operator/v2/pkg/service/helpers" "github.com/epam/edp-gerrit-operator/v2/pkg/service/platform/k8s" "github.com/epam/edp-gerrit-operator/v2/pkg/service/platform/openshift" ) const ( Kubernetes = "kubernetes" OpenShift = "openshift" Test = "test" ) // PlatformService defines common behavior of the services for the supported platforms. type PlatformService interface { GetPods(namespace string, filter *metav1.ListOptions) (*coreV1Api.PodList, error) // GetExternalEndpoint returns host and scheme associated with the object. GetExternalEndpoint(namespace, name string) (string, string, error) ExecInPod(namespace, podName string, command []string) (io.Reader, io.Reader, error) GetSecretData(namespace, name string) (map[string][]byte, error) CreateSecret(gerrit *gerritApi.Gerrit, name string, data map[string][]byte, labels map[string]string) error GetSecret(namespace, name string) (map[string][]byte, error) IsDeploymentReady(instance *gerritApi.Gerrit) (bool, error) PatchDeploymentEnv(gerrit *gerritApi.Gerrit, env []coreV1Api.EnvVar) error GetDeploymentSSHPort(gerrit *gerritApi.Gerrit) (int32, error) GetService(namespace, name string) (*coreV1Api.Service, error) UpdateService(svc *coreV1Api.Service, port int32) error GenerateKeycloakSettings(instance *gerritApi.Gerrit) ([]coreV1Api.EnvVar, error) CreateConfigMap(instance *gerritApi.Gerrit, configMapName string, configMapData map[string]string) error } // NewService creates a new instance of the platform.Service type using scheme parameter provided. func NewService(platformType string, scheme *runtime.Scheme) (PlatformService, error) { config := clientcmd.NewNonInteractiveDeferredLoadingClientConfig( clientcmd.NewDefaultClientConfigLoadingRules(), &clientcmd.ConfigOverrides{}, ) restConfig, err := config.ClientConfig() if err != nil { return nil, errors.Wrap(helpers.LogErrorAndReturn(err), "Failed to get rest configs for platform") } platformType = strings.ToLower(platformType) switch platformType { case OpenShift: platform := &openshift.OpenshiftService{} if err = platform.Init(restConfig, scheme); err != nil { return nil, errors.Wrap(helpers.LogErrorAndReturn(err), "Failed to init for Openshift platform") } return platform, nil case Kubernetes: platform := &k8s.K8SService{} err = platform.Init(restConfig, scheme) if err != nil { return nil, errors.Wrap(err, "Failed to init for Kubernetes platform") } return platform, nil case Test: return nil, nil // for tests only. remove it when will fix platform.Init() default: return nil, fmt.Errorf("unknown platform type '%s'", platformType) } }