airshipctl/manifests/function/hostgenerator-m3/hosttemplate.yaml
Matt McEuen a27476580d Allow labelling of BMHs
SIP cluster scheduling relies ultimately on labels on the underlying
BareMetalHosts for rack and server name.

This change allows operators to optionally add labels to BMHs
that are generated by the hostgenerator-m3 function, and gives
an example of how to use it.

Change-Id: Icc35ef81fc3a9fc6e6e89dc7ba58a385469cdf68
2021-06-23 19:14:54 +00:00

110 lines
3.3 KiB
YAML

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:
# 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 }}
{{- /* 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 -}}
{{- if not $hardwareProfile.firmware -}}
{{- fail (printf "hardwareProfile %s doesn't have firmware field" $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 }}
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 */ -}}
{{- 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 }}
ethernet_mac_address: {{ index $host.macAddresses .id }}
{{- 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 -}}