github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/caas/kubernetes/provider/export_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package provider 5 6 import ( 7 "context" 8 "sync" 9 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 apps "k8s.io/api/apps/v1" 13 core "k8s.io/api/core/v1" 14 apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" 15 "k8s.io/apimachinery/pkg/api/resource" 16 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" 17 "k8s.io/client-go/kubernetes" 18 19 "github.com/juju/juju/caas" 20 k8sspecs "github.com/juju/juju/caas/kubernetes/provider/specs" 21 "github.com/juju/juju/caas/specs" 22 jujucloud "github.com/juju/juju/cloud" 23 "github.com/juju/juju/cloudconfig/podcfg" 24 "github.com/juju/juju/environs" 25 "github.com/juju/juju/mongo" 26 "github.com/juju/juju/storage" 27 ) 28 29 var ( 30 PrepareWorkloadSpec = prepareWorkloadSpec 31 OperatorPod = operatorPod 32 FindControllerNamespace = findControllerNamespace 33 GetLocalMicroK8sConfig = getLocalMicroK8sConfig 34 AttemptMicroK8sCloud = attemptMicroK8sCloud 35 AttemptMicroK8sCredential = attemptMicroK8sCredential 36 EnsureMicroK8sSuitable = ensureMicroK8sSuitable 37 NewK8sBroker = newK8sBroker 38 ToYaml = toYaml 39 Indent = indent 40 ProcessSecretData = processSecretData 41 42 CompileK8sCloudCheckers = compileK8sCloudCheckers 43 CompileLifecycleApplicationRemovalSelector = compileLifecycleApplicationRemovalSelector 44 CompileLifecycleModelTeardownSelector = compileLifecycleModelTeardownSelector 45 46 UpdateStrategyForDeployment = updateStrategyForDeployment 47 UpdateStrategyForStatefulSet = updateStrategyForStatefulSet 48 UpdateStrategyForDaemonSet = updateStrategyForDaemonSet 49 DecideKubeConfigDir = decideKubeConfigDir 50 RulesForSecretAccess = rulesForSecretAccess 51 ) 52 53 type ( 54 KubernetesClient = kubernetesClient 55 ControllerServiceSpec = controllerServiceSpec 56 CRDGetter = crdGetter 57 ) 58 59 type ControllerStackerForTest interface { 60 controllerStacker 61 GetControllerAgentConfigContent(*gc.C) string 62 GetControllerUnitAgentConfigContent(*gc.C) string 63 GetControllerUnitAgentPassword() string 64 GetSharedSecretAndSSLKey(*gc.C) (string, string) 65 GetStorageSize() resource.Quantity 66 GetControllerSvcSpec(string, *podcfg.BootstrapConfig) (*controllerServiceSpec, error) 67 SetContext(ctx environs.BootstrapContext) 68 } 69 70 func (cs *controllerStack) GetControllerAgentConfigContent(c *gc.C) string { 71 agentCfg, err := cs.agentConfig.Render() 72 c.Assert(err, jc.ErrorIsNil) 73 return string(agentCfg) 74 } 75 76 func (cs *controllerStack) GetControllerUnitAgentConfigContent(c *gc.C) string { 77 agentCfg, err := cs.unitAgentConfig.Render() 78 c.Assert(err, jc.ErrorIsNil) 79 return string(agentCfg) 80 } 81 82 func (cs *controllerStack) GetControllerUnitAgentPassword() string { 83 return cs.unitAgentConfig.OldPassword() 84 } 85 86 func (cs *controllerStack) GetSharedSecretAndSSLKey(c *gc.C) (string, string) { 87 si, ok := cs.agentConfig.StateServingInfo() 88 c.Assert(ok, jc.IsTrue) 89 return si.SharedSecret, mongo.GenerateSSLKey(si.Cert, si.PrivateKey) 90 } 91 92 func (cs *controllerStack) GetStorageSize() resource.Quantity { 93 return cs.storageSize 94 } 95 96 func (cs *controllerStack) GetControllerSvcSpec(cloudType string, cfg *podcfg.BootstrapConfig) (*controllerServiceSpec, error) { 97 return cs.getControllerSvcSpec(cloudType, cfg) 98 } 99 100 func (cs *controllerStack) SetContext(ctx environs.BootstrapContext) { 101 cs.ctx = ctx 102 } 103 104 func NewcontrollerStackForTest( 105 ctx environs.BootstrapContext, 106 stackName, 107 storageClass string, 108 broker *kubernetesClient, 109 pcfg *podcfg.ControllerPodConfig, 110 ) (ControllerStackerForTest, error) { 111 cs, err := newcontrollerStack(ctx, stackName, storageClass, broker, pcfg) 112 if err != nil { 113 return nil, err 114 } 115 return cs.(*controllerStack), nil 116 } 117 118 func Pod(u *workloadSpec) k8sspecs.PodSpecWithAnnotations { 119 return u.Pod 120 } 121 122 func NewProvider() caas.ContainerEnvironProvider { 123 return kubernetesEnvironProvider{} 124 } 125 126 func NewProviderWithFakes( 127 runner CommandRunner, 128 credentialGetter func(CommandRunner) (jujucloud.Credential, error), 129 getter func(CommandRunner) (jujucloud.Cloud, error), 130 brokerGetter func(environs.OpenParams) (ClusterMetadataStorageChecker, error)) caas.ContainerEnvironProvider { 131 return kubernetesEnvironProvider{ 132 environProviderCredentials: environProviderCredentials{ 133 cmdRunner: runner, 134 builtinCredentialGetter: credentialGetter, 135 }, 136 cmdRunner: runner, 137 builtinCloudGetter: getter, 138 brokerGetter: brokerGetter, 139 } 140 } 141 142 func NewProviderCredentials( 143 getter func(CommandRunner) (jujucloud.Credential, error), 144 ) environProviderCredentials { 145 return environProviderCredentials{ 146 builtinCredentialGetter: getter, 147 } 148 } 149 150 func (k *kubernetesClient) GetCRDsForCRs(crs map[string][]unstructured.Unstructured, getter CRDGetterInterface) (out map[string]*apiextensionsv1.CustomResourceDefinition, err error) { 151 return k.getCRDsForCRs(crs, getter) 152 } 153 154 func (k *kubernetesClient) FileSetToVolume( 155 appName string, 156 annotations map[string]string, 157 workloadSpec *workloadSpec, 158 fileSet specs.FileSet, 159 cfgMapName configMapNameFunc, 160 ) (core.Volume, error) { 161 return k.fileSetToVolume(appName, annotations, workloadSpec, fileSet, cfgMapName) 162 } 163 164 func (k *kubernetesClient) ConfigurePodFiles( 165 appName string, 166 annotations map[string]string, 167 workloadSpec *workloadSpec, 168 containers []specs.ContainerSpec, 169 cfgMapName configMapNameFunc, 170 ) error { 171 return k.configurePodFiles(appName, annotations, workloadSpec, containers, cfgMapName) 172 } 173 174 func (k *kubernetesClient) DeleteClusterScopeResourcesModelTeardown(ctx context.Context, wg *sync.WaitGroup, errChan chan<- error) { 175 k.deleteClusterScopeResourcesModelTeardown(ctx, wg, errChan) 176 } 177 178 func (k *kubernetesClient) DeleteNamespaceModelTeardown(ctx context.Context, wg *sync.WaitGroup, errChan chan<- error) { 179 k.deleteNamespaceModelTeardown(ctx, wg, errChan) 180 } 181 182 func StorageProvider(k8sClient kubernetes.Interface, namespace string) storage.Provider { 183 return &storageProvider{&kubernetesClient{clientUnlocked: k8sClient, namespace: namespace}} 184 } 185 186 func GetCloudProviderFromNodeMeta(node core.Node) (string, string) { 187 return getCloudRegionFromNodeMeta(node) 188 } 189 190 func (k *kubernetesClient) GetPod(podName string) (*core.Pod, error) { 191 return k.getPod(podName) 192 } 193 194 func (k *kubernetesClient) GetStatefulSet(name string) (*apps.StatefulSet, error) { 195 return k.getStatefulSet(name) 196 }