CreateServiceAsync(Kubernetes k8sClient, V1Service yamlModel, MTAServiceModel serviceModel)
        {
            try
            {
                var namespaceParams = PrepareNamespaceParams(_groupName);
                var serviceParams   = PrepareServiceParams(_serviceName);

                yamlModel.Metadata.Name = serviceParams;
                yamlModel.Spec.Selector = serviceModel.Selectors;

                var v1ServicePorts = new List <V1ServicePort>();
                foreach (var port in serviceModel.Ports)
                {
                    var v1ServicePort = new V1ServicePort(port);
                    v1ServicePorts.Add(v1ServicePort);
                }
                yamlModel.Spec.Ports = v1ServicePorts;

                var v1Service = await k8sClient.CreateNamespacedServiceAsync
                                    (yamlModel, namespaceParams);

                serviceModel = new MTAServiceModel(v1Service);
                return(new Tuple <MTAServiceModel, MTAErrorModel>(serviceModel, null));
            }
            catch (HttpOperationException ex)
            {
                var errorModel = new MTAErrorModel(ex);
                return(new Tuple <MTAServiceModel, MTAErrorModel>(null, errorModel));
            }
            catch (Exception)
            {
                throw;
            }
        }
Beispiel #2
0
        private async Task <bool> EnsureServiceAsync(WebPinger pinger)
        {
            var name     = $"wp-{pinger.Metadata.Name}";
            var services = await _kubernetes.ListNamespacedServiceAsync(
                Program.NamespaceName,
                fieldSelector : $"metadata.name={name}");

            if (!services.Items.Any())
            {
                var service = new V1Service
                {
                    Metadata = new V1ObjectMeta
                    {
                        Name   = name,
                        Labels = new Dictionary <string, string>()
                        {
                            { "kiamol", "ch20" },
                            { "app", "web-ping" },
                            { "target", pinger.Spec.Target }
                        }
                    },
                    Spec = new V1ServiceSpec
                    {
                        Type  = "ClusterIP",
                        Ports = new List <V1ServicePort>()
                        {
                            new V1ServicePort
                            {
                                Port       = 8080,
                                TargetPort = "api"
                            }
                        },
                        Selector = new Dictionary <string, string>()
                        {
                            { "app", "web-ping" },
                            { "instance", name }
                        }
                    }
                };

                await _kubernetes.CreateNamespacedServiceAsync(service, Program.NamespaceName);

                Console.WriteLine($"** Created Service: {name}, in namespace: {Program.NamespaceName}");
                return(true);
            }
            else
            {
                Console.WriteLine($"** Service exists: {name}, in namespace: {Program.NamespaceName}");
                return(false);
            }
        }