67 lines
2.6 KiB
YAML
67 lines
2.6 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 }}"))
|
|
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
|