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; } }
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); } }