diff --git a/manifests/function/hardwareprofile-example/README.md b/manifests/function/hardwareprofile-example/README.md new file mode 100644 index 000000000..ecc652d75 --- /dev/null +++ b/manifests/function/hardwareprofile-example/README.md @@ -0,0 +1,13 @@ +Function: hardwareprofile-example +================================= + +This function defines a hardware profile that can be consumed by the +hostgenerator-m3 function, and which has the same values as the default +profile defined in that function. It serves as an example for how other +hardware profile functions can be created and consumed. + +The `/replacements` kustomization contains a substution rule that injects +the profile into the hostgenerator BMH template. Please see the +`manifests/type/gating` type and `manifests/type/test-site` +kustomization.yamls to see how a hardwareprofile function can be wired in. + diff --git a/manifests/function/hardwareprofile-example/hardwareprofile.yaml b/manifests/function/hardwareprofile-example/hardwareprofile.yaml new file mode 100644 index 000000000..0b71cf587 --- /dev/null +++ b/manifests/function/hardwareprofile-example/hardwareprofile.yaml @@ -0,0 +1,10 @@ +apiVersion: airshipit.org/v1alpha1 +kind: VariableCatalogue +metadata: + # NOTE: change this when copying this example + name: hardwareprofile-example +hardwareProfile: + firmware: + sriovEnabled: false + virtualizationDisabled: false + simultaneousMultithreadingDisabled: false diff --git a/manifests/function/hardwareprofile-example/kustomization.yaml b/manifests/function/hardwareprofile-example/kustomization.yaml new file mode 100644 index 000000000..4f81598b9 --- /dev/null +++ b/manifests/function/hardwareprofile-example/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - hardwareprofile.yaml diff --git a/manifests/function/hardwareprofile-example/replacements/hosts.yaml b/manifests/function/hardwareprofile-example/replacements/hosts.yaml new file mode 100644 index 000000000..fa406fea6 --- /dev/null +++ b/manifests/function/hardwareprofile-example/replacements/hosts.yaml @@ -0,0 +1,19 @@ +# These rules inject host-specific information from the `host-catalogue` +# into the hostgenerator-m3 function's Template plugin config. +apiVersion: airshipit.org/v1alpha1 +kind: ReplacementTransformer +metadata: + # NOTE: change this when copying this example + name: hardwareprofile-example-replacements +replacements: +- source: + objref: + # NOTE: change this to match your hardwareProfile's metadata.name + name: hardwareprofile-example + fieldref: hardwareProfile + target: + objref: + kind: Templater + name: m3-host-template + # NOTE: change "example" below when copying this example + fieldrefs: [values.hardwareProfiles.example] diff --git a/manifests/function/hardwareprofile-example/replacements/kustomization.yaml b/manifests/function/hardwareprofile-example/replacements/kustomization.yaml new file mode 100644 index 000000000..69030f1c9 --- /dev/null +++ b/manifests/function/hardwareprofile-example/replacements/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - hosts.yaml diff --git a/manifests/function/hostgenerator-m3/hosttemplate.yaml b/manifests/function/hostgenerator-m3/hosttemplate.yaml index 12b91d483..3de8bdc80 100644 --- a/manifests/function/hostgenerator-m3/hosttemplate.yaml +++ b/manifests/function/hostgenerator-m3/hosttemplate.yaml @@ -3,7 +3,7 @@ kind: Templater metadata: name: m3-host-template -# values: +values: # hosts: # (filled in from the comprehensive site-wide host-catalogue) # hostsToGenerate: @@ -11,11 +11,23 @@ metadata: # commonNetworking: # (filled in with the type-specific common-networking-catalogue) + # Additional hardwareProfiles can be defined within their own functions, + # and then substituted into the stanza below. + # See function/hardwareprofile-example for an example of how to do this. + hardwareProfiles: + default: + # Reference: https://github.com/metal3-io/metal3-docs/blob/master/design/baremetal-operator/bios-config.md + firmware: + sriovEnabled: false + virtualizationDisabled: false + simultaneousMultithreadingDisabled: false + template: | {{- $envAll := . }} {{- range .hostsToGenerate }} {{- $hostName := . }} {{- $host := index $envAll.hosts $hostName }} + {{- $hardwareProfile := index $envAll.hardwareProfiles $host.hardwareProfile }} --- apiVersion: metal3.io/v1alpha1 kind: BareMetalHost @@ -33,6 +45,9 @@ template: | bmc: address: {{ $host.bmcAddress }} credentialsName: {{ $hostName }}-bmc-secret + firmware: + {{ toYaml $hardwareProfile.firmware | indent 4 }} + --- apiVersion: v1 kind: Secret diff --git a/manifests/site/test-site/ephemeral/bootstrap/hostgenerator/kustomization.yaml b/manifests/site/test-site/ephemeral/bootstrap/hostgenerator/kustomization.yaml index 8de561b8c..ea23edf11 100644 --- a/manifests/site/test-site/ephemeral/bootstrap/hostgenerator/kustomization.yaml +++ b/manifests/site/test-site/ephemeral/bootstrap/hostgenerator/kustomization.yaml @@ -1,9 +1,13 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: + # TODO: these two should move up to type level in the future - ../../../../../function/hostgenerator-m3 + - ../../../../../function/hardwareprofile-example - ../../../shared/catalogues/ - host-generation.yaml transformers: + # TODO: these two should move up to type level in the future - ../../../../../function/hostgenerator-m3/replacements + - ../../../../../function/hardwareprofile-example/replacements diff --git a/manifests/site/test-site/ephemeral/controlplane/hostgenerator/kustomization.yaml b/manifests/site/test-site/ephemeral/controlplane/hostgenerator/kustomization.yaml index 8de561b8c..ea23edf11 100644 --- a/manifests/site/test-site/ephemeral/controlplane/hostgenerator/kustomization.yaml +++ b/manifests/site/test-site/ephemeral/controlplane/hostgenerator/kustomization.yaml @@ -1,9 +1,13 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: + # TODO: these two should move up to type level in the future - ../../../../../function/hostgenerator-m3 + - ../../../../../function/hardwareprofile-example - ../../../shared/catalogues/ - host-generation.yaml transformers: + # TODO: these two should move up to type level in the future - ../../../../../function/hostgenerator-m3/replacements + - ../../../../../function/hardwareprofile-example/replacements diff --git a/manifests/site/test-site/shared/catalogues/hosts.yaml b/manifests/site/test-site/shared/catalogues/hosts.yaml index 618f936fb..ae5936b5b 100644 --- a/manifests/site/test-site/shared/catalogues/hosts.yaml +++ b/manifests/site/test-site/shared/catalogues/hosts.yaml @@ -18,6 +18,7 @@ hosts: oam: 52:54:00:9b:27:4c pxe: 52:54:00:b6:ed:31 bootMode: legacy + hardwareProfile: default # defined in the hostgenerator-m3 function node02: macAddress: 52:54:00:b6:ed:02 bmcAddress: redfish+http://10.23.25.2:8000/redfish/v1/Systems/air-target-2 @@ -29,3 +30,4 @@ hosts: macAddresses: oam: 52:54:00:9b:27:02 pxe: 52:54:00:b6:ed:02 + hardwareProfile: example # defined in the hardwareprofile-example function