public static async Task <k8s.Models.V1ConfigMap> CreateConfigMapAsync(this LinkedConfigMapCRD crd, Kubernetes client, string @namespace) { return(await client.CreateNamespacedConfigMapAsync(new k8s.Models.V1ConfigMap { Metadata = new k8s.Models.V1ObjectMeta() { Name = crd.Spec.Config.ConfigMapName, OwnerReferences = new List <V1OwnerReference>() { new V1OwnerReference { ApiVersion = "v1", BlockOwnerDeletion = true, Controller = true, Kind = crd.Kind, Uid = crd.Metadata.Uid, Name = crd.Metadata.Name } } }, Data = new Dictionary <string, string>() { { crd.Spec.Config.ConfigMapKey, crd.Spec.Config.ConfigMapValue } } }, @namespace).ConfigureAwait(false)); }
private async Task <bool> EnsureConfigMapAsync(WebPinger pinger) { var name = $"wp-{pinger.Metadata.Name}-config"; var configMaps = await _kubernetes.ListNamespacedConfigMapAsync( Program.NamespaceName, fieldSelector : $"metadata.name={name}"); if (!configMaps.Items.Any()) { var configMap = new V1ConfigMap { Metadata = new V1ObjectMeta { Name = name, Labels = new Dictionary <string, string>() { { "kiamol", "ch20" }, } }, Data = new Dictionary <string, string> { { "logConfig.js", ConfigMapData.logConfig.Replace("\r\n", "\n") } } }; await _kubernetes.CreateNamespacedConfigMapAsync(configMap, Program.NamespaceName); Console.WriteLine($"** Created ConfigMap: {name}, in namespace: {Program.NamespaceName}"); return(true); } else { Console.WriteLine($"** ConfigMap exists: {name}, in namespace: {Program.NamespaceName}"); return(false); } }
public async Task WatchingEmptyNamespaceGrowByTwoItemsWorks() { // make sure namespace "test" contains no configmaps var configmapsToDelete = await _k8S.ListNamespacedConfigMapAsync(TestNamespace); foreach (var configmap in configmapsToDelete.Items) { await _k8S.DeleteNamespacedConfigMapAsync(configmap.Name(), TestNamespace); } using var watch = new WatchedResource <V1ConfigMap, V1ConfigMapList>((b, limit) => _k8S.ListNamespacedConfigMapWithHttpMessagesAsync(TestNamespace, watch: b, limit: limit)); var events = new List <(WatchEventType type, V1ConfigMap entity)>(); watch.EntityChanged += (type, entity) => { if (((V1ConfigMap)entity).Metadata.Name.StartsWith("testconfigmap")) { events.Add((type, (V1ConfigMap)entity)); } }; Thread.Sleep(1000); Assert.Empty(events); var configmaps = watch.GetAll <V1ConfigMap>().ToList(); Assert.Empty(configmaps); // Now create two configmaps var configMap1 = new V1ConfigMap { Metadata = new V1ObjectMeta { Name = "testconfigmap1", NamespaceProperty = TestNamespace }, Data = new Dictionary <string, string> { { "test1", "value1" }, { "test2", "value2" } } }; var configMap2 = new V1ConfigMap { Metadata = new V1ObjectMeta { Name = "testconfigmap2", NamespaceProperty = TestNamespace }, Data = new Dictionary <string, string> { { "test3", "value3" }, { "test4", "value4" } } }; await _k8S.CreateNamespacedConfigMapAsync(configMap1, TestNamespace); await _k8S.CreateNamespacedConfigMapAsync(configMap2, TestNamespace); Thread.Sleep(11000); // we need two loops and some extra time to detect the new entities Assert.Equal(2, events.Count); Assert.Contains(events, ev => ev.entity.Metadata.Name == configMap1.Name()); Assert.Contains(events, ev => ev.entity.Metadata.Name == configMap2.Name()); }