Skip to main content

Schema 1.1.0

Common (common.yml)

version: regex(r'\d+\.\d+\.\d+')
customer_name: str(required=False)
ssh_authorized_keys: list(str())
password_hash: str(required=False)
sshd_allow_users: list(str()) # TODO validate example: core@10.*.*.*
matchbox_endpoints: map(include('endpoint_params'))
container_registry: include('registry', required=False)
networks: list(include('subnet'), required=False)
networking:
dns: ip(version=4) # maybe ip6 too?
---
endpoint_params:
ip: ip(version=4) # maybe ip6 too?
port: int(min=1, max=65535)

registry:
url: str()
user: str()
password: str()

subnet:
name: str()
cidr: ip(version=4) # maybe ip6 too?

Nodes (nodes/*.yml)

list(include('node'))

---
node:
name: str()
interfaces: map(include('interface_params'), required=False)
iptables: include('iptable_params', required=False)
kubernetes: include('kubernetes_params', required=False) # check if required?
disk: str(required=False) # info string
wipe_disks: bool(required=False) # is it always required? guess: only if state for k3s is set
state: list(required=False) # this is a block device id
type: enum('storage', 'rootbox', 'minimal-ignition', 'management', 'control', 'compute', 'cdo-a', 'boot') # check here our types in box-generator
canary: enum('red', 'green', 'testing')
datacenter: str()
iscsi_name: ip(required=False) # do we need that
noisn: bool(required=False) # do we need that
install: include('install_params', required=False)
cgroups: enum('v1', 'v2', required=False)
ipmi: include('ipmi_params', required=False)
hugepages: list(include('hugepage_params'), required=False)

interface_params:
mac: mac()
ips: list(ip(), required=False)
type: str(required=False) # check if required
vlan_parent: bool(required=False)
vlan: include('vlan_params', required=False)
routes: list(include('route_params'), required=False)
dns: ip(required=False)

vlan_params:
type: enum('macvlan', 'vlan')
parent: str()
mode: int(min=0, required=False) # check for type
id: int(min=0, required=False) # check for type

route_params:
network: ip()
gateway: ip()
metric: int(min=0)

iptable_params:
forward: bool()
rules: list(include('iptable_rule_list'), required=False)

iptable_rule_list:
table: str()
chain: str()
rule: str()

kubernetes_params:
node_ip: ip()
external_ip: ip(required=False)
advertise_address: ip(required=False)
token: str()
role: enum('server', 'agent')
master_url: str(required=False) # TODO validate url

install_params:
disk: str()

ipmi_params:
baudrate: str()

hugepage_params:
size: str()
count: int(min=0)