From 39a6036ca89a53daf8482dc5f1547aed01e5e4ab Mon Sep 17 00:00:00 2001 From: Matt McEuen Date: Wed, 18 Nov 2020 10:21:30 -0600 Subject: [PATCH] Patch hostgenerators to delete catalogues To facilitate catalogue-driven generation of BareMetalHost resources, airship splits the work into two pieces: 1. /hostgenerator/ is responsible for substituting catalogue variables into a host generation template 2. / invokes its hostgenerator/ as a Kustomize generator:, leveraging the results of 1. to generate BMH. However, a weird side-effect of this setup is that the catalogues used in step 1. above are still hanging around in step 2., and Kustomize tries to interpret them as generator: plugin configs, resulting in a rendering error. Previously, we'd worked around this by having a pass-through plugin implementation, which performs a no-op generation for the spent catalogues. However, with the change below, airshipctl migrated to container-based KRM functions for its kustomize plugins, and also adopted a strategic-patch-delete mechanism to clean up the spent catalogues, so that they aren't still hanging around by the time the generation occurs. https://review.opendev.org/#/c/759279/ Change-Id: I50a9bd2fcc37b70f50b8ded88f152775aff928bc Closes: #48 --- .../hostgenerator/kustomization.yaml | 1 + .../patch-delete-catalogues.yaml | 35 +++++++++++++++++++ .../hostgenerator/kustomization.yaml | 1 + .../patch-delete-catalogues.yaml | 35 +++++++++++++++++++ .../workers/hostgenerator/kustomization.yaml | 1 + .../patch-delete-catalogues.yaml | 35 +++++++++++++++++++ .../hostgenerator/kustomization.yaml | 1 + .../patch-delete-catalogues.yaml | 35 +++++++++++++++++++ .../ephemeral/catalogues/networking.yaml | 2 +- .../hostgenerator/kustomization.yaml | 1 + .../patch-delete-catalogues.yaml | 35 +++++++++++++++++++ .../target/catalogues/networking.yaml | 2 +- playbooks/get-vm-config.yaml | 8 ++--- 13 files changed, 186 insertions(+), 6 deletions(-) create mode 100644 manifests/site/test-site/ephemeral/bootstrap/hostgenerator/patch-delete-catalogues.yaml create mode 100644 manifests/site/test-site/ephemeral/controlplane/hostgenerator/patch-delete-catalogues.yaml create mode 100644 manifests/site/test-site/target/workers/hostgenerator/patch-delete-catalogues.yaml create mode 100644 manifests/site/virtual-network-cloud/ephemeral/bootstrap/hostgenerator/patch-delete-catalogues.yaml create mode 100644 manifests/site/virtual-network-cloud/ephemeral/controlplane/hostgenerator/patch-delete-catalogues.yaml diff --git a/manifests/site/test-site/ephemeral/bootstrap/hostgenerator/kustomization.yaml b/manifests/site/test-site/ephemeral/bootstrap/hostgenerator/kustomization.yaml index 1bc039536..a88e9926f 100644 --- a/manifests/site/test-site/ephemeral/bootstrap/hostgenerator/kustomization.yaml +++ b/manifests/site/test-site/ephemeral/bootstrap/hostgenerator/kustomization.yaml @@ -7,3 +7,4 @@ resources: transformers: - ../../../../../../../airshipctl/manifests/function/hostgenerator-m3/replacements + - patch-delete-catalogues.yaml diff --git a/manifests/site/test-site/ephemeral/bootstrap/hostgenerator/patch-delete-catalogues.yaml b/manifests/site/test-site/ephemeral/bootstrap/hostgenerator/patch-delete-catalogues.yaml new file mode 100644 index 000000000..561cbc571 --- /dev/null +++ b/manifests/site/test-site/ephemeral/bootstrap/hostgenerator/patch-delete-catalogues.yaml @@ -0,0 +1,35 @@ +apiVersion: builtin +kind: PatchStrategicMergeTransformer +metadata: + name: smp +patches: |- + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: host-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: host-generation-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: networking + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: env-vars-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: versions-airshipctl + $patch: delete diff --git a/manifests/site/test-site/ephemeral/controlplane/hostgenerator/kustomization.yaml b/manifests/site/test-site/ephemeral/controlplane/hostgenerator/kustomization.yaml index 1bc039536..a88e9926f 100644 --- a/manifests/site/test-site/ephemeral/controlplane/hostgenerator/kustomization.yaml +++ b/manifests/site/test-site/ephemeral/controlplane/hostgenerator/kustomization.yaml @@ -7,3 +7,4 @@ resources: transformers: - ../../../../../../../airshipctl/manifests/function/hostgenerator-m3/replacements + - patch-delete-catalogues.yaml diff --git a/manifests/site/test-site/ephemeral/controlplane/hostgenerator/patch-delete-catalogues.yaml b/manifests/site/test-site/ephemeral/controlplane/hostgenerator/patch-delete-catalogues.yaml new file mode 100644 index 000000000..561cbc571 --- /dev/null +++ b/manifests/site/test-site/ephemeral/controlplane/hostgenerator/patch-delete-catalogues.yaml @@ -0,0 +1,35 @@ +apiVersion: builtin +kind: PatchStrategicMergeTransformer +metadata: + name: smp +patches: |- + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: host-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: host-generation-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: networking + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: env-vars-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: versions-airshipctl + $patch: delete diff --git a/manifests/site/test-site/target/workers/hostgenerator/kustomization.yaml b/manifests/site/test-site/target/workers/hostgenerator/kustomization.yaml index 1bc039536..a88e9926f 100644 --- a/manifests/site/test-site/target/workers/hostgenerator/kustomization.yaml +++ b/manifests/site/test-site/target/workers/hostgenerator/kustomization.yaml @@ -7,3 +7,4 @@ resources: transformers: - ../../../../../../../airshipctl/manifests/function/hostgenerator-m3/replacements + - patch-delete-catalogues.yaml diff --git a/manifests/site/test-site/target/workers/hostgenerator/patch-delete-catalogues.yaml b/manifests/site/test-site/target/workers/hostgenerator/patch-delete-catalogues.yaml new file mode 100644 index 000000000..561cbc571 --- /dev/null +++ b/manifests/site/test-site/target/workers/hostgenerator/patch-delete-catalogues.yaml @@ -0,0 +1,35 @@ +apiVersion: builtin +kind: PatchStrategicMergeTransformer +metadata: + name: smp +patches: |- + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: host-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: host-generation-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: networking + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: env-vars-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: versions-airshipctl + $patch: delete diff --git a/manifests/site/virtual-network-cloud/ephemeral/bootstrap/hostgenerator/kustomization.yaml b/manifests/site/virtual-network-cloud/ephemeral/bootstrap/hostgenerator/kustomization.yaml index 1bc039536..a88e9926f 100644 --- a/manifests/site/virtual-network-cloud/ephemeral/bootstrap/hostgenerator/kustomization.yaml +++ b/manifests/site/virtual-network-cloud/ephemeral/bootstrap/hostgenerator/kustomization.yaml @@ -7,3 +7,4 @@ resources: transformers: - ../../../../../../../airshipctl/manifests/function/hostgenerator-m3/replacements + - patch-delete-catalogues.yaml diff --git a/manifests/site/virtual-network-cloud/ephemeral/bootstrap/hostgenerator/patch-delete-catalogues.yaml b/manifests/site/virtual-network-cloud/ephemeral/bootstrap/hostgenerator/patch-delete-catalogues.yaml new file mode 100644 index 000000000..561cbc571 --- /dev/null +++ b/manifests/site/virtual-network-cloud/ephemeral/bootstrap/hostgenerator/patch-delete-catalogues.yaml @@ -0,0 +1,35 @@ +apiVersion: builtin +kind: PatchStrategicMergeTransformer +metadata: + name: smp +patches: |- + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: host-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: host-generation-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: networking + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: env-vars-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: versions-airshipctl + $patch: delete diff --git a/manifests/site/virtual-network-cloud/ephemeral/catalogues/networking.yaml b/manifests/site/virtual-network-cloud/ephemeral/catalogues/networking.yaml index 2081a341b..448134876 100644 --- a/manifests/site/virtual-network-cloud/ephemeral/catalogues/networking.yaml +++ b/manifests/site/virtual-network-cloud/ephemeral/catalogues/networking.yaml @@ -4,7 +4,7 @@ apiVersion: airshipit.org/v1alpha1 kind: VariableCatalogue metadata: - name: networking-catalogue + name: networking # The catalogue should be overridden as appropriate for different kubernetes # clusters, e.g. ephemeral vs target vs tenant diff --git a/manifests/site/virtual-network-cloud/ephemeral/controlplane/hostgenerator/kustomization.yaml b/manifests/site/virtual-network-cloud/ephemeral/controlplane/hostgenerator/kustomization.yaml index 1bc039536..a88e9926f 100644 --- a/manifests/site/virtual-network-cloud/ephemeral/controlplane/hostgenerator/kustomization.yaml +++ b/manifests/site/virtual-network-cloud/ephemeral/controlplane/hostgenerator/kustomization.yaml @@ -7,3 +7,4 @@ resources: transformers: - ../../../../../../../airshipctl/manifests/function/hostgenerator-m3/replacements + - patch-delete-catalogues.yaml diff --git a/manifests/site/virtual-network-cloud/ephemeral/controlplane/hostgenerator/patch-delete-catalogues.yaml b/manifests/site/virtual-network-cloud/ephemeral/controlplane/hostgenerator/patch-delete-catalogues.yaml new file mode 100644 index 000000000..561cbc571 --- /dev/null +++ b/manifests/site/virtual-network-cloud/ephemeral/controlplane/hostgenerator/patch-delete-catalogues.yaml @@ -0,0 +1,35 @@ +apiVersion: builtin +kind: PatchStrategicMergeTransformer +metadata: + name: smp +patches: |- + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: host-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: host-generation-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: networking + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: env-vars-catalogue + $patch: delete + --- + apiVersion: airshipit.org/v1alpha1 + kind: VariableCatalogue + metadata: + name: versions-airshipctl + $patch: delete diff --git a/manifests/site/virtual-network-cloud/target/catalogues/networking.yaml b/manifests/site/virtual-network-cloud/target/catalogues/networking.yaml index 92ce68a64..83795898a 100644 --- a/manifests/site/virtual-network-cloud/target/catalogues/networking.yaml +++ b/manifests/site/virtual-network-cloud/target/catalogues/networking.yaml @@ -4,7 +4,7 @@ apiVersion: airshipit.org/v1alpha1 kind: VariableCatalogue metadata: - name: networking-catalogue + name: networking # The catalogue should be overridden as appropriate for different kubernetes # clusters, e.g. ephemeral vs target vs tenant diff --git a/playbooks/get-vm-config.yaml b/playbooks/get-vm-config.yaml index 79a4d26b3..9f058acb9 100644 --- a/playbooks/get-vm-config.yaml +++ b/playbooks/get-vm-config.yaml @@ -17,12 +17,12 @@ shell: | set -e kustomize build --enable_alpha_plugins \ - {{ airship_config_manifest_directory }}/{{ airship_config_site_path }}/{{ path }} | + {{ airship_config_manifest_directory }}/{{ airship_config_site_path }}/{{ path }} 2>/dev/null | kustomize cfg grep "kind=BareMetalHost" register: bmh_command failed_when: "bmh_command.stdout == ''" environment: - KUSTOMIZE_PLUGIN_HOME: "{{ ansible_env.HOME }}/.airship/kustomize-plugins" + KUSTOMIZE_PLUGIN_HOME: "/tmp" KUSTOMIZE_ENABLE_ALPHA_COMMANDS: "true" - set_fact: @@ -32,12 +32,12 @@ shell: | set -e kustomize build --enable_alpha_plugins \ - {{ airship_config_manifest_directory }}/{{ airship_config_site_path }}/{{ path }} | + {{ airship_config_manifest_directory }}/{{ airship_config_site_path }}/{{ path }} 2>/dev/null | kustomize cfg grep "metadata.name={{ item.spec.networkData.name }}" register: netdata_command failed_when: "netdata_command.stdout == ''" environment: - KUSTOMIZE_PLUGIN_HOME: "{{ ansible_env.HOME }}/.airship/kustomize-plugins" + KUSTOMIZE_PLUGIN_HOME: "/tmp" KUSTOMIZE_ENABLE_ALPHA_COMMANDS: "true" with_items: "{{ bmh }}"