diff --git a/Devantler.KubernetesProvisioner.GitOps.Core/IGitOpsProvisioner.cs b/Devantler.KubernetesProvisioner.GitOps.Core/IGitOpsProvisioner.cs
index 0de7f67..4dad642 100644
--- a/Devantler.KubernetesProvisioner.GitOps.Core/IGitOpsProvisioner.cs
+++ b/Devantler.KubernetesProvisioner.GitOps.Core/IGitOpsProvisioner.cs
@@ -9,6 +9,18 @@ public interface IGitOpsProvisioner
/// The Kubernetes context.
///
public string? Context { get; set; }
+
+ ///
+ /// Push manifests to an OCI registry
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Task PushManifestsAsync(Uri registryUri, string manifestsDirectory, string? userName = default, string? password = default, CancellationToken cancellationToken = default);
+
///
/// Install the GitOps tooling on the Kubernetes cluster.
///
diff --git a/Devantler.KubernetesProvisioner.GitOps.Flux.Tests/Devantler.KubernetesProvisioner.GitOps.Flux.Tests.csproj b/Devantler.KubernetesProvisioner.GitOps.Flux.Tests/Devantler.KubernetesProvisioner.GitOps.Flux.Tests.csproj
index e128f32..466117e 100644
--- a/Devantler.KubernetesProvisioner.GitOps.Flux.Tests/Devantler.KubernetesProvisioner.GitOps.Flux.Tests.csproj
+++ b/Devantler.KubernetesProvisioner.GitOps.Flux.Tests/Devantler.KubernetesProvisioner.GitOps.Flux.Tests.csproj
@@ -21,6 +21,10 @@
+
+
+
+
@@ -33,4 +37,4 @@
-
\ No newline at end of file
+
diff --git a/Devantler.KubernetesProvisioner.GitOps.Flux.Tests/FluxProvisionerTests/AllMethodsTests.cs b/Devantler.KubernetesProvisioner.GitOps.Flux.Tests/FluxProvisionerTests/AllMethodsTests.cs
index 17a4d3f..5ee08f0 100644
--- a/Devantler.KubernetesProvisioner.GitOps.Flux.Tests/FluxProvisionerTests/AllMethodsTests.cs
+++ b/Devantler.KubernetesProvisioner.GitOps.Flux.Tests/FluxProvisionerTests/AllMethodsTests.cs
@@ -1,4 +1,5 @@
using Devantler.KindCLI;
+using Devantler.ContainerEngineProvisioner.Docker;
namespace Devantler.KubernetesProvisioner.GitOps.Flux.Tests.FluxProvisionerTests;
@@ -20,12 +21,17 @@ public async Task Flux_InstallsAndReconciles_KustomizationsAsync()
string context = "kind-" + clusterName;
string configPath = Path.Combine(AppContext.BaseDirectory, "assets/kind-config.yaml");
var fluxProvisioner = new FluxProvisioner(context);
+ var dockerProvisioner = new DockerProvisioner();
var cancellationToken = new CancellationToken();
// Act
await Kind.DeleteClusterAsync(clusterName, cancellationToken);
await Kind.CreateClusterAsync(clusterName, configPath, cancellationToken);
+ await dockerProvisioner.CreateRegistryAsync("ksail-registry", 5555, cancellationToken);
await fluxProvisioner.InstallAsync(cancellationToken);
+ string testFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
+ await File.WriteAllTextAsync(testFile, "test");
+ await fluxProvisioner.PushManifestsAsync(new Uri("oci://localhost:5555/test-manifest"), testFile, cancellationToken: cancellationToken);
await FluxCLI.Flux.CreateOCISourceAsync("podinfo", new Uri("oci://ghcr.io/stefanprodan/manifests/podinfo"), context, cancellationToken: cancellationToken);
await FluxCLI.Flux.CreateKustomizationAsync("podinfo", "OCIRepository/podinfo", "", context, cancellationToken: cancellationToken);
await fluxProvisioner.ReconcileAsync(cancellationToken);
@@ -33,5 +39,7 @@ public async Task Flux_InstallsAndReconciles_KustomizationsAsync()
// Cleanup
await Kind.DeleteClusterAsync(clusterName, cancellationToken);
+ await dockerProvisioner.DeleteRegistryAsync("ksail-registry", cancellationToken);
+ File.Delete(testFile);
}
}
diff --git a/Devantler.KubernetesProvisioner.GitOps.Flux/FluxProvisioner.cs b/Devantler.KubernetesProvisioner.GitOps.Flux/FluxProvisioner.cs
index 30c5a42..baad414 100644
--- a/Devantler.KubernetesProvisioner.GitOps.Flux/FluxProvisioner.cs
+++ b/Devantler.KubernetesProvisioner.GitOps.Flux/FluxProvisioner.cs
@@ -18,6 +18,10 @@ public class FluxProvisioner(string? context = default) : IGitOpsProvisioner
///
public string? Context { get; set; } = context;
+ ///
+ public async Task PushManifestsAsync(Uri registryUri, string manifestsDirectory, string? userName = null, string? password = null, CancellationToken cancellationToken = default) =>
+ await FluxCLI.Flux.PushArtifactAsync(registryUri, manifestsDirectory, cancellationToken: cancellationToken).ConfigureAwait(false);
+
///
/// Install Flux on the Kubernetes cluster.
///
@@ -26,11 +30,7 @@ public class FluxProvisioner(string? context = default) : IGitOpsProvisioner
public async Task InstallAsync(CancellationToken cancellationToken = default) =>
await FluxCLI.Flux.InstallAsync(Context, cancellationToken).ConfigureAwait(false);
- ///
- /// Reconcile resources on the Kubernetes cluster.
- ///
- ///
- ///
+ ///
public async Task ReconcileAsync(CancellationToken cancellationToken = default)
{
using var kubernetesResourceProvisioner = new KubernetesResourceProvisioner(Context);