Patch hostgenerators to delete catalogues

To facilitate catalogue-driven generation of BareMetalHost resources,
airship splits the work into two pieces:

1. <phasename>/hostgenerator/ is responsible for substituting
   catalogue variables into a host generation template
2. <phasename>/ 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
This commit is contained in:
Matt McEuen 2020-11-18 10:21:30 -06:00
parent aacdbc2f41
commit 39a6036ca8
13 changed files with 186 additions and 6 deletions

View File

@ -7,3 +7,4 @@ resources:
transformers:
- ../../../../../../../airshipctl/manifests/function/hostgenerator-m3/replacements
- patch-delete-catalogues.yaml

View File

@ -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

View File

@ -7,3 +7,4 @@ resources:
transformers:
- ../../../../../../../airshipctl/manifests/function/hostgenerator-m3/replacements
- patch-delete-catalogues.yaml

View File

@ -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

View File

@ -7,3 +7,4 @@ resources:
transformers:
- ../../../../../../../airshipctl/manifests/function/hostgenerator-m3/replacements
- patch-delete-catalogues.yaml

View File

@ -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

View File

@ -7,3 +7,4 @@ resources:
transformers:
- ../../../../../../../airshipctl/manifests/function/hostgenerator-m3/replacements
- patch-delete-catalogues.yaml

View File

@ -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

View File

@ -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

View File

@ -7,3 +7,4 @@ resources:
transformers:
- ../../../../../../../airshipctl/manifests/function/hostgenerator-m3/replacements
- patch-delete-catalogues.yaml

View File

@ -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

View File

@ -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

View File

@ -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 }}"