feat(global_defaults): add semantic validations for IP, hostname, LUKS method, and interface prefix
This commit is contained in:
@@ -34,6 +34,7 @@ hypervisor_defaults:
|
|||||||
storage: ""
|
storage: ""
|
||||||
datacenter: ""
|
datacenter: ""
|
||||||
cluster: ""
|
cluster: ""
|
||||||
|
folder: ""
|
||||||
certs: false
|
certs: false
|
||||||
ssh: false
|
ssh: false
|
||||||
|
|
||||||
|
|||||||
@@ -347,8 +347,48 @@
|
|||||||
that:
|
that:
|
||||||
- item is mapping
|
- item is mapping
|
||||||
- item.bridge is defined and (item.bridge | string | length) > 0
|
- item.bridge is defined and (item.bridge | string | length) > 0
|
||||||
fail_msg: "Each system.network.interfaces[] entry must be a dict with at least a 'bridge' key."
|
- >-
|
||||||
|
(item.ip | default('') | string | length) == 0
|
||||||
|
or (item.prefix | default('') | string | length) > 0
|
||||||
|
fail_msg: "Each system.network.interfaces[] entry must have a 'bridge' key and 'prefix' when 'ip' is set."
|
||||||
quiet: true
|
quiet: true
|
||||||
loop: "{{ system_cfg.network.interfaces }}"
|
loop: "{{ system_cfg.network.interfaces }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
label: "{{ item | to_json }}"
|
label: "{{ item | to_json }}"
|
||||||
|
|
||||||
|
- name: Validate hostname format
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- hostname is regex("^[a-zA-Z0-9]([a-zA-Z0-9._-]*[a-zA-Z0-9])?$")
|
||||||
|
fail_msg: "hostname '{{ hostname }}' contains invalid characters. Use only alphanumeric, hyphens, dots, and underscores."
|
||||||
|
quiet: true
|
||||||
|
|
||||||
|
- name: Validate IP address format
|
||||||
|
when: system_cfg.network.ip is defined and (system_cfg.network.ip | string | length) > 0
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- system_cfg.network.ip is regex("^([0-9]{1,3}\\.){3}[0-9]{1,3}$")
|
||||||
|
fail_msg: "system.network.ip '{{ system_cfg.network.ip }}' is not a valid IPv4 address."
|
||||||
|
quiet: true
|
||||||
|
|
||||||
|
- name: Validate DNS server format
|
||||||
|
when:
|
||||||
|
- system_cfg.network.dns.servers is defined
|
||||||
|
- system_cfg.network.dns.servers | length > 0
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- item is regex("^([0-9]{1,3}\\.){3}[0-9]{1,3}$")
|
||||||
|
fail_msg: "DNS server '{{ item }}' is not a valid IPv4 address."
|
||||||
|
quiet: true
|
||||||
|
loop: "{{ system_cfg.network.dns.servers }}"
|
||||||
|
|
||||||
|
- name: Validate LUKS method
|
||||||
|
when: system_cfg.luks.enabled | bool
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- system_cfg.luks.method in ["tpm2", "keyfile"]
|
||||||
|
- >-
|
||||||
|
(system_cfg.luks.passphrase | string | length) > 0
|
||||||
|
fail_msg: "system.luks.method must be 'tpm2' or 'keyfile', and luks.passphrase must be set when LUKS is enabled."
|
||||||
|
quiet: true
|
||||||
|
no_log: true
|
||||||
|
|||||||
Reference in New Issue
Block a user