CreateNamespaceAsync(Kubernetes k8sClient) { try { var namespaceParams = PrepareNamespaceParams(_groupName); var bodyNamespace = new V1Namespace(); var metaData = new V1ObjectMeta(); metaData.Name = namespaceParams; bodyNamespace.Metadata = metaData; var v1Namespace = await k8sClient.CreateNamespaceAsync(bodyNamespace); var nsModel = new MTANamespaceModel(v1Namespace); return(new Tuple <MTANamespaceModel, MTAErrorModel>(nsModel, null)); } catch (HttpOperationException ex) { var errorModel = new MTAErrorModel(ex); return(new Tuple <MTANamespaceModel, MTAErrorModel>(null, errorModel)); } catch (Exception) { throw; } }
public async Task EnsureNamespace() { var a1 = await client.ListNamespaceAsync(); foreach (var ns in a1.Items) { logger.LogInformation("{0}", ns.Metadata.Name); } logger.LogInformation("{0}", a1); var naso = new V1Namespace { Metadata = new V1ObjectMeta { Name = ns } }; await client.CreateNamespaceAsync(naso); }
public async Task EnsureNamespaceExistsAsync( KubernetesEndpointManifest clusterInfo) { using var operation = Logger.BeginOperation($"Checking Kubernetes namespace '{clusterInfo.Namespace.Metadata.Name}' ...", "K8SNamespace"); var found = await GetNamespaceAsync(clusterInfo); if (found == null) { await k8s.CreateNamespaceAsync(clusterInfo.Namespace); operation.EndWithSuccess(); } else { using var subOp = Logger.BeginOperation($"Updating Kubernetes namespace '{clusterInfo.Namespace.Metadata.Name}' ..."); await k8s.ReplaceNamespaceAsync(clusterInfo.Namespace, clusterInfo.Namespace.Metadata.Name); subOp.EndWithSuccess("Namespace updated"); } }
public async Task EnsureNamespace() { var a1 = await client.ListNamespaceAsync(); logger.LogInformation("Creating namespace {0}", ns); foreach (var ns in a1.Items) { if (ns.Metadata.Name == this.ns) { logger.LogInformation("Namespace {0} already exists", ns); return; } } var naso = new V1Namespace { Metadata = new V1ObjectMeta { Name = ns } }; await client.CreateNamespaceAsync(naso); }
public async Task CanCreateNamespaceAsync() { var result = await _client.CreateNamespaceAsync(_namespace); result.Metadata.Name.Should().BeEquivalentTo(_guidNS); }
static async Task Main(string[] args) { if (AnsiConsole.Capabilities.SupportLinks) { AnsiConsole.MarkupLine( $"[link=https://github.com/bovrhovn/]Demo for working with Kubernetes[/]!"); } HorizontalRule("Connecting to cluster using default load via .kube/config and list namespaces"); var config = KubernetesClientConfiguration.BuildConfigFromConfigFile(); IKubernetes client = new Kubernetes(config); System.Console.WriteLine($"Listening to master at {config.Host}"); var namespaces = await client.ListNamespaceAsync(); foreach (var ns in namespaces.Items) { System.Console.WriteLine($"{ns.Metadata.Uid} : {ns.Metadata.Name}"); } System.Console.Read(); //break for continue HorizontalRule("List pods in namespace - app"); var listPodInNamespace = await client.ListNamespacedPodAsync("app"); var table = new Table(); table.Border(TableBorder.Rounded); table.AddColumn("Pod name"); table.AddColumn(new TableColumn("Labels").Centered()); foreach (var currentPod in listPodInNamespace.Items) { string labels = string.Empty; foreach (var labelPair in currentPod.Metadata.Labels) { labels += $" {labelPair.Key}:{labelPair.Value} "; } table.AddRow(currentPod.Metadata.Name, labels); } AnsiConsole.Render(table); System.Console.Read(); //break for continue HorizontalRule("Creating namespace and pod"); var namespaceNameForTest = "test"; var newNamespace = new V1Namespace { Metadata = new V1ObjectMeta { Name = namespaceNameForTest } }; var resultNamespaceCreated = await client.CreateNamespaceAsync(newNamespace); System.Console.WriteLine( $"Namespace {resultNamespaceCreated.Metadata.Name} has been created and it is in {resultNamespaceCreated.Status.Phase} state"); var pod = new V1Pod { Metadata = new V1ObjectMeta { Name = "nginx-test" }, Spec = new V1PodSpec { Containers = new List <V1Container> { new V1Container { Image = "nginx:1.7.9", Name = "image-nginx-test", Ports = new List <V1ContainerPort> { new V1ContainerPort { ContainerPort = 80 } } } } } }; var createdPodInNamespaceTest = await client.CreateNamespacedPodAsync(pod, namespaceNameForTest); System.Console.WriteLine($"Pod in namespace {namespaceNameForTest} has been created with state {createdPodInNamespaceTest.Status.Phase}"); System.Console.Read(); //break for continue HorizontalRule("Exec into pod"); var webSocket = await client.WebSocketNamespacedPodExecAsync(pod.Metadata.Name, namespaceNameForTest, "env", pod.Spec.Containers[0].Name); var demux = new StreamDemuxer(webSocket); demux.Start(); var buff = new byte[4096]; var stream = demux.GetStream(1, 1); await stream.ReadAsync(buff, 0, 4096); var str = System.Text.Encoding.Default.GetString(buff); System.Console.WriteLine(str); //ouput ls command System.Console.Read(); //break for continue HorizontalRule($"Delete namespace {namespaceNameForTest}"); var status = await client.DeleteNamespaceAsync(namespaceNameForTest, new V1DeleteOptions()); System.Console.WriteLine($"Namespace {namespaceNameForTest} has been deleted - status {status.Message} - {status.Status}"); System.Console.Read(); //break for continue HorizontalRule("Load objects from yaml file"); var typeMap = new Dictionary <string, Type> { { "v1/Pod", typeof(V1Pod) }, { "v1/Service", typeof(V1Service) }, { "apps/v1/Deployment", typeof(V1Deployment) } }; string yamlPath = Path.Join(Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location), "my.yaml"); var objects = await Yaml.LoadAllFromFileAsync(yamlPath, typeMap); foreach (var obj in objects) { System.Console.WriteLine(obj); } System.Console.Read(); //stop and press key to continue HorizontalRule("Watching pods - watch pods"); var podlistResp = client.ListNamespacedPodWithHttpMessagesAsync("default", watch: true); using (podlistResp.Watch <V1Pod, V1PodList>((type, item) => { System.Console.WriteLine("==on watch event=="); System.Console.WriteLine(type); System.Console.WriteLine(item.Metadata.Name); System.Console.WriteLine("==on watch event=="); })) { System.Console.WriteLine("press ctrl + c to stop watching"); var ctrlc = new ManualResetEventSlim(false); System.Console.CancelKeyPress += (sender, eventArgs) => ctrlc.Set(); ctrlc.Wait(); } System.Console.Read(); //press any key to continue }