ansible-playbooks/playbookconfig/src/playbooks/roles/bootstrap/validate-config/tasks/validate_address_range.yml

71 lines
2.9 KiB
YAML

---
#
# Copyright (c) 2019 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# SUB-TASKS DESCRIPTION:
# Validate addresses in provided range and the range size
#
- set_fact:
network: "{{ item.key }}"
start_addr: "{{ item.value['start'] }}"
end_addr: "{{ item.value['end'] }}"
subnet: "{{ item.value['subnet'] }}"
use_default: "{{ item.value['use_default'] }}"
- block:
- name: Validate {{ network }} start and end address format
debug:
msg: "{{ network }}: {{ start_addr }} {{ end_addr }}"
failed_when: (start_addr | ipaddr == False) or (end_addr | ipaddr == False)
- block:
- name: Validate {{ network }} start and end range
vars:
script_content: |
from netaddr import IPAddress
from netaddr import IPNetwork
from netaddr import IPRange
start = IPAddress("{{ start_addr }}")
end = IPAddress("{{ end_addr }}")
subnet = IPNetwork("{{ subnet }}")
if not start < end:
raise Exception("Failed validation, {{ network }} start address must be less than end address.")
if start not in subnet or end not in subnet:
raise Exception("Failed validation, {{ network }} start or end address must be within its subnet range.")
range = IPRange("{{ start_addr }}", "{{ end_addr }}")
if (("{{ network }}" == 'cluster_pod' or "{{ network }}" == 'cluster_service') and
range.size < {{ min_pod_service_num_addresses|int }}):
raise Exception("Failed validation, {{ network }} address range must contain at least %d addresses." %
int("{{ min_pod_service_num_addresses }}"))
elif (("{{ network }}" == 'pxeboot' or "{{ network }}" == 'multicast' or "{{ network }}" == 'management') and
range.size < {{ min_16_addresses|int }}):
raise Exception("Failed validation, {{ network }} address range must contain at least %d addresses." %
int("{{ min_16_addresses }}"))
elif range.size < {{ min_8_addresses|int }}:
raise Exception("Failed validation, {{ network }} address range must contain at least %d addresses." %
int("{{ min_8_addresses }}"))
if ("{{ distributed_cloud_role }}" == 'systemcontroller' and "{{ network }}" == 'management' and
range.size >= (subnet.size - 2)):
raise Exception("Failed validation, {{ network }} address range too large, no addresses left for "
"System Controller gateway(s)")
shell: "{{ script_content }}"
args:
executable: /usr/bin/python
failed_when: false
register: range_check_result
- name: Fail if address range did not meet required criteria
fail:
msg: "{{ range_check_result.stderr_lines[-1] }}"
when: range_check_result.rc != 0
when: network != 'oam_node'
when: not use_default