diff --git a/cmd/bundle_test.go b/cmd/bundle_test.go index 59968f601..313ec7cf2 100644 --- a/cmd/bundle_test.go +++ b/cmd/bundle_test.go @@ -10,11 +10,11 @@ import ( "github.com/spf13/cobra" "github.com/windsorcli/cli/pkg/context/config" + "github.com/windsorcli/cli/pkg/context/shell" "github.com/windsorcli/cli/pkg/di" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" "github.com/windsorcli/cli/pkg/resources/artifact" "github.com/windsorcli/cli/pkg/resources/blueprint" - "github.com/windsorcli/cli/pkg/context/shell" ) // ============================================================================= diff --git a/cmd/push_test.go b/cmd/push_test.go index 98b939393..d96b838b7 100644 --- a/cmd/push_test.go +++ b/cmd/push_test.go @@ -11,7 +11,7 @@ import ( "github.com/spf13/cobra" "github.com/windsorcli/cli/pkg/context/config" "github.com/windsorcli/cli/pkg/di" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" "github.com/windsorcli/cli/pkg/resources/artifact" "github.com/windsorcli/cli/pkg/resources/blueprint" "github.com/windsorcli/cli/pkg/context/shell" diff --git a/cmd/root_test.go b/cmd/root_test.go index b5306a8cc..0d6ddb6c4 100644 --- a/cmd/root_test.go +++ b/cmd/root_test.go @@ -16,7 +16,7 @@ import ( "github.com/windsorcli/cli/pkg/context/config" "github.com/windsorcli/cli/pkg/di" envvars "github.com/windsorcli/cli/pkg/context/env" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" blueprintpkg "github.com/windsorcli/cli/pkg/resources/blueprint" "github.com/windsorcli/cli/pkg/context/secrets" "github.com/windsorcli/cli/pkg/context/shell" diff --git a/pkg/pipelines/check.go b/pkg/pipelines/check.go index 46e564072..9e4a00b40 100644 --- a/pkg/pipelines/check.go +++ b/pkg/pipelines/check.go @@ -7,8 +7,8 @@ import ( "github.com/windsorcli/cli/pkg/di" "github.com/windsorcli/cli/pkg/context/tools" - "github.com/windsorcli/cli/pkg/infrastructure/cluster" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" + "github.com/windsorcli/cli/pkg/provisioner/cluster" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" ) // The CheckPipeline is a specialized component that manages tool version checking and node health checking functionality. diff --git a/pkg/pipelines/check_test.go b/pkg/pipelines/check_test.go index 39b22bc74..e8524177a 100644 --- a/pkg/pipelines/check_test.go +++ b/pkg/pipelines/check_test.go @@ -11,8 +11,8 @@ import ( "github.com/windsorcli/cli/pkg/context/config" "github.com/windsorcli/cli/pkg/di" "github.com/windsorcli/cli/pkg/context/tools" - "github.com/windsorcli/cli/pkg/infrastructure/cluster" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" + "github.com/windsorcli/cli/pkg/provisioner/cluster" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" "github.com/windsorcli/cli/pkg/context/shell" ) diff --git a/pkg/pipelines/down.go b/pkg/pipelines/down.go index 5eb845db1..7f172ff08 100644 --- a/pkg/pipelines/down.go +++ b/pkg/pipelines/down.go @@ -8,8 +8,9 @@ import ( "github.com/windsorcli/cli/pkg/di" envvars "github.com/windsorcli/cli/pkg/context/env" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" - terraforminfra "github.com/windsorcli/cli/pkg/infrastructure/terraform" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" + k8sclient "github.com/windsorcli/cli/pkg/provisioner/kubernetes/client" + terraforminfra "github.com/windsorcli/cli/pkg/provisioner/terraform" "github.com/windsorcli/cli/pkg/resources/blueprint" "github.com/windsorcli/cli/pkg/context/shell" "github.com/windsorcli/cli/pkg/workstation/network" @@ -33,7 +34,7 @@ type DownPipeline struct { networkManager network.NetworkManager stack terraforminfra.Stack blueprintHandler blueprint.BlueprintHandler - kubernetesClient kubernetes.KubernetesClient + kubernetesClient k8sclient.KubernetesClient kubernetesManager kubernetes.KubernetesManager envPrinters []envvars.EnvPrinter } diff --git a/pkg/pipelines/down_test.go b/pkg/pipelines/down_test.go index 61a1fa131..63f2fd31e 100644 --- a/pkg/pipelines/down_test.go +++ b/pkg/pipelines/down_test.go @@ -10,8 +10,8 @@ import ( blueprintv1alpha1 "github.com/windsorcli/cli/api/v1alpha1" "github.com/windsorcli/cli/pkg/context/config" envvars "github.com/windsorcli/cli/pkg/context/env" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" - terraforminfra "github.com/windsorcli/cli/pkg/infrastructure/terraform" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" + terraforminfra "github.com/windsorcli/cli/pkg/provisioner/terraform" "github.com/windsorcli/cli/pkg/resources/blueprint" "github.com/windsorcli/cli/pkg/context/shell" "github.com/windsorcli/cli/pkg/workstation/network" diff --git a/pkg/pipelines/init.go b/pkg/pipelines/init.go index ba8e62553..ac1fcc6d8 100644 --- a/pkg/pipelines/init.go +++ b/pkg/pipelines/init.go @@ -15,7 +15,7 @@ import ( "github.com/windsorcli/cli/pkg/context/tools" "github.com/windsorcli/cli/pkg/di" "github.com/windsorcli/cli/pkg/generators" - terraforminfra "github.com/windsorcli/cli/pkg/infrastructure/terraform" + terraforminfra "github.com/windsorcli/cli/pkg/provisioner/terraform" "github.com/windsorcli/cli/pkg/resources/artifact" "github.com/windsorcli/cli/pkg/resources/blueprint" "github.com/windsorcli/cli/pkg/resources/terraform" diff --git a/pkg/pipelines/init_test.go b/pkg/pipelines/init_test.go index 9c015e29d..d982d10e3 100644 --- a/pkg/pipelines/init_test.go +++ b/pkg/pipelines/init_test.go @@ -12,8 +12,8 @@ import ( "github.com/windsorcli/cli/pkg/context/config" "github.com/windsorcli/cli/pkg/di" "github.com/windsorcli/cli/pkg/context/tools" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" - terraforminfra "github.com/windsorcli/cli/pkg/infrastructure/terraform" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" + terraforminfra "github.com/windsorcli/cli/pkg/provisioner/terraform" "github.com/windsorcli/cli/pkg/resources/artifact" "github.com/windsorcli/cli/pkg/resources/blueprint" "github.com/windsorcli/cli/pkg/context/shell" diff --git a/pkg/pipelines/pipeline.go b/pkg/pipelines/pipeline.go index 0149cd37b..2a1734b46 100644 --- a/pkg/pipelines/pipeline.go +++ b/pkg/pipelines/pipeline.go @@ -13,9 +13,10 @@ import ( envpkg "github.com/windsorcli/cli/pkg/context/env" "github.com/windsorcli/cli/pkg/context/tools" "github.com/windsorcli/cli/pkg/generators" - "github.com/windsorcli/cli/pkg/infrastructure/cluster" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" - terraforminfra "github.com/windsorcli/cli/pkg/infrastructure/terraform" + "github.com/windsorcli/cli/pkg/provisioner/cluster" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" + k8sclient "github.com/windsorcli/cli/pkg/provisioner/kubernetes/client" + terraforminfra "github.com/windsorcli/cli/pkg/provisioner/terraform" "github.com/windsorcli/cli/pkg/resources/artifact" "github.com/windsorcli/cli/pkg/resources/blueprint" "github.com/windsorcli/cli/pkg/resources/terraform" @@ -345,14 +346,14 @@ func (p *BasePipeline) withContainerRuntime() virt.ContainerRuntime { } // withKubernetesClient resolves or creates kubernetes client from DI container -func (p *BasePipeline) withKubernetesClient() kubernetes.KubernetesClient { +func (p *BasePipeline) withKubernetesClient() k8sclient.KubernetesClient { if existing := p.injector.Resolve("kubernetesClient"); existing != nil { - if kubernetesClient, ok := existing.(kubernetes.KubernetesClient); ok { + if kubernetesClient, ok := existing.(k8sclient.KubernetesClient); ok { return kubernetesClient } } - kubernetesClient := kubernetes.NewDynamicKubernetesClient() + kubernetesClient := k8sclient.NewDynamicKubernetesClient() p.injector.Register("kubernetesClient", kubernetesClient) return kubernetesClient } diff --git a/pkg/pipelines/pipeline_test.go b/pkg/pipelines/pipeline_test.go index 8540a74d9..0c9e9afe0 100644 --- a/pkg/pipelines/pipeline_test.go +++ b/pkg/pipelines/pipeline_test.go @@ -16,9 +16,10 @@ import ( "github.com/windsorcli/cli/pkg/di" envvars "github.com/windsorcli/cli/pkg/context/env" "github.com/windsorcli/cli/pkg/context/tools" - "github.com/windsorcli/cli/pkg/infrastructure/cluster" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" - terraforminfra "github.com/windsorcli/cli/pkg/infrastructure/terraform" + "github.com/windsorcli/cli/pkg/provisioner/cluster" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" + k8sclient "github.com/windsorcli/cli/pkg/provisioner/kubernetes/client" + terraforminfra "github.com/windsorcli/cli/pkg/provisioner/terraform" "github.com/windsorcli/cli/pkg/resources/artifact" "github.com/windsorcli/cli/pkg/resources/blueprint" "github.com/windsorcli/cli/pkg/context/shell" @@ -1995,7 +1996,7 @@ func TestBasePipeline_withKubernetesClient(t *testing.T) { t.Run("ReusesExistingKubernetesClientWhenRegistered", func(t *testing.T) { // Given a pipeline with existing kubernetes client pipeline, _ := setup(t) - existingClient := kubernetes.NewDynamicKubernetesClient() + existingClient := k8sclient.NewDynamicKubernetesClient() pipeline.injector.Register("kubernetesClient", existingClient) // When getting kubernetes client diff --git a/pkg/pipelines/up.go b/pkg/pipelines/up.go index bd10e9747..78cdc3d0d 100644 --- a/pkg/pipelines/up.go +++ b/pkg/pipelines/up.go @@ -8,7 +8,7 @@ import ( "github.com/windsorcli/cli/pkg/di" envvars "github.com/windsorcli/cli/pkg/context/env" "github.com/windsorcli/cli/pkg/context/tools" - terraforminfra "github.com/windsorcli/cli/pkg/infrastructure/terraform" + terraforminfra "github.com/windsorcli/cli/pkg/provisioner/terraform" "github.com/windsorcli/cli/pkg/context/shell" "github.com/windsorcli/cli/pkg/workstation/network" "github.com/windsorcli/cli/pkg/workstation/virt" diff --git a/pkg/pipelines/up_test.go b/pkg/pipelines/up_test.go index bef85b992..cd2539a3e 100644 --- a/pkg/pipelines/up_test.go +++ b/pkg/pipelines/up_test.go @@ -9,7 +9,7 @@ import ( "github.com/windsorcli/cli/pkg/context/config" envvars "github.com/windsorcli/cli/pkg/context/env" "github.com/windsorcli/cli/pkg/context/tools" - terraforminfra "github.com/windsorcli/cli/pkg/infrastructure/terraform" + terraforminfra "github.com/windsorcli/cli/pkg/provisioner/terraform" "github.com/windsorcli/cli/pkg/context/shell" "github.com/windsorcli/cli/pkg/workstation/network" "github.com/windsorcli/cli/pkg/workstation/virt" diff --git a/pkg/infrastructure/cluster/cluster_client.go b/pkg/provisioner/cluster/cluster_client.go similarity index 100% rename from pkg/infrastructure/cluster/cluster_client.go rename to pkg/provisioner/cluster/cluster_client.go diff --git a/pkg/infrastructure/cluster/cluster_client_test.go b/pkg/provisioner/cluster/cluster_client_test.go similarity index 100% rename from pkg/infrastructure/cluster/cluster_client_test.go rename to pkg/provisioner/cluster/cluster_client_test.go diff --git a/pkg/infrastructure/cluster/mock_cluster_client.go b/pkg/provisioner/cluster/mock_cluster_client.go similarity index 100% rename from pkg/infrastructure/cluster/mock_cluster_client.go rename to pkg/provisioner/cluster/mock_cluster_client.go diff --git a/pkg/infrastructure/cluster/mock_cluster_client_test.go b/pkg/provisioner/cluster/mock_cluster_client_test.go similarity index 100% rename from pkg/infrastructure/cluster/mock_cluster_client_test.go rename to pkg/provisioner/cluster/mock_cluster_client_test.go diff --git a/pkg/infrastructure/cluster/shims.go b/pkg/provisioner/cluster/shims.go similarity index 100% rename from pkg/infrastructure/cluster/shims.go rename to pkg/provisioner/cluster/shims.go diff --git a/pkg/infrastructure/cluster/talos_cluster_client.go b/pkg/provisioner/cluster/talos_cluster_client.go similarity index 100% rename from pkg/infrastructure/cluster/talos_cluster_client.go rename to pkg/provisioner/cluster/talos_cluster_client.go diff --git a/pkg/infrastructure/cluster/talos_cluster_client_test.go b/pkg/provisioner/cluster/talos_cluster_client_test.go similarity index 100% rename from pkg/infrastructure/cluster/talos_cluster_client_test.go rename to pkg/provisioner/cluster/talos_cluster_client_test.go diff --git a/pkg/infrastructure/kubernetes/kubernetes_client.go b/pkg/provisioner/kubernetes/client/client.go similarity index 97% rename from pkg/infrastructure/kubernetes/kubernetes_client.go rename to pkg/provisioner/kubernetes/client/client.go index c112419af..f20ac3703 100644 --- a/pkg/infrastructure/kubernetes/kubernetes_client.go +++ b/pkg/provisioner/kubernetes/client/client.go @@ -1,8 +1,8 @@ -// Package kubernetes provides Kubernetes resource management functionality +// Package client provides Kubernetes client functionality for resource operations. // It implements server-side apply patterns for managing Kubernetes resources -// and provides a clean interface for kustomization and resource management +// and provides a clean interface for Kubernetes resource management. -package kubernetes +package client import ( "context" diff --git a/pkg/infrastructure/kubernetes/mock_kubernetes_client.go b/pkg/provisioner/kubernetes/client/mock_client.go similarity index 96% rename from pkg/infrastructure/kubernetes/mock_kubernetes_client.go rename to pkg/provisioner/kubernetes/client/mock_client.go index db749b8aa..adc63c15c 100644 --- a/pkg/infrastructure/kubernetes/mock_kubernetes_client.go +++ b/pkg/provisioner/kubernetes/client/mock_client.go @@ -1,8 +1,8 @@ -// Package kubernetes provides Kubernetes resource management functionality +// Package client provides Kubernetes client functionality for resource operations. // It implements server-side apply patterns for managing Kubernetes resources -// and provides a clean interface for kustomization and resource management +// and provides a clean interface for Kubernetes resource management. -package kubernetes +package client import ( "context" diff --git a/pkg/infrastructure/kubernetes/mock_kubernetes_client_test.go b/pkg/provisioner/kubernetes/client/mock_client_test.go similarity index 99% rename from pkg/infrastructure/kubernetes/mock_kubernetes_client_test.go rename to pkg/provisioner/kubernetes/client/mock_client_test.go index 0fe4bcda8..e2ceb81e6 100644 --- a/pkg/infrastructure/kubernetes/mock_kubernetes_client_test.go +++ b/pkg/provisioner/kubernetes/client/mock_client_test.go @@ -1,4 +1,4 @@ -package kubernetes +package client import ( "context" diff --git a/pkg/infrastructure/kubernetes/kubernetes_manager.go b/pkg/provisioner/kubernetes/kubernetes_manager.go similarity index 99% rename from pkg/infrastructure/kubernetes/kubernetes_manager.go rename to pkg/provisioner/kubernetes/kubernetes_manager.go index 5d523dba9..daf0c817b 100644 --- a/pkg/infrastructure/kubernetes/kubernetes_manager.go +++ b/pkg/provisioner/kubernetes/kubernetes_manager.go @@ -20,6 +20,7 @@ import ( blueprintv1alpha1 "github.com/windsorcli/cli/api/v1alpha1" "github.com/windsorcli/cli/pkg/constants" "github.com/windsorcli/cli/pkg/di" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes/client" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" @@ -60,7 +61,7 @@ type KubernetesManager interface { type BaseKubernetesManager struct { injector di.Injector shims *Shims - client KubernetesClient + client client.KubernetesClient kustomizationWaitPollInterval time.Duration kustomizationReconcileTimeout time.Duration @@ -84,11 +85,11 @@ func NewKubernetesManager(injector di.Injector) *BaseKubernetesManager { // Initialize sets up the BaseKubernetesManager by resolving dependencies func (k *BaseKubernetesManager) Initialize() error { - client, ok := k.injector.Resolve("kubernetesClient").(KubernetesClient) + kubernetesClient, ok := k.injector.Resolve("kubernetesClient").(client.KubernetesClient) if !ok { return fmt.Errorf("error resolving kubernetesClient") } - k.client = client + k.client = kubernetesClient return nil } diff --git a/pkg/infrastructure/kubernetes/kubernetes_manager_test.go b/pkg/provisioner/kubernetes/kubernetes_manager_test.go similarity index 76% rename from pkg/infrastructure/kubernetes/kubernetes_manager_test.go rename to pkg/provisioner/kubernetes/kubernetes_manager_test.go index f82a38cf7..ba2012b43 100644 --- a/pkg/infrastructure/kubernetes/kubernetes_manager_test.go +++ b/pkg/provisioner/kubernetes/kubernetes_manager_test.go @@ -13,6 +13,7 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" sourcev1 "github.com/fluxcd/source-controller/api/v1" "github.com/windsorcli/cli/pkg/di" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes/client" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" @@ -42,11 +43,11 @@ func setupMocks(t *testing.T, opts ...*SetupOptions) *Mocks { opts[0].Injector = di.NewMockInjector() } - client := NewMockKubernetesClient() - client.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { return obj, nil } - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return &unstructured.Unstructured{}, nil } @@ -55,7 +56,7 @@ func setupMocks(t *testing.T, opts ...*SetupOptions) *Mocks { Shims: setupShims(t), } - mocks.Injector.Register("kubernetesClient", client) + mocks.Injector.Register("kubernetesClient", kubernetesClient) return mocks } @@ -161,14 +162,14 @@ func TestBaseKubernetesManager_ApplyKustomization(t *testing.T) { t.Run("ApplyWithRetryError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("apply error") } - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("not found") } - manager.client = client + manager.client = kubernetesClient kustomization := kustomizev1.Kustomization{ ObjectMeta: metav1.ObjectMeta{ @@ -204,15 +205,15 @@ func TestBaseKubernetesManager_DeleteKustomization(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { return nil } // Mock GetResource to return "not found" immediately to simulate successful deletion - client.GetResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string) (*unstructured.Unstructured, error) { + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("the server could not find the requested resource") } - manager.client = client + manager.client = kubernetesClient err := manager.DeleteKustomization("test-kustomization", "test-namespace") if err != nil { @@ -222,11 +223,11 @@ func TestBaseKubernetesManager_DeleteKustomization(t *testing.T) { t.Run("DeleteError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { return fmt.Errorf("delete error") } - manager.client = client + manager.client = kubernetesClient err := manager.DeleteKustomization("test-kustomization", "test-namespace") if err == nil { @@ -236,11 +237,11 @@ func TestBaseKubernetesManager_DeleteKustomization(t *testing.T) { t.Run("KustomizationNotFound", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { return fmt.Errorf("the server could not find the requested resource") } - manager.client = client + manager.client = kubernetesClient err := manager.DeleteKustomization("test-kustomization", "test-namespace") if err != nil { @@ -250,17 +251,17 @@ func TestBaseKubernetesManager_DeleteKustomization(t *testing.T) { t.Run("UsesCorrectDeleteOptions", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() + kubernetesClient := client.NewMockKubernetesClient() var capturedOptions metav1.DeleteOptions - client.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { + kubernetesClient.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { capturedOptions = opts return nil } // Mock GetResource to return "not found" immediately to simulate successful deletion - client.GetResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string) (*unstructured.Unstructured, error) { + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("the server could not find the requested resource") } - manager.client = client + manager.client = kubernetesClient err := manager.DeleteKustomization("test-kustomization", "test-namespace") if err != nil { @@ -293,8 +294,8 @@ func TestBaseKubernetesManager_WaitForKustomizations(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return &unstructured.Unstructured{ Object: map[string]any{ "status": map[string]any{ @@ -308,7 +309,7 @@ func TestBaseKubernetesManager_WaitForKustomizations(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient err := manager.WaitForKustomizations("Waiting for kustomizations", "test-kustomization") if err != nil { @@ -318,8 +319,8 @@ func TestBaseKubernetesManager_WaitForKustomizations(t *testing.T) { t.Run("Timeout", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return &unstructured.Unstructured{ Object: map[string]any{ "status": map[string]any{ @@ -333,7 +334,7 @@ func TestBaseKubernetesManager_WaitForKustomizations(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient err := manager.WaitForKustomizations("Waiting for kustomizations", "test-kustomization") if err == nil { @@ -343,13 +344,13 @@ func TestBaseKubernetesManager_WaitForKustomizations(t *testing.T) { t.Run("MissingStatus", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return &unstructured.Unstructured{ Object: map[string]any{}, }, nil } - manager.client = client + manager.client = kubernetesClient err := manager.WaitForKustomizations("Waiting for kustomizations", "test-kustomization") if err == nil { @@ -359,8 +360,8 @@ func TestBaseKubernetesManager_WaitForKustomizations(t *testing.T) { t.Run("FromUnstructuredError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return &unstructured.Unstructured{ Object: map[string]any{ "status": map[string]any{ @@ -374,7 +375,7 @@ func TestBaseKubernetesManager_WaitForKustomizations(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient manager.shims.FromUnstructured = func(obj map[string]any, target any) error { return fmt.Errorf("forced conversion error") @@ -388,15 +389,15 @@ func TestBaseKubernetesManager_WaitForKustomizations(t *testing.T) { t.Run("MissingConditions", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return &unstructured.Unstructured{ Object: map[string]any{ "status": map[string]any{}, }, }, nil } - manager.client = client + manager.client = kubernetesClient err := manager.WaitForKustomizations("Waiting for kustomizations", "test-kustomization") if err == nil { @@ -406,8 +407,8 @@ func TestBaseKubernetesManager_WaitForKustomizations(t *testing.T) { t.Run("ConditionTypeNotReady", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return &unstructured.Unstructured{ Object: map[string]any{ "status": map[string]any{ @@ -421,7 +422,7 @@ func TestBaseKubernetesManager_WaitForKustomizations(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient err := manager.WaitForKustomizations("Waiting for kustomizations", "test-kustomization") if err == nil { @@ -431,8 +432,8 @@ func TestBaseKubernetesManager_WaitForKustomizations(t *testing.T) { t.Run("ConditionReadyFalse", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return &unstructured.Unstructured{ Object: map[string]any{ "status": map[string]any{ @@ -446,7 +447,7 @@ func TestBaseKubernetesManager_WaitForKustomizations(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient err := manager.WaitForKustomizations("Waiting for kustomizations", "test-kustomization") if err == nil { @@ -468,14 +469,14 @@ func TestBaseKubernetesManager_CreateNamespace(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { return obj, nil } - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("not found") } - manager.client = client + manager.client = kubernetesClient err := manager.CreateNamespace("test-namespace") if err != nil { @@ -485,14 +486,14 @@ func TestBaseKubernetesManager_CreateNamespace(t *testing.T) { t.Run("ApplyError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("apply error") } - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("not found") } - manager.client = client + manager.client = kubernetesClient err := manager.CreateNamespace("test-namespace") if err == nil { @@ -514,15 +515,15 @@ func TestBaseKubernetesManager_DeleteNamespace(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { return nil } // Mock GetResource to return "not found" immediately to simulate successful deletion - client.GetResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string) (*unstructured.Unstructured, error) { + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("the server could not find the requested resource") } - manager.client = client + manager.client = kubernetesClient err := manager.DeleteNamespace("test-namespace") if err != nil { @@ -532,11 +533,11 @@ func TestBaseKubernetesManager_DeleteNamespace(t *testing.T) { t.Run("DeleteError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { return fmt.Errorf("delete error") } - manager.client = client + manager.client = kubernetesClient err := manager.DeleteNamespace("test-namespace") if err == nil { @@ -546,13 +547,13 @@ func TestBaseKubernetesManager_DeleteNamespace(t *testing.T) { t.Run("UsesCorrectDeleteOptions", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() + kubernetesClient := client.NewMockKubernetesClient() var capturedOptions metav1.DeleteOptions - client.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { + kubernetesClient.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { capturedOptions = opts return nil } - manager.client = client + manager.client = kubernetesClient err := manager.DeleteNamespace("test-namespace") if err != nil { @@ -583,14 +584,14 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { return obj, nil } - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("not found") } - manager.client = client + manager.client = kubernetesClient data := map[string]string{ "key1": "value1", @@ -604,8 +605,8 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { t.Run("ImmutableConfigMap", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return &unstructured.Unstructured{ Object: map[string]any{ "kind": "ConfigMap", @@ -615,13 +616,13 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { }, }, nil } - client.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { + kubernetesClient.DeleteResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, opts metav1.DeleteOptions) error { return nil } - client.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { + kubernetesClient.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { return obj, nil } - manager.client = client + manager.client = kubernetesClient data := map[string]string{ "key1": "value1", @@ -634,14 +635,14 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { t.Run("ApplyError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("not found") } - client.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { + kubernetesClient.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("apply error") } - manager.client = client + manager.client = kubernetesClient data := map[string]string{ "key1": "value1", @@ -681,14 +682,14 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { t.Run("GetResourceError_NotFound", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("not found") } - client.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { + kubernetesClient.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { return obj, nil } - manager.client = client + manager.client = kubernetesClient // Should not error, just apply err := manager.ApplyConfigMap("test-configmap", "test-namespace", map[string]string{"k": "v"}) if err != nil { @@ -698,14 +699,14 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { t.Run("GetResourceError_Other", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("some error") } - client.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { + kubernetesClient.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { return obj, nil } - manager.client = client + manager.client = kubernetesClient // Should not error, just apply err := manager.ApplyConfigMap("test-configmap", "test-namespace", map[string]string{"k": "v"}) if err != nil { @@ -715,8 +716,8 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { t.Run("DeleteResourceError_ImmutableConfigMap", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return &unstructured.Unstructured{ Object: map[string]any{ "kind": "ConfigMap", @@ -724,10 +725,10 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { }, }, nil } - client.DeleteResourceFunc = func(gvr schema.GroupVersionResource, ns, name string, opts metav1.DeleteOptions) error { + kubernetesClient.DeleteResourceFunc = func(gvr schema.GroupVersionResource, ns, name string, opts metav1.DeleteOptions) error { return fmt.Errorf("delete error") } - manager.client = client + manager.client = kubernetesClient err := manager.ApplyConfigMap("test-configmap", "test-namespace", map[string]string{"k": "v"}) if err == nil || !strings.Contains(err.Error(), "failed to delete immutable configmap") { t.Errorf("Expected delete error, got %v", err) @@ -754,8 +755,8 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -778,7 +779,7 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient manager.shims.FromUnstructured = func(obj map[string]any, target any) error { return fmt.Errorf("forced conversion error") } @@ -804,8 +805,8 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -828,7 +829,7 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient status, err := manager.GetKustomizationStatus([]string{"k1"}) if err != nil { @@ -848,8 +849,8 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -874,7 +875,7 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient status, err := manager.GetKustomizationStatus([]string{"k1"}) if err == nil { @@ -897,8 +898,8 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -921,7 +922,7 @@ func TestBaseKubernetesManager_ApplyConfigMap(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient status, err := manager.GetKustomizationStatus([]string{"k1", "k2"}) if err != nil { @@ -1111,9 +1112,9 @@ func TestBaseKubernetesManager_GetHelmReleasesForKustomization(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() + kubernetesClient := client.NewMockKubernetesClient() // Return a Kustomization with a valid HelmRelease inventory entry - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { if gvr.Group == "kustomize.toolkit.fluxcd.io" && gvr.Resource == "kustomizations" { return &unstructured.Unstructured{ Object: map[string]any{ @@ -1145,7 +1146,7 @@ func TestBaseKubernetesManager_GetHelmReleasesForKustomization(t *testing.T) { } return nil, fmt.Errorf("unexpected resource request") } - manager.client = client + manager.client = kubernetesClient releases, err := manager.GetHelmReleasesForKustomization("test-kustomization", "test-namespace") if err != nil { @@ -1158,11 +1159,11 @@ func TestBaseKubernetesManager_GetHelmReleasesForKustomization(t *testing.T) { t.Run("GetResourceError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("get resource error") } - manager.client = client + manager.client = kubernetesClient releases, err := manager.GetHelmReleasesForKustomization("test-kustomization", "test-namespace") if err == nil { @@ -1175,11 +1176,11 @@ func TestBaseKubernetesManager_GetHelmReleasesForKustomization(t *testing.T) { t.Run("KustomizationNotFound", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("the server could not find the requested resource") } - manager.client = client + manager.client = kubernetesClient releases, err := manager.GetHelmReleasesForKustomization("test-kustomization", "test-namespace") if err != nil { @@ -1192,13 +1193,13 @@ func TestBaseKubernetesManager_GetHelmReleasesForKustomization(t *testing.T) { t.Run("FromUnstructuredError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return &unstructured.Unstructured{ Object: map[string]any{}, }, nil } - manager.client = client + manager.client = kubernetesClient manager.shims.FromUnstructured = func(obj map[string]any, target any) error { return fmt.Errorf("forced conversion error") } @@ -1222,15 +1223,15 @@ func TestBaseKubernetesManager_SuspendKustomization(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { expectedPatch := []byte(`{"spec":{"suspend":true}}`) if !bytes.Equal(data, expectedPatch) { t.Errorf("Expected patch %s, got %s", expectedPatch, data) } return &unstructured.Unstructured{}, nil } - manager.client = client + manager.client = kubernetesClient err := manager.SuspendKustomization("test-kustomization", "test-namespace") if err != nil { @@ -1240,11 +1241,11 @@ func TestBaseKubernetesManager_SuspendKustomization(t *testing.T) { t.Run("PatchError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("patch error") } - manager.client = client + manager.client = kubernetesClient err := manager.SuspendKustomization("test-kustomization", "test-namespace") if err == nil { @@ -1257,11 +1258,11 @@ func TestBaseKubernetesManager_SuspendKustomization(t *testing.T) { t.Run("ResourceNotFound", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("resource not found") } - manager.client = client + manager.client = kubernetesClient err := manager.SuspendKustomization("nonexistent-kustomization", "test-namespace") if err == nil { @@ -1274,11 +1275,11 @@ func TestBaseKubernetesManager_SuspendKustomization(t *testing.T) { t.Run("PatchResourceError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("namespace not found") } - manager.client = client + manager.client = kubernetesClient err := manager.SuspendKustomization("test-kustomization", "nonexistent-namespace") if err == nil { @@ -1291,11 +1292,11 @@ func TestBaseKubernetesManager_SuspendKustomization(t *testing.T) { t.Run("ServerCouldNotFindResource", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("the server could not find the requested resource") } - manager.client = client + manager.client = kubernetesClient err := manager.SuspendKustomization("observability", "test-namespace") if err == nil { @@ -1320,15 +1321,15 @@ func TestBaseKubernetesManager_SuspendHelmRelease(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { expectedPatch := []byte(`{"spec":{"suspend":true}}`) if !bytes.Equal(data, expectedPatch) { t.Errorf("Expected patch %s, got %s", expectedPatch, data) } return &unstructured.Unstructured{}, nil } - manager.client = client + manager.client = kubernetesClient err := manager.SuspendHelmRelease("test-release", "test-namespace") if err != nil { @@ -1338,11 +1339,11 @@ func TestBaseKubernetesManager_SuspendHelmRelease(t *testing.T) { t.Run("PatchError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("patch error") } - manager.client = client + manager.client = kubernetesClient err := manager.SuspendHelmRelease("test-release", "test-namespace") if err == nil { @@ -1355,11 +1356,11 @@ func TestBaseKubernetesManager_SuspendHelmRelease(t *testing.T) { t.Run("ResourceNotFound", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("resource not found") } - manager.client = client + manager.client = kubernetesClient err := manager.SuspendHelmRelease("nonexistent-release", "test-namespace") if err == nil { @@ -1372,11 +1373,11 @@ func TestBaseKubernetesManager_SuspendHelmRelease(t *testing.T) { t.Run("PatchResourceError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("namespace not found") } - manager.client = client + manager.client = kubernetesClient err := manager.SuspendHelmRelease("test-release", "nonexistent-namespace") if err == nil { @@ -1389,11 +1390,11 @@ func TestBaseKubernetesManager_SuspendHelmRelease(t *testing.T) { t.Run("ServerCouldNotFindResource", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.PatchResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("the server could not find the requested resource") } - manager.client = client + manager.client = kubernetesClient err := manager.SuspendHelmRelease("observability", "test-namespace") if err == nil { @@ -1418,14 +1419,14 @@ func TestBaseKubernetesManager_ApplyGitRepository(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { return obj, nil } - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("not found") } - manager.client = client + manager.client = kubernetesClient repo := &sourcev1.GitRepository{ ObjectMeta: metav1.ObjectMeta{ @@ -1501,14 +1502,14 @@ func TestBaseKubernetesManager_ApplyGitRepository(t *testing.T) { t.Run("ApplyWithRetryError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("apply error") } - client.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, ns, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("not found") } - manager.client = client + manager.client = kubernetesClient repo := &sourcev1.GitRepository{ ObjectMeta: metav1.ObjectMeta{ @@ -1551,8 +1552,8 @@ func TestBaseKubernetesManager_CheckGitRepositoryStatus(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -1576,7 +1577,7 @@ func TestBaseKubernetesManager_CheckGitRepositoryStatus(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient err := manager.CheckGitRepositoryStatus() if err != nil { @@ -1593,11 +1594,11 @@ func TestBaseKubernetesManager_CheckGitRepositoryStatus(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return nil, fmt.Errorf("list resources error") } - manager.client = client + manager.client = kubernetesClient err := manager.CheckGitRepositoryStatus() if err == nil { @@ -1617,8 +1618,8 @@ func TestBaseKubernetesManager_CheckGitRepositoryStatus(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -1642,7 +1643,7 @@ func TestBaseKubernetesManager_CheckGitRepositoryStatus(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient manager.shims.FromUnstructured = func(obj map[string]any, target any) error { return fmt.Errorf("forced conversion error") } @@ -1665,8 +1666,8 @@ func TestBaseKubernetesManager_CheckGitRepositoryStatus(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -1690,7 +1691,7 @@ func TestBaseKubernetesManager_CheckGitRepositoryStatus(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient err := manager.CheckGitRepositoryStatus() if err == nil { @@ -1712,8 +1713,8 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -1736,7 +1737,7 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient status, err := manager.GetKustomizationStatus([]string{"k1"}) if err != nil { @@ -1756,11 +1757,11 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return nil, fmt.Errorf("list resources error") } - manager.client = client + manager.client = kubernetesClient status, err := manager.GetKustomizationStatus([]string{"k1"}) if err == nil { @@ -1783,8 +1784,8 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -1807,7 +1808,7 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient manager.shims.FromUnstructured = func(obj map[string]any, target any) error { return fmt.Errorf("forced conversion error") } @@ -1833,8 +1834,8 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -1857,7 +1858,7 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient status, err := manager.GetKustomizationStatus([]string{"k1"}) if err != nil { @@ -1877,8 +1878,8 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -1903,7 +1904,7 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient status, err := manager.GetKustomizationStatus([]string{"k1"}) if err == nil { @@ -1926,8 +1927,8 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -1952,7 +1953,7 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient status, err := manager.GetKustomizationStatus([]string{"k1"}) if err == nil { @@ -1975,8 +1976,8 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { } return manager }(t) - client := NewMockKubernetesClient() - client.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.ListResourcesFunc = func(gvr schema.GroupVersionResource, namespace string) (*unstructured.UnstructuredList, error) { return &unstructured.UnstructuredList{ Items: []unstructured.Unstructured{ { @@ -1999,7 +2000,7 @@ func TestBaseKubernetesManager_GetKustomizationStatus(t *testing.T) { }, }, nil } - manager.client = client + manager.client = kubernetesClient status, err := manager.GetKustomizationStatus([]string{"k1", "k2"}) if err != nil { @@ -2027,11 +2028,11 @@ func TestBaseKubernetesManager_WaitForKubernetesHealthy(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.CheckHealthFunc = func(ctx context.Context, endpoint string) error { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.CheckHealthFunc = func(ctx context.Context, endpoint string) error { return nil } - manager.client = client + manager.client = kubernetesClient ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() @@ -2060,11 +2061,11 @@ func TestBaseKubernetesManager_WaitForKubernetesHealthy(t *testing.T) { t.Run("ContextCancelled", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.CheckHealthFunc = func(ctx context.Context, endpoint string) error { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.CheckHealthFunc = func(ctx context.Context, endpoint string) error { return fmt.Errorf("health check failed") } - manager.client = client + manager.client = kubernetesClient ctx, cancel := context.WithCancel(context.Background()) cancel() // Cancel immediately @@ -2092,14 +2093,14 @@ func TestBaseKubernetesManager_ApplyOCIRepository(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("not found") } - client.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { + kubernetesClient.ApplyResourceFunc = func(gvr schema.GroupVersionResource, obj *unstructured.Unstructured, opts metav1.ApplyOptions) (*unstructured.Unstructured, error) { return obj, nil } - manager.client = client + manager.client = kubernetesClient manager.shims.ToUnstructured = func(obj any) (map[string]any, error) { return map[string]any{ "apiVersion": "source.toolkit.fluxcd.io/v1", @@ -2252,15 +2253,15 @@ func TestBaseKubernetesManager_GetNodeReadyStatus(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() + kubernetesClient := client.NewMockKubernetesClient() expectedStatus := map[string]bool{ "node1": true, "node2": false, } - client.GetNodeReadyStatusFunc = func(ctx context.Context, nodeNames []string) (map[string]bool, error) { + kubernetesClient.GetNodeReadyStatusFunc = func(ctx context.Context, nodeNames []string) (map[string]bool, error) { return expectedStatus, nil } - manager.client = client + manager.client = kubernetesClient ctx := context.Background() status, err := manager.GetNodeReadyStatus(ctx, []string{"node1", "node2"}) @@ -2288,11 +2289,11 @@ func TestBaseKubernetesManager_GetNodeReadyStatus(t *testing.T) { t.Run("ClientError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetNodeReadyStatusFunc = func(ctx context.Context, nodeNames []string) (map[string]bool, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetNodeReadyStatusFunc = func(ctx context.Context, nodeNames []string) (map[string]bool, error) { return nil, fmt.Errorf("client error") } - manager.client = client + manager.client = kubernetesClient ctx := context.Background() _, err := manager.GetNodeReadyStatus(ctx, []string{"node1"}) @@ -2318,14 +2319,14 @@ func TestBaseKubernetesManager_waitForNodesReady(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetNodeReadyStatusFunc = func(ctx context.Context, nodeNames []string) (map[string]bool, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetNodeReadyStatusFunc = func(ctx context.Context, nodeNames []string) (map[string]bool, error) { return map[string]bool{ "node1": true, "node2": true, }, nil } - manager.client = client + manager.client = kubernetesClient ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() @@ -2346,14 +2347,14 @@ func TestBaseKubernetesManager_waitForNodesReady(t *testing.T) { t.Run("ContextCancelled", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetNodeReadyStatusFunc = func(ctx context.Context, nodeNames []string) (map[string]bool, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetNodeReadyStatusFunc = func(ctx context.Context, nodeNames []string) (map[string]bool, error) { return map[string]bool{ "node1": false, "node2": false, }, nil } - manager.client = client + manager.client = kubernetesClient ctx, cancel := context.WithCancel(context.Background()) cancel() // Cancel immediately @@ -2369,13 +2370,13 @@ func TestBaseKubernetesManager_waitForNodesReady(t *testing.T) { t.Run("MissingNodes", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetNodeReadyStatusFunc = func(ctx context.Context, nodeNames []string) (map[string]bool, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetNodeReadyStatusFunc = func(ctx context.Context, nodeNames []string) (map[string]bool, error) { return map[string]bool{ "node1": true, }, nil } - manager.client = client + manager.client = kubernetesClient ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond) defer cancel() @@ -2404,7 +2405,7 @@ func TestBaseKubernetesManager_getHelmRelease(t *testing.T) { t.Run("Success", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() + kubernetesClient := client.NewMockKubernetesClient() expectedObj := &unstructured.Unstructured{ Object: map[string]any{ "apiVersion": "helm.toolkit.fluxcd.io/v2", @@ -2422,10 +2423,10 @@ func TestBaseKubernetesManager_getHelmRelease(t *testing.T) { }, }, } - client.GetResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string) (*unstructured.Unstructured, error) { + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string) (*unstructured.Unstructured, error) { return expectedObj, nil } - manager.client = client + manager.client = kubernetesClient release, err := manager.getHelmRelease("test-release", "test-namespace") if err != nil { @@ -2441,11 +2442,11 @@ func TestBaseKubernetesManager_getHelmRelease(t *testing.T) { t.Run("GetResourceError", func(t *testing.T) { manager := setup(t) - client := NewMockKubernetesClient() - client.GetResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string) (*unstructured.Unstructured, error) { + kubernetesClient := client.NewMockKubernetesClient() + kubernetesClient.GetResourceFunc = func(gvr schema.GroupVersionResource, namespace, name string) (*unstructured.Unstructured, error) { return nil, fmt.Errorf("get resource error") } - manager.client = client + manager.client = kubernetesClient _, err := manager.getHelmRelease("test-release", "test-namespace") if err == nil { diff --git a/pkg/infrastructure/kubernetes/mock_kubernetes_manager.go b/pkg/provisioner/kubernetes/mock_kubernetes_manager.go similarity index 100% rename from pkg/infrastructure/kubernetes/mock_kubernetes_manager.go rename to pkg/provisioner/kubernetes/mock_kubernetes_manager.go diff --git a/pkg/infrastructure/kubernetes/mock_kubernetes_manager_test.go b/pkg/provisioner/kubernetes/mock_kubernetes_manager_test.go similarity index 100% rename from pkg/infrastructure/kubernetes/mock_kubernetes_manager_test.go rename to pkg/provisioner/kubernetes/mock_kubernetes_manager_test.go diff --git a/pkg/infrastructure/kubernetes/shims.go b/pkg/provisioner/kubernetes/shims.go similarity index 100% rename from pkg/infrastructure/kubernetes/shims.go rename to pkg/provisioner/kubernetes/shims.go diff --git a/pkg/infrastructure/infrastructure.go b/pkg/provisioner/provisioner.go similarity index 76% rename from pkg/infrastructure/infrastructure.go rename to pkg/provisioner/provisioner.go index 4eec6591f..40acbf08c 100644 --- a/pkg/infrastructure/infrastructure.go +++ b/pkg/provisioner/provisioner.go @@ -1,4 +1,4 @@ -package infrastructure +package provisioner import ( "fmt" @@ -6,12 +6,13 @@ import ( blueprintv1alpha1 "github.com/windsorcli/cli/api/v1alpha1" "github.com/windsorcli/cli/pkg/constants" "github.com/windsorcli/cli/pkg/context" - "github.com/windsorcli/cli/pkg/infrastructure/cluster" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" - terraforminfra "github.com/windsorcli/cli/pkg/infrastructure/terraform" + "github.com/windsorcli/cli/pkg/provisioner/cluster" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" + k8sclient "github.com/windsorcli/cli/pkg/provisioner/kubernetes/client" + terraforminfra "github.com/windsorcli/cli/pkg/provisioner/terraform" ) -// The Infrastructure package provides high-level infrastructure management functionality +// The Provisioner package provides high-level infrastructure provisioning functionality // for terraform operations, kubernetes cluster interactions, and cluster API operations. // It consolidates the creation and management of terraform stacks, kubernetes managers, // and cluster clients, providing a unified interface for infrastructure lifecycle operations @@ -21,37 +22,37 @@ import ( // Types // ============================================================================= -// InfrastructureExecutionContext holds the execution context for infrastructure operations. -// It embeds the base ExecutionContext and includes all infrastructure-specific dependencies. -type InfrastructureExecutionContext struct { +// ProvisionerExecutionContext holds the execution context for provisioner operations. +// It embeds the base ExecutionContext and includes all provisioner-specific dependencies. +type ProvisionerExecutionContext struct { context.ExecutionContext TerraformStack terraforminfra.Stack KubernetesManager kubernetes.KubernetesManager - KubernetesClient kubernetes.KubernetesClient + KubernetesClient k8sclient.KubernetesClient ClusterClient cluster.ClusterClient } -// Infrastructure manages the lifecycle of all infrastructure components (terraform, kubernetes, clusters). +// Provisioner manages the lifecycle of all infrastructure components (terraform, kubernetes, clusters). // It provides a unified interface for creating, initializing, and managing these infrastructure components // with proper dependency injection and error handling. -type Infrastructure struct { - *InfrastructureExecutionContext +type Provisioner struct { + *ProvisionerExecutionContext } // ============================================================================= // Constructor // ============================================================================= -// NewInfrastructure creates a new Infrastructure instance with the provided execution context. -// It sets up all required infrastructure handlers—terraform stack, kubernetes manager, kubernetes client, +// NewProvisioner creates a new Provisioner instance with the provided execution context. +// It sets up all required provisioner handlers—terraform stack, kubernetes manager, kubernetes client, // and cluster client—and registers each handler with the dependency injector for use throughout the -// infrastructure lifecycle. The cluster client is created based on the cluster driver configuration (talos/omni). +// provisioner lifecycle. The cluster client is created based on the cluster driver configuration (talos/omni). // Components are initialized lazily when needed by the Up() and Down() methods. -// Returns a pointer to the Infrastructure struct. -func NewInfrastructure(ctx *InfrastructureExecutionContext) *Infrastructure { - infra := &Infrastructure{ - InfrastructureExecutionContext: ctx, +// Returns a pointer to the Provisioner struct. +func NewProvisioner(ctx *ProvisionerExecutionContext) *Provisioner { + infra := &Provisioner{ + ProvisionerExecutionContext: ctx, } if infra.TerraformStack == nil { @@ -60,7 +61,7 @@ func NewInfrastructure(ctx *InfrastructureExecutionContext) *Infrastructure { } if infra.KubernetesClient == nil { - infra.KubernetesClient = kubernetes.NewDynamicKubernetesClient() + infra.KubernetesClient = k8sclient.NewDynamicKubernetesClient() infra.Injector.Register("kubernetesClient", infra.KubernetesClient) } @@ -88,7 +89,7 @@ func NewInfrastructure(ctx *InfrastructureExecutionContext) *Infrastructure { // for all components in the stack. This method coordinates terraform, kubernetes, and cluster operations // to bring up the complete infrastructure. Initializes components as needed. The blueprint parameter is required. // Returns an error if any step fails. -func (i *Infrastructure) Up(blueprint *blueprintv1alpha1.Blueprint) error { +func (i *Provisioner) Up(blueprint *blueprintv1alpha1.Blueprint) error { if blueprint == nil { return fmt.Errorf("blueprint not provided") } @@ -109,7 +110,7 @@ func (i *Infrastructure) Up(blueprint *blueprintv1alpha1.Blueprint) error { // for all components in the stack in reverse dependency order. Components with Destroy set to false are skipped. // This method coordinates terraform, kubernetes, and cluster operations to tear down the infrastructure. // Initializes components as needed. The blueprint parameter is required. Returns an error if any destroy operation fails. -func (i *Infrastructure) Down(blueprint *blueprintv1alpha1.Blueprint) error { +func (i *Provisioner) Down(blueprint *blueprintv1alpha1.Blueprint) error { if blueprint == nil { return fmt.Errorf("blueprint not provided") } @@ -130,7 +131,7 @@ func (i *Infrastructure) Down(blueprint *blueprintv1alpha1.Blueprint) error { // It initializes the kubernetes manager and applies all blueprint resources in order: creates namespace, // applies source repositories, and applies all kustomizations. The blueprint must be provided as a parameter. // Returns an error if any step fails. -func (i *Infrastructure) Install(blueprint *blueprintv1alpha1.Blueprint) error { +func (i *Provisioner) Install(blueprint *blueprintv1alpha1.Blueprint) error { if blueprint == nil { return fmt.Errorf("blueprint not provided") } @@ -152,7 +153,7 @@ func (i *Infrastructure) Install(blueprint *blueprintv1alpha1.Blueprint) error { // Wait waits for kustomizations from the blueprint to be ready. It initializes the kubernetes manager // if needed and polls the status of all kustomizations until they are ready or a timeout occurs. // Returns an error if the kubernetes manager is not configured, initialization fails, or waiting times out. -func (i *Infrastructure) Wait(blueprint *blueprintv1alpha1.Blueprint) error { +func (i *Provisioner) Wait(blueprint *blueprintv1alpha1.Blueprint) error { if blueprint == nil { return fmt.Errorf("blueprint not provided") } @@ -176,10 +177,10 @@ func (i *Infrastructure) Wait(blueprint *blueprintv1alpha1.Blueprint) error { return nil } -// Close releases resources held by infrastructure components. +// Close releases resources held by provisioner components. // It closes cluster client connections if present. This method should be called when the -// infrastructure instance is no longer needed to clean up resources. -func (i *Infrastructure) Close() { +// provisioner instance is no longer needed to clean up resources. +func (i *Provisioner) Close() { if i.ClusterClient != nil { i.ClusterClient.Close() } diff --git a/pkg/infrastructure/infrastructure_test.go b/pkg/provisioner/provisioner_test.go similarity index 66% rename from pkg/infrastructure/infrastructure_test.go rename to pkg/provisioner/provisioner_test.go index 2960a644d..81c7a9aa3 100644 --- a/pkg/infrastructure/infrastructure_test.go +++ b/pkg/provisioner/provisioner_test.go @@ -1,4 +1,4 @@ -package infrastructure +package provisioner import ( "fmt" @@ -9,9 +9,10 @@ import ( "github.com/windsorcli/cli/pkg/context/config" "github.com/windsorcli/cli/pkg/context" "github.com/windsorcli/cli/pkg/di" - "github.com/windsorcli/cli/pkg/infrastructure/cluster" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" - terraforminfra "github.com/windsorcli/cli/pkg/infrastructure/terraform" + "github.com/windsorcli/cli/pkg/provisioner/cluster" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" + k8sclient "github.com/windsorcli/cli/pkg/provisioner/kubernetes/client" + terraforminfra "github.com/windsorcli/cli/pkg/provisioner/terraform" "github.com/windsorcli/cli/pkg/context/shell" ) @@ -50,18 +51,18 @@ func createTestBlueprint() *blueprintv1alpha1.Blueprint { } type Mocks struct { - Injector di.Injector - ConfigHandler config.ConfigHandler - Shell *shell.MockShell - TerraformStack *terraforminfra.MockStack - KubernetesManager *kubernetes.MockKubernetesManager - KubernetesClient kubernetes.KubernetesClient - ClusterClient *cluster.MockClusterClient - InfrastructureExecutionContext *InfrastructureExecutionContext + Injector di.Injector + ConfigHandler config.ConfigHandler + Shell *shell.MockShell + TerraformStack *terraforminfra.MockStack + KubernetesManager *kubernetes.MockKubernetesManager + KubernetesClient k8sclient.KubernetesClient + ClusterClient *cluster.MockClusterClient + ProvisionerExecutionContext *ProvisionerExecutionContext } -// setupInfrastructureMocks creates mock components for testing the Infrastructure -func setupInfrastructureMocks(t *testing.T) *Mocks { +// setupProvisionerMocks creates mock components for testing the Provisioner +func setupProvisionerMocks(t *testing.T) *Mocks { t.Helper() injector := di.NewInjector() @@ -86,7 +87,7 @@ func setupInfrastructureMocks(t *testing.T) *Mocks { terraformStack := terraforminfra.NewMockStack(injector) kubernetesManager := kubernetes.NewMockKubernetesManager(injector) - kubernetesClient := kubernetes.NewMockKubernetesClient() + kubernetesClient := k8sclient.NewMockKubernetesClient() clusterClient := cluster.NewMockClusterClient() execCtx := &context.ExecutionContext{ @@ -99,7 +100,7 @@ func setupInfrastructureMocks(t *testing.T) *Mocks { Shell: mockShell, } - infraCtx := &InfrastructureExecutionContext{ + provisionerCtx := &ProvisionerExecutionContext{ ExecutionContext: *execCtx, TerraformStack: terraformStack, KubernetesManager: kubernetesManager, @@ -115,14 +116,14 @@ func setupInfrastructureMocks(t *testing.T) *Mocks { injector.Register("clusterClient", clusterClient) return &Mocks{ - Injector: injector, - ConfigHandler: configHandler, - Shell: mockShell, - TerraformStack: terraformStack, - KubernetesManager: kubernetesManager, - KubernetesClient: kubernetesClient, - ClusterClient: clusterClient, - InfrastructureExecutionContext: infraCtx, + Injector: injector, + ConfigHandler: configHandler, + Shell: mockShell, + TerraformStack: terraformStack, + KubernetesManager: kubernetesManager, + KubernetesClient: kubernetesClient, + ClusterClient: clusterClient, + ProvisionerExecutionContext: provisionerCtx, } } @@ -130,44 +131,44 @@ func setupInfrastructureMocks(t *testing.T) *Mocks { // Test Constructor // ============================================================================= -func TestNewInfrastructure(t *testing.T) { - t.Run("CreatesInfrastructureWithDependencies", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) +func TestNewProvisioner(t *testing.T) { + t.Run("CreatesProvisionerWithDependencies", func(t *testing.T) { + mocks := setupProvisionerMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) - if infra == nil { - t.Fatal("Expected Infrastructure to be created") + if provisioner == nil { + t.Fatal("Expected Provisioner to be created") } - if infra.Injector != mocks.Injector { + if provisioner.Injector != mocks.Injector { t.Error("Expected injector to be set") } - if infra.Shell != mocks.Shell { + if provisioner.Shell != mocks.Shell { t.Error("Expected shell to be set") } - if infra.ConfigHandler != mocks.ConfigHandler { + if provisioner.ConfigHandler != mocks.ConfigHandler { t.Error("Expected config handler to be set") } - if infra.TerraformStack == nil { + if provisioner.TerraformStack == nil { t.Error("Expected terraform stack to be initialized") } - if infra.KubernetesManager == nil { + if provisioner.KubernetesManager == nil { t.Error("Expected kubernetes manager to be initialized") } - if infra.KubernetesClient == nil { + if provisioner.KubernetesClient == nil { t.Error("Expected kubernetes client to be initialized") } }) t.Run("CreatesClusterClientForTalos", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - mocks.InfrastructureExecutionContext.ClusterClient = nil + mocks := setupProvisionerMocks(t) + mocks.ProvisionerExecutionContext.ClusterClient = nil mockConfigHandler := mocks.ConfigHandler.(*config.MockConfigHandler) mockConfigHandler.GetStringFunc = func(key string, defaultValue ...string) string { @@ -177,16 +178,16 @@ func TestNewInfrastructure(t *testing.T) { return "" } - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) - if infra.ClusterClient == nil { + if provisioner.ClusterClient == nil { t.Error("Expected cluster client to be created for talos driver") } }) t.Run("CreatesClusterClientForOmni", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - mocks.InfrastructureExecutionContext.ClusterClient = nil + mocks := setupProvisionerMocks(t) + mocks.ProvisionerExecutionContext.ClusterClient = nil mockConfigHandler := mocks.ConfigHandler.(*config.MockConfigHandler) mockConfigHandler.GetStringFunc = func(key string, defaultValue ...string) string { @@ -196,16 +197,16 @@ func TestNewInfrastructure(t *testing.T) { return "" } - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) - if infra.ClusterClient == nil { + if provisioner.ClusterClient == nil { t.Error("Expected cluster client to be created for omni driver") } }) t.Run("SkipsClusterClientForOtherDrivers", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - mocks.InfrastructureExecutionContext.ClusterClient = nil + mocks := setupProvisionerMocks(t) + mocks.ProvisionerExecutionContext.ClusterClient = nil mockConfigHandler := mocks.ConfigHandler.(*config.MockConfigHandler) mockConfigHandler.GetStringFunc = func(key string, defaultValue ...string) string { @@ -215,31 +216,31 @@ func TestNewInfrastructure(t *testing.T) { return "" } - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) - if infra.ClusterClient != nil { + if provisioner.ClusterClient != nil { t.Error("Expected cluster client to be nil for non-talos/omni driver") } }) t.Run("UsesExistingDependencies", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) + mocks := setupProvisionerMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) - if infra.TerraformStack != mocks.TerraformStack { + if provisioner.TerraformStack != mocks.TerraformStack { t.Error("Expected existing terraform stack to be used") } - if infra.KubernetesManager != mocks.KubernetesManager { + if provisioner.KubernetesManager != mocks.KubernetesManager { t.Error("Expected existing kubernetes manager to be used") } - if infra.KubernetesClient != mocks.KubernetesClient { + if provisioner.KubernetesClient != mocks.KubernetesClient { t.Error("Expected existing kubernetes client to be used") } - if infra.ClusterClient != mocks.ClusterClient { + if provisioner.ClusterClient != mocks.ClusterClient { t.Error("Expected existing cluster client to be used") } }) @@ -249,10 +250,10 @@ func TestNewInfrastructure(t *testing.T) { // Test Public Methods // ============================================================================= -func TestInfrastructure_Up(t *testing.T) { +func TestProvisioner_Up(t *testing.T) { t.Run("Success", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) mocks.TerraformStack.InitializeFunc = func() error { return nil @@ -262,7 +263,7 @@ func TestInfrastructure_Up(t *testing.T) { } blueprint := createTestBlueprint() - err := infra.Up(blueprint) + err := provisioner.Up(blueprint) if err != nil { t.Errorf("Expected no error, got: %v", err) @@ -270,10 +271,10 @@ func TestInfrastructure_Up(t *testing.T) { }) t.Run("ErrorNilBlueprint", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) - err := infra.Up(nil) + err := provisioner.Up(nil) if err == nil { t.Error("Expected error for nil blueprint") @@ -285,12 +286,12 @@ func TestInfrastructure_Up(t *testing.T) { }) t.Run("ErrorNilTerraformStack", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) - infra.TerraformStack = nil + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) + provisioner.TerraformStack = nil blueprint := createTestBlueprint() - err := infra.Up(blueprint) + err := provisioner.Up(blueprint) if err == nil { t.Error("Expected error for nil terraform stack") @@ -302,15 +303,15 @@ func TestInfrastructure_Up(t *testing.T) { }) t.Run("ErrorTerraformStackInitialize", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) mocks.TerraformStack.InitializeFunc = func() error { return fmt.Errorf("initialize failed") } blueprint := createTestBlueprint() - err := infra.Up(blueprint) + err := provisioner.Up(blueprint) if err == nil { t.Error("Expected error for terraform stack initialize failure") @@ -322,8 +323,8 @@ func TestInfrastructure_Up(t *testing.T) { }) t.Run("ErrorTerraformStackUp", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) mocks.TerraformStack.InitializeFunc = func() error { return nil @@ -333,7 +334,7 @@ func TestInfrastructure_Up(t *testing.T) { } blueprint := createTestBlueprint() - err := infra.Up(blueprint) + err := provisioner.Up(blueprint) if err == nil { t.Error("Expected error for terraform stack up failure") @@ -345,10 +346,10 @@ func TestInfrastructure_Up(t *testing.T) { }) } -func TestInfrastructure_Down(t *testing.T) { +func TestProvisioner_Down(t *testing.T) { t.Run("Success", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) mocks.TerraformStack.InitializeFunc = func() error { return nil @@ -358,7 +359,7 @@ func TestInfrastructure_Down(t *testing.T) { } blueprint := createTestBlueprint() - err := infra.Down(blueprint) + err := provisioner.Down(blueprint) if err != nil { t.Errorf("Expected no error, got: %v", err) @@ -366,10 +367,10 @@ func TestInfrastructure_Down(t *testing.T) { }) t.Run("ErrorNilBlueprint", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) - err := infra.Down(nil) + err := provisioner.Down(nil) if err == nil { t.Error("Expected error for nil blueprint") @@ -381,12 +382,12 @@ func TestInfrastructure_Down(t *testing.T) { }) t.Run("ErrorNilTerraformStack", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) - infra.TerraformStack = nil + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) + provisioner.TerraformStack = nil blueprint := createTestBlueprint() - err := infra.Down(blueprint) + err := provisioner.Down(blueprint) if err == nil { t.Error("Expected error for nil terraform stack") @@ -398,15 +399,15 @@ func TestInfrastructure_Down(t *testing.T) { }) t.Run("ErrorTerraformStackInitialize", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) mocks.TerraformStack.InitializeFunc = func() error { return fmt.Errorf("initialize failed") } blueprint := createTestBlueprint() - err := infra.Down(blueprint) + err := provisioner.Down(blueprint) if err == nil { t.Error("Expected error for terraform stack initialize failure") @@ -418,8 +419,8 @@ func TestInfrastructure_Down(t *testing.T) { }) t.Run("ErrorTerraformStackDown", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) mocks.TerraformStack.InitializeFunc = func() error { return nil @@ -429,7 +430,7 @@ func TestInfrastructure_Down(t *testing.T) { } blueprint := createTestBlueprint() - err := infra.Down(blueprint) + err := provisioner.Down(blueprint) if err == nil { t.Error("Expected error for terraform stack down failure") @@ -441,10 +442,10 @@ func TestInfrastructure_Down(t *testing.T) { }) } -func TestInfrastructure_Install(t *testing.T) { +func TestProvisioner_Install(t *testing.T) { t.Run("Success", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) mocks.KubernetesManager.InitializeFunc = func() error { return nil @@ -454,7 +455,7 @@ func TestInfrastructure_Install(t *testing.T) { } blueprint := createTestBlueprint() - err := infra.Install(blueprint) + err := provisioner.Install(blueprint) if err != nil { t.Errorf("Expected no error, got: %v", err) @@ -462,10 +463,10 @@ func TestInfrastructure_Install(t *testing.T) { }) t.Run("ErrorNilBlueprint", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) - err := infra.Install(nil) + err := provisioner.Install(nil) if err == nil { t.Error("Expected error for nil blueprint") @@ -477,12 +478,12 @@ func TestInfrastructure_Install(t *testing.T) { }) t.Run("ErrorNilKubernetesManager", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) - infra.KubernetesManager = nil + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) + provisioner.KubernetesManager = nil blueprint := createTestBlueprint() - err := infra.Install(blueprint) + err := provisioner.Install(blueprint) if err == nil { t.Error("Expected error for nil kubernetes manager") @@ -494,15 +495,15 @@ func TestInfrastructure_Install(t *testing.T) { }) t.Run("ErrorKubernetesManagerInitialize", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) mocks.KubernetesManager.InitializeFunc = func() error { return fmt.Errorf("initialize failed") } blueprint := createTestBlueprint() - err := infra.Install(blueprint) + err := provisioner.Install(blueprint) if err == nil { t.Error("Expected error for kubernetes manager initialize failure") @@ -514,8 +515,8 @@ func TestInfrastructure_Install(t *testing.T) { }) t.Run("ErrorApplyBlueprint", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) mocks.KubernetesManager.InitializeFunc = func() error { return nil @@ -525,7 +526,7 @@ func TestInfrastructure_Install(t *testing.T) { } blueprint := createTestBlueprint() - err := infra.Install(blueprint) + err := provisioner.Install(blueprint) if err == nil { t.Error("Expected error for apply blueprint failure") @@ -537,10 +538,10 @@ func TestInfrastructure_Install(t *testing.T) { }) } -func TestInfrastructure_Wait(t *testing.T) { +func TestProvisioner_Wait(t *testing.T) { t.Run("Success", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) mocks.KubernetesManager.InitializeFunc = func() error { return nil @@ -550,7 +551,7 @@ func TestInfrastructure_Wait(t *testing.T) { } blueprint := createTestBlueprint() - err := infra.Wait(blueprint) + err := provisioner.Wait(blueprint) if err != nil { t.Errorf("Expected no error, got: %v", err) @@ -558,10 +559,10 @@ func TestInfrastructure_Wait(t *testing.T) { }) t.Run("ErrorNilBlueprint", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) - err := infra.Wait(nil) + err := provisioner.Wait(nil) if err == nil { t.Error("Expected error for nil blueprint") @@ -573,12 +574,12 @@ func TestInfrastructure_Wait(t *testing.T) { }) t.Run("ErrorNilKubernetesManager", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) - infra.KubernetesManager = nil + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) + provisioner.KubernetesManager = nil blueprint := createTestBlueprint() - err := infra.Wait(blueprint) + err := provisioner.Wait(blueprint) if err == nil { t.Error("Expected error for nil kubernetes manager") @@ -590,15 +591,15 @@ func TestInfrastructure_Wait(t *testing.T) { }) t.Run("ErrorKubernetesManagerInitialize", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) mocks.KubernetesManager.InitializeFunc = func() error { return fmt.Errorf("initialize failed") } blueprint := createTestBlueprint() - err := infra.Wait(blueprint) + err := provisioner.Wait(blueprint) if err == nil { t.Error("Expected error for kubernetes manager initialize failure") @@ -610,8 +611,8 @@ func TestInfrastructure_Wait(t *testing.T) { }) t.Run("ErrorWaitForKustomizations", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) mocks.KubernetesManager.InitializeFunc = func() error { return nil @@ -621,7 +622,7 @@ func TestInfrastructure_Wait(t *testing.T) { } blueprint := createTestBlueprint() - err := infra.Wait(blueprint) + err := provisioner.Wait(blueprint) if err == nil { t.Error("Expected error for wait for kustomizations failure") @@ -633,17 +634,17 @@ func TestInfrastructure_Wait(t *testing.T) { }) } -func TestInfrastructure_Close(t *testing.T) { +func TestProvisioner_Close(t *testing.T) { t.Run("Success", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) closeCalled := false mocks.ClusterClient.CloseFunc = func() { closeCalled = true } - infra.Close() + provisioner.Close() if !closeCalled { t.Error("Expected ClusterClient.Close to be called") @@ -651,24 +652,24 @@ func TestInfrastructure_Close(t *testing.T) { }) t.Run("HandlesNilClusterClient", func(t *testing.T) { - mocks := setupInfrastructureMocks(t) - infra := NewInfrastructure(mocks.InfrastructureExecutionContext) - infra.ClusterClient = nil + mocks := setupProvisionerMocks(t) + provisioner := NewProvisioner(mocks.ProvisionerExecutionContext) + provisioner.ClusterClient = nil - infra.Close() + provisioner.Close() - if infra.ClusterClient != nil { + if provisioner.ClusterClient != nil { t.Error("Expected nil cluster client to remain nil after Close") } }) } // ============================================================================= -// Test InfrastructureExecutionContext +// Test ProvisionerExecutionContext // ============================================================================= -func TestInfrastructureExecutionContext(t *testing.T) { - t.Run("CreatesInfrastructureExecutionContext", func(t *testing.T) { +func TestProvisionerExecutionContext(t *testing.T) { + t.Run("CreatesProvisionerExecutionContext", func(t *testing.T) { execCtx := &context.ExecutionContext{ ContextName: "test-context", ProjectRoot: "/test/project", @@ -676,24 +677,24 @@ func TestInfrastructureExecutionContext(t *testing.T) { TemplateRoot: "/test/project/contexts/_template", } - infraCtx := &InfrastructureExecutionContext{ + provisionerCtx := &ProvisionerExecutionContext{ ExecutionContext: *execCtx, } - if infraCtx.ContextName != "test-context" { - t.Errorf("Expected context name 'test-context', got: %s", infraCtx.ContextName) + if provisionerCtx.ContextName != "test-context" { + t.Errorf("Expected context name 'test-context', got: %s", provisionerCtx.ContextName) } - if infraCtx.ProjectRoot != "/test/project" { - t.Errorf("Expected project root '/test/project', got: %s", infraCtx.ProjectRoot) + if provisionerCtx.ProjectRoot != "/test/project" { + t.Errorf("Expected project root '/test/project', got: %s", provisionerCtx.ProjectRoot) } - if infraCtx.ConfigRoot != "/test/project/contexts/test-context" { - t.Errorf("Expected config root '/test/project/contexts/test-context', got: %s", infraCtx.ConfigRoot) + if provisionerCtx.ConfigRoot != "/test/project/contexts/test-context" { + t.Errorf("Expected config root '/test/project/contexts/test-context', got: %s", provisionerCtx.ConfigRoot) } - if infraCtx.TemplateRoot != "/test/project/contexts/_template" { - t.Errorf("Expected template root '/test/project/contexts/_template', got: %s", infraCtx.TemplateRoot) + if provisionerCtx.TemplateRoot != "/test/project/contexts/_template" { + t.Errorf("Expected template root '/test/project/contexts/_template', got: %s", provisionerCtx.TemplateRoot) } }) } diff --git a/pkg/infrastructure/terraform/mock_stack.go b/pkg/provisioner/terraform/mock_stack.go similarity index 100% rename from pkg/infrastructure/terraform/mock_stack.go rename to pkg/provisioner/terraform/mock_stack.go diff --git a/pkg/infrastructure/terraform/mock_stack_test.go b/pkg/provisioner/terraform/mock_stack_test.go similarity index 100% rename from pkg/infrastructure/terraform/mock_stack_test.go rename to pkg/provisioner/terraform/mock_stack_test.go diff --git a/pkg/infrastructure/terraform/shims.go b/pkg/provisioner/terraform/shims.go similarity index 100% rename from pkg/infrastructure/terraform/shims.go rename to pkg/provisioner/terraform/shims.go diff --git a/pkg/infrastructure/terraform/stack.go b/pkg/provisioner/terraform/stack.go similarity index 100% rename from pkg/infrastructure/terraform/stack.go rename to pkg/provisioner/terraform/stack.go diff --git a/pkg/infrastructure/terraform/stack_test.go b/pkg/provisioner/terraform/stack_test.go similarity index 100% rename from pkg/infrastructure/terraform/stack_test.go rename to pkg/provisioner/terraform/stack_test.go diff --git a/pkg/resources/blueprint/blueprint_handler.go b/pkg/resources/blueprint/blueprint_handler.go index 63d228e0a..1d001884a 100644 --- a/pkg/resources/blueprint/blueprint_handler.go +++ b/pkg/resources/blueprint/blueprint_handler.go @@ -21,7 +21,7 @@ import ( "github.com/windsorcli/cli/pkg/context/config" "github.com/windsorcli/cli/pkg/constants" "github.com/windsorcli/cli/pkg/di" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" "github.com/windsorcli/cli/pkg/resources/artifact" "github.com/windsorcli/cli/pkg/context/shell" diff --git a/pkg/resources/blueprint/blueprint_handler_private_test.go b/pkg/resources/blueprint/blueprint_handler_private_test.go index 5b288857e..37bf45f61 100644 --- a/pkg/resources/blueprint/blueprint_handler_private_test.go +++ b/pkg/resources/blueprint/blueprint_handler_private_test.go @@ -12,7 +12,7 @@ import ( blueprintv1alpha1 "github.com/windsorcli/cli/api/v1alpha1" "github.com/windsorcli/cli/pkg/context/config" "github.com/windsorcli/cli/pkg/di" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" "github.com/windsorcli/cli/pkg/context/shell" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) diff --git a/pkg/resources/blueprint/blueprint_handler_public_test.go b/pkg/resources/blueprint/blueprint_handler_public_test.go index 8b430c728..76be126ef 100644 --- a/pkg/resources/blueprint/blueprint_handler_public_test.go +++ b/pkg/resources/blueprint/blueprint_handler_public_test.go @@ -18,7 +18,7 @@ import ( "github.com/windsorcli/cli/pkg/context/config" "github.com/windsorcli/cli/pkg/constants" "github.com/windsorcli/cli/pkg/di" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" "github.com/windsorcli/cli/pkg/resources/artifact" "github.com/windsorcli/cli/pkg/context/shell" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/pkg/runtime/runtime.go b/pkg/runtime/runtime.go index 2ab957d31..43f157ab7 100644 --- a/pkg/runtime/runtime.go +++ b/pkg/runtime/runtime.go @@ -14,8 +14,8 @@ import ( "github.com/windsorcli/cli/pkg/context/tools" "github.com/windsorcli/cli/pkg/di" "github.com/windsorcli/cli/pkg/generators" - "github.com/windsorcli/cli/pkg/infrastructure/cluster" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" + "github.com/windsorcli/cli/pkg/provisioner/cluster" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" "github.com/windsorcli/cli/pkg/resources/artifact" "github.com/windsorcli/cli/pkg/resources/blueprint" "github.com/windsorcli/cli/pkg/resources/terraform" diff --git a/pkg/runtime/runtime_loaders.go b/pkg/runtime/runtime_loaders.go index d6c2369d5..30ff6de86 100644 --- a/pkg/runtime/runtime_loaders.go +++ b/pkg/runtime/runtime_loaders.go @@ -9,8 +9,9 @@ import ( secretsConfigType "github.com/windsorcli/cli/api/v1alpha1/secrets" "github.com/windsorcli/cli/pkg/context/config" envvars "github.com/windsorcli/cli/pkg/context/env" - "github.com/windsorcli/cli/pkg/infrastructure/cluster" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" + "github.com/windsorcli/cli/pkg/provisioner/cluster" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" + k8sclient "github.com/windsorcli/cli/pkg/provisioner/kubernetes/client" "github.com/windsorcli/cli/pkg/resources/blueprint" "github.com/windsorcli/cli/pkg/context/secrets" "github.com/windsorcli/cli/pkg/context/shell" @@ -148,7 +149,7 @@ func (r *Runtime) LoadKubernetes() *Runtime { } if r.Injector.Resolve("kubernetesClient") == nil { - kubernetesClient := kubernetes.NewDynamicKubernetesClient() + kubernetesClient := k8sclient.NewDynamicKubernetesClient() r.Injector.Register("kubernetesClient", kubernetesClient) } diff --git a/pkg/runtime/runtime_loaders_test.go b/pkg/runtime/runtime_loaders_test.go index 8ef6b84b0..57b993518 100644 --- a/pkg/runtime/runtime_loaders_test.go +++ b/pkg/runtime/runtime_loaders_test.go @@ -9,8 +9,9 @@ import ( secretsConfigType "github.com/windsorcli/cli/api/v1alpha1/secrets" "github.com/windsorcli/cli/pkg/context/config" "github.com/windsorcli/cli/pkg/di" - "github.com/windsorcli/cli/pkg/infrastructure/cluster" - "github.com/windsorcli/cli/pkg/infrastructure/kubernetes" + "github.com/windsorcli/cli/pkg/provisioner/cluster" + "github.com/windsorcli/cli/pkg/provisioner/kubernetes" + k8sclient "github.com/windsorcli/cli/pkg/provisioner/kubernetes/client" "github.com/windsorcli/cli/pkg/context/shell" ) @@ -667,7 +668,7 @@ func TestRuntime_LoadKubernetes(t *testing.T) { } // And an existing kubernetes client registered - existingClient := kubernetes.NewMockKubernetesClient() + existingClient := k8sclient.NewMockKubernetesClient() runtime.Injector.Register("kubernetesClient", existingClient) // When loading kubernetes