apiVersion: airshipit.org/v1alpha1 kind: Templater metadata: name: m3-host-template annotations: config.kubernetes.io/function: |- container: image: localhost/templater values: # hosts: # (filled in from the comprehensive site-wide host-catalogue) # hostsToGenerate: # (filled in with phase-specific host-generation-catalogue) # commonNetworking: # (filled in with the type-specific common-networking) # 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: raid: hardwareRAIDVolumes: [] softwareRAIDVolumes: [] # Reference: https://github.com/metal3-io/metal3-docs/blob/master/design/baremetal-operator/bios-config.md #firmware: # sriovEnabled: false # virtualizationEnabled: false # simultaneousMultithreadingEnabled: false template: | {{- $envAll := . }} {{- range .hostsToGenerate }} {{- $hostName := . }} {{- $host := index $envAll.hosts $hostName }} {{- /* If no hardwareProfile is defined for a host, use the default */ -}} {{- if not $host.hardwareProfile }} {{- $_ := set $host "hardwareProfile" "default" }} {{- end }} {{- $hardwareProfile := index $envAll.hardwareProfiles $host.hardwareProfile }} {{- if not $hardwareProfile -}} {{- fail (printf "can't find hardwareProfile %s" $host.hardwareProfile) -}} {{- end -}} --- apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: annotations: {{- if $host.labels }} labels: {{ toYaml $host.labels | indent 4 }} {{- end }} name: {{ $hostName }} spec: online: false bootMACAddress: {{ $host.macAddress }} bootMode: {{ $host.bootMode }} networkData: name: {{ $hostName }}-network-data namespace: target-infra bmc: address: {{ $host.bmcAddress }} credentialsName: {{ $hostName }}-bmc-secret disableCertificateVerification: {{ default false $host.disableCertificateVerification }} {{- if $hardwareProfile.firmware }} firmware: {{ toYaml $hardwareProfile.firmware | indent 4 }} {{- /* If no raid is defined for a host, simply skip. There is no default setting for raid */ -}} {{- /* Reference for RAID: https://github.com/metal3-io/metal3-docs/pull/134 */ -}} {{- end }} {{- if $hardwareProfile.raid }} raid: {{ toYaml $hardwareProfile.raid | indent 4 }} {{- end }} --- apiVersion: v1 kind: Secret metadata: name: {{ $hostName }}-bmc-secret data: username: {{ $host.bmcUsername | b64enc }} password: {{ $host.bmcPassword | b64enc }} type: Opaque --- apiVersion: v1 kind: Secret metadata: name: {{ $hostName }}-network-data stringData: networkData: | links: {{- range $envAll.commonNetworking.links }} - {{ toYaml . | indent 6 }} {{- if $host.macAddresses }} {{- if index $host.macAddresses .id }} ethernet_mac_address: {{ index $host.macAddresses .id }} {{- end }} {{- end }} {{- end }} networks: {{- range $envAll.commonNetworking.networks }} - {{ toYaml . | indent 6 }} ip_address: {{ index $host.ipAddresses .id }} {{- end }} services: {{ toYaml $envAll.commonNetworking.services | indent 6 }} type: Opaque {{ end -}}