Skip to content

Commit

Permalink
Add Kubernetes resource native project and class
Browse files Browse the repository at this point in the history
  • Loading branch information
devantler committed Sep 22, 2024
1 parent b0655c8 commit 25da014
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<AnalysisLevel>preview-all</AnalysisLevel>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="KubernetesClient" Version="15.0.1" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using k8s;
using k8s.Models;

namespace Devantler.KubernetesProvisioner.Resource.Native;

/// <summary>
/// A class that provisions resources in a Kubernetes cluster.
/// </summary>
public sealed class KubernetesResourceProvisioner : IDisposable
{
readonly Kubernetes? _kubernetesClient;

/// <summary>
/// Initializes a new instance of the <see cref="KubernetesResourceProvisioner"/> class.
/// </summary>
/// <param name="context"></param>
public KubernetesResourceProvisioner(string context)
{
var kubeConfig = KubernetesClientConfiguration.LoadKubeConfigAsync().Result;
var config = KubernetesClientConfiguration.BuildConfigFromConfigObject(kubeConfig, context);
_kubernetesClient = new Kubernetes(config);
}

/// <summary>
/// Creates a namespace in the Kubernetes cluster.
/// </summary>
/// <param name="namespace"></param>
/// <returns></returns>
public async Task CreateNamespaceAsync(V1Namespace @namespace) =>
await _kubernetesClient.CreateNamespaceAsync(@namespace).ConfigureAwait(false);

/// <summary>
/// Creates a secret in the Kubernetes cluster.
/// </summary>
/// <param name="secret"></param>
/// <param name="namespace"></param>
/// <returns></returns>
public async Task CreateSecretAsync(V1Secret secret, string @namespace) =>
await _kubernetesClient.CreateNamespacedSecretAsync(secret, @namespace).ConfigureAwait(false);

/// <summary>
/// Disposes the resources used by the <see cref="KubernetesResourceProvisioner"/>.
/// </summary>
public void Dispose()
{
_kubernetesClient?.Dispose();
GC.SuppressFinalize(this);
}
}
6 changes: 6 additions & 0 deletions Devantler.KubernetesProvisioner.sln
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

0 comments on commit 25da014

Please sign in to comment.