Beispiel #1
0
 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));
 }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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());
        }