public void PreferVolumeNameMappingForVolume() { var config = new KubernetesConfig("image", CreatePodParameters.Create(hostConfig: VolumeMountHostConfig1), Option.None <AuthConfig>()); var docker = new DockerModule("module1", "v1", ModuleStatus.Running, RestartPolicy.Always, Config1, ImagePullPolicy.OnCreate, DefaultConfigurationInfo, EnvVarsDict); var module = new KubernetesModule(docker, config, EdgeletModuleOwner); var mapper = new KubernetesPvcMapper("a-volume", "storageclass", 1); var resourceQuantity = new ResourceQuantity("1Mi"); var pvcs = mapper.CreatePersistentVolumeClaims(module, DefaultLabels); Assert.True(pvcs.HasValue); var pvcList = pvcs.OrDefault(); Assert.True(pvcList.Any()); Assert.Single(pvcList); var aVolumeClaim = pvcList.Single(pvc => pvc.Metadata.Name == "module1-a-volume"); Assert.True(aVolumeClaim.Metadata.Labels.SequenceEqual(DefaultLabels)); Assert.Equal("ReadOnlyMany", aVolumeClaim.Spec.AccessModes[0]); Assert.Equal("storageclass", aVolumeClaim.Spec.StorageClassName); Assert.Equal("a-volume", aVolumeClaim.Spec.VolumeName); Assert.Equal(resourceQuantity, aVolumeClaim.Spec.Resources.Requests["storage"]); Assert.Equal(1, aVolumeClaim.Metadata.OwnerReferences.Count); Assert.Equal(V1Deployment.KubeKind, aVolumeClaim.Metadata.OwnerReferences[0].Kind); Assert.Equal(EdgeletModuleOwner.Name, aVolumeClaim.Metadata.OwnerReferences[0].Name); }
public void VolumeNameMappingForVolume() { var config = new KubernetesConfig("image", CreatePodParameters.Create(hostConfig: VolumeMountHostConfig), Option.None <AuthConfig>()); var docker = new DockerModule("module1", "v1", ModuleStatus.Running, RestartPolicy.Always, Config1, ImagePullPolicy.OnCreate, DefaultConfigurationInfo, EnvVarsDict); var module = new KubernetesModule(docker, config); var mapper = new KubernetesPvcMapper("a-pvc-name", null, 37); var resourceQuantity = new ResourceQuantity("37Mi"); var pvcs = mapper.CreatePersistentVolumeClaims(module, DefaultLabels); Assert.True(pvcs.HasValue); var pvcList = pvcs.OrDefault(); Assert.True(pvcList.Any()); Assert.Equal(2, pvcList.Count); var aVolumeClaim = pvcList.Single(pvc => pvc.Metadata.Name == "a-volume"); Assert.True(aVolumeClaim.Metadata.Labels.SequenceEqual(DefaultLabels)); Assert.Equal("ReadOnlyMany", aVolumeClaim.Spec.AccessModes[0]); Assert.Null(aVolumeClaim.Spec.StorageClassName); Assert.Equal("a-pvc-name", aVolumeClaim.Spec.VolumeName); Assert.Equal(resourceQuantity, aVolumeClaim.Spec.Resources.Requests["storage"]); var bVolumeClaim = pvcList.Single(pvc => pvc.Metadata.Name == "b-volume"); Assert.True(bVolumeClaim.Metadata.Labels.SequenceEqual(DefaultLabels)); Assert.Equal("ReadWriteMany", bVolumeClaim.Spec.AccessModes[0]); Assert.Null(bVolumeClaim.Spec.StorageClassName); Assert.Equal("a-pvc-name", bVolumeClaim.Spec.VolumeName); Assert.Equal(resourceQuantity, bVolumeClaim.Spec.Resources.Requests["storage"]); }
public void InvalidPreferVolumeNameMappingForVolume() { var config = new KubernetesConfig("image", CreatePodParameters.Create(hostConfig: VolumeMountHostConfig), Option.None <AuthConfig>()); var docker = new DockerModule("module1", "v1", ModuleStatus.Running, RestartPolicy.Always, Config1, ImagePullPolicy.OnCreate, DefaultConfigurationInfo, EnvVarsDict); var module = new KubernetesModule(docker, config, EdgeletModuleOwner); var mapper = new KubernetesPvcMapper("a-volume", "storageclass", 1); var resourceQuantity = new ResourceQuantity("1Mi"); Assert.Throws <InvalidModuleException>(() => mapper.CreatePersistentVolumeClaims(module, DefaultLabels)); }
public void NoMountsNoClaims() { var config = new KubernetesConfig("image", CreatePodParameters.Create(), Option.None <AuthConfig>()); var docker = new DockerModule("module1", "v1", ModuleStatus.Running, RestartPolicy.Always, Config1, ImagePullPolicy.OnCreate, DefaultConfigurationInfo, EnvVarsDict); var module = new KubernetesModule(docker, config, EdgeletModuleOwner); var mapper = new KubernetesPvcMapper(string.Empty, "storage", 1); var pvcs = mapper.CreatePersistentVolumeClaims(module, DefaultLabels); Assert.False(pvcs.HasValue); }
public void EmptyDirMappingForVolume2() { var config = new KubernetesConfig("image", CreatePodParameters.Create(hostConfig: VolumeMountHostConfig), Option.None <AuthConfig>()); var docker = new DockerModule("module1", "v1", ModuleStatus.Running, RestartPolicy.Always, Config1, ImagePullPolicy.OnCreate, Constants.DefaultPriority, DefaultConfigurationInfo, EnvVarsDict); var module = new KubernetesModule(docker, config, EdgeletModuleOwner); var mapper = new KubernetesPvcMapper(false, null, 0); var pvcs = mapper.CreatePersistentVolumeClaims(module, DefaultLabels); Assert.False(pvcs.HasValue); }
private EdgeDeploymentController CreateDeploymentController(string deviceSelector, IModuleIdentityLifecycleManager moduleLifeCycleManager, string storageClassName) { var resourceName = new ResourceName("hostname", "deviceid"); var kubernetesServiceMapper = new KubernetesServiceMapper(PortMapServiceType.ClusterIP); string proxyImagePullSecretName = null; IDictionary <string, bool> experimentalFeatures = null; var deploymentMapper = new KubernetesDeploymentMapper( this.client.DeviceNamespace, "edgehub", "proxy", Option.Maybe(proxyImagePullSecretName), "configPath", "config-volume", "configMapName", "trustBundlePath", "trust-bundle-volume", "trustBundleConfigMapName", PortMapServiceType.ClusterIP, true, storageClassName, Option.Some <uint>(100), "apiVersion", new Uri("http://localhost:35001"), new Uri("http://localhost:35000"), false, false, experimentalFeatures == null ? new Dictionary <string, bool>() : experimentalFeatures); var pvcMapper = new KubernetesPvcMapper(true, storageClassName, 100); var serviceAccountMapper = new KubernetesServiceAccountMapper(); return(new EdgeDeploymentController( resourceName, deviceSelector, this.client.DeviceNamespace, this.client.Kubernetes, moduleLifeCycleManager, kubernetesServiceMapper, deploymentMapper, pvcMapper, serviceAccountMapper)); }