diff --git a/Devantler.KubernetesProvisioner.Resource.Native/Devantler.KubernetesProvisioner.Resource.Native.csproj b/Devantler.KubernetesProvisioner.Resource.Native/Devantler.KubernetesProvisioner.Resource.Native.csproj new file mode 100644 index 0000000..4a9fd12 --- /dev/null +++ b/Devantler.KubernetesProvisioner.Resource.Native/Devantler.KubernetesProvisioner.Resource.Native.csproj @@ -0,0 +1,18 @@ + + + + net8.0 + enable + enable + preview-all + true + true + true + false + + + + + + + diff --git a/Devantler.KubernetesProvisioner.Resource.Native/KubernetesResourceProvisioner.cs b/Devantler.KubernetesProvisioner.Resource.Native/KubernetesResourceProvisioner.cs new file mode 100644 index 0000000..98cca58 --- /dev/null +++ b/Devantler.KubernetesProvisioner.Resource.Native/KubernetesResourceProvisioner.cs @@ -0,0 +1,49 @@ +using k8s; +using k8s.Models; + +namespace Devantler.KubernetesProvisioner.Resource.Native; + +/// +/// A class that provisions resources in a Kubernetes cluster. +/// +public sealed class KubernetesResourceProvisioner : IDisposable +{ + readonly Kubernetes? _kubernetesClient; + + /// + /// Initializes a new instance of the class. + /// + /// + public KubernetesResourceProvisioner(string context) + { + var kubeConfig = KubernetesClientConfiguration.LoadKubeConfigAsync().Result; + var config = KubernetesClientConfiguration.BuildConfigFromConfigObject(kubeConfig, context); + _kubernetesClient = new Kubernetes(config); + } + + /// + /// Creates a namespace in the Kubernetes cluster. + /// + /// + /// + public async Task CreateNamespaceAsync(V1Namespace @namespace) => + await _kubernetesClient.CreateNamespaceAsync(@namespace).ConfigureAwait(false); + + /// + /// Creates a secret in the Kubernetes cluster. + /// + /// + /// + /// + public async Task CreateSecretAsync(V1Secret secret, string @namespace) => + await _kubernetesClient.CreateNamespacedSecretAsync(secret, @namespace).ConfigureAwait(false); + + /// + /// Disposes the resources used by the . + /// + public void Dispose() + { + _kubernetesClient?.Dispose(); + GC.SuppressFinalize(this); + } +} diff --git a/Devantler.KubernetesProvisioner.sln b/Devantler.KubernetesProvisioner.sln index 15d74f9..32bd2cf 100644 --- a/Devantler.KubernetesProvisioner.sln +++ b/Devantler.KubernetesProvisioner.sln @@ -13,6 +13,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Devantler.KubernetesProvisi EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Devantler.KubernetesProvisioner.Cluster.Kind.Tests", "Devantler.KubernetesProvisioner.Cluster.Kind.Tests\Devantler.KubernetesProvisioner.Cluster.Kind.Tests.csproj", "{D61BE646-1573-45DE-95DC-53698B68377E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Devantler.KubernetesProvisioner.Resource.Native", "Devantler.KubernetesProvisioner.Resource.Native\Devantler.KubernetesProvisioner.Resource.Native.csproj", "{C8BDA408-0E9E-480D-B243-618E0E0579AE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -42,5 +44,9 @@ Global {D61BE646-1573-45DE-95DC-53698B68377E}.Debug|Any CPU.Build.0 = Debug|Any CPU {D61BE646-1573-45DE-95DC-53698B68377E}.Release|Any CPU.ActiveCfg = Release|Any CPU {D61BE646-1573-45DE-95DC-53698B68377E}.Release|Any CPU.Build.0 = Release|Any CPU + {C8BDA408-0E9E-480D-B243-618E0E0579AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C8BDA408-0E9E-480D-B243-618E0E0579AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8BDA408-0E9E-480D-B243-618E0E0579AE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C8BDA408-0E9E-480D-B243-618E0E0579AE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal