summaryrefslogtreecommitdiff
path: root/plugins/modules/_vyos_l3_interface.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/modules/_vyos_l3_interface.py')
-rw-r--r--plugins/modules/_vyos_l3_interface.py161
1 files changed, 84 insertions, 77 deletions
diff --git a/plugins/modules/_vyos_l3_interface.py b/plugins/modules/_vyos_l3_interface.py
index 15668d4b..430217c3 100644
--- a/plugins/modules/_vyos_l3_interface.py
+++ b/plugins/modules/_vyos_l3_interface.py
@@ -20,11 +20,12 @@
#
ANSIBLE_METADATA = {
- 'metadata_version': '1.1',
- 'status': ['deprecated'],
- 'supported_by': 'network'
+ "metadata_version": "1.1",
+ "status": ["deprecated"],
+ "supported_by": "network",
}
+
DOCUMENTATION = """
---
module: vyos_l3_interface
@@ -102,16 +103,19 @@ from copy import deepcopy
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.common.utils import is_masklen, validate_ip_address
from ansible.module_utils.network.common.utils import remove_default_spec
-from ansible_collections.vyos.vyos.plugins.module_utils.network. \
- vyos.vyos import load_config, run_commands
+from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.vyos import (
+ load_config,
+ run_commands,
+)
-from ansible_collections.vyos.vyos.plugins.module_utils.network. \
- vyos.vyos import vyos_argument_spec
+from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.vyos import (
+ vyos_argument_spec,
+)
def is_ipv4(value):
if value:
- address = value.split('/')
+ address = value.split("/")
if is_masklen(address[1]) and validate_ip_address(address[0]):
return True
return False
@@ -119,7 +123,7 @@ def is_ipv4(value):
def is_ipv6(value):
if value:
- address = value.split('/')
+ address = value.split("/")
if 0 <= int(address[1]) <= 128:
try:
socket.inet_pton(socket.AF_INET6, address[0])
@@ -131,7 +135,7 @@ def is_ipv6(value):
def search_obj_in_list(name, lst):
for o in lst:
- if o['name'] == name:
+ if o["name"] == name:
return o
return None
@@ -142,60 +146,58 @@ def map_obj_to_commands(updates, module):
want, have = updates
for w in want:
- name = w['name']
- ipv4 = w['ipv4']
- ipv6 = w['ipv6']
- state = w['state']
+ name = w["name"]
+ ipv4 = w["ipv4"]
+ ipv6 = w["ipv6"]
+ state = w["state"]
obj_in_have = search_obj_in_list(name, have)
- if state == 'absent' and obj_in_have:
- if not ipv4 and not ipv6 and (obj_in_have['ipv4']
- or obj_in_have['ipv6']):
+ if state == "absent" and obj_in_have:
+ if not ipv4 and not ipv6 and (obj_in_have["ipv4"] or obj_in_have["ipv6"]):
if name == "lo":
- commands.append('delete interfaces loopback lo address')
+ commands.append("delete interfaces loopback lo address")
else:
- commands.append('delete interfaces ethernet ' + name +
- ' address')
+ commands.append("delete interfaces ethernet " + name + " address")
else:
- if ipv4 and ipv4 in obj_in_have['ipv4']:
+ if ipv4 and ipv4 in obj_in_have["ipv4"]:
if name == "lo":
- commands.append(
- 'delete interfaces loopback lo address ' + ipv4)
+ commands.append("delete interfaces loopback lo address " + ipv4)
else:
- commands.append('delete interfaces ethernet ' + name +
- ' address ' + ipv4)
- if ipv6 and ipv6 in obj_in_have['ipv6']:
- if name == "lo":
commands.append(
- 'delete interfaces loopback lo address ' + ipv6)
+ "delete interfaces ethernet " + name + " address " + ipv4
+ )
+ if ipv6 and ipv6 in obj_in_have["ipv6"]:
+ if name == "lo":
+ commands.append("delete interfaces loopback lo address " + ipv6)
else:
- commands.append('delete interfaces ethernet ' + name +
- ' address ' + ipv6)
- elif (state == 'present' and obj_in_have):
- if ipv4 and ipv4 not in obj_in_have['ipv4']:
+ commands.append(
+ "delete interfaces ethernet " + name + " address " + ipv6
+ )
+ elif state == "present" and obj_in_have:
+ if ipv4 and ipv4 not in obj_in_have["ipv4"]:
if name == "lo":
- commands.append('set interfaces loopback lo address ' +
- ipv4)
+ commands.append("set interfaces loopback lo address " + ipv4)
else:
- commands.append('set interfaces ethernet ' + name +
- ' address ' + ipv4)
+ commands.append(
+ "set interfaces ethernet " + name + " address " + ipv4
+ )
- if ipv6 and ipv6 not in obj_in_have['ipv6']:
+ if ipv6 and ipv6 not in obj_in_have["ipv6"]:
if name == "lo":
- commands.append('set interfaces loopback lo address ' +
- ipv6)
+ commands.append("set interfaces loopback lo address " + ipv6)
else:
- commands.append('set interfaces ethernet ' + name +
- ' address ' + ipv6)
+ commands.append(
+ "set interfaces ethernet " + name + " address " + ipv6
+ )
return commands
def map_config_to_obj(module):
obj = []
- output = run_commands(module, ['show interfaces'])
- lines = re.split(r'\n[e|l]', output[0])[1:]
+ output = run_commands(module, ["show interfaces"])
+ lines = re.split(r"\n[e|l]", output[0])[1:]
if len(lines) > 0:
for line in lines:
@@ -205,20 +207,20 @@ def map_config_to_obj(module):
ipv4 = []
ipv6 = []
- if splitted_line[0].lower().startswith('th'):
- name = 'e' + splitted_line[0].lower()
- elif splitted_line[0].lower().startswith('o'):
- name = 'l' + splitted_line[0].lower()
+ if splitted_line[0].lower().startswith("th"):
+ name = "e" + splitted_line[0].lower()
+ elif splitted_line[0].lower().startswith("o"):
+ name = "l" + splitted_line[0].lower()
for i in splitted_line[1:]:
- if (('.' in i or ':' in i) and '/' in i):
- value = i.split(r'\n')[0]
+ if ("." in i or ":" in i) and "/" in i:
+ value = i.split(r"\n")[0]
if is_ipv4(value):
ipv4.append(value)
elif is_ipv6(value):
ipv6.append(value)
- obj.append({'name': name, 'ipv4': ipv4, 'ipv6': ipv6})
+ obj.append({"name": name, "ipv4": ipv4, "ipv6": ipv6})
return obj
@@ -226,7 +228,7 @@ def map_config_to_obj(module):
def map_params_to_obj(module):
obj = []
- aggregate = module.params.get('aggregate')
+ aggregate = module.params.get("aggregate")
if aggregate:
for item in aggregate:
for key in item:
@@ -235,12 +237,14 @@ def map_params_to_obj(module):
obj.append(item.copy())
else:
- obj.append({
- 'name': module.params['name'],
- 'ipv4': module.params['ipv4'],
- 'ipv6': module.params['ipv6'],
- 'state': module.params['state']
- })
+ obj.append(
+ {
+ "name": module.params["name"],
+ "ipv4": module.params["ipv4"],
+ "ipv6": module.params["ipv6"],
+ "state": module.params["state"],
+ }
+ )
return obj
@@ -248,52 +252,55 @@ def map_params_to_obj(module):
def main():
""" main entry point for module execution
"""
- element_spec = dict(name=dict(),
- ipv4=dict(),
- ipv6=dict(),
- state=dict(default='present',
- choices=['present', 'absent']))
+ element_spec = dict(
+ name=dict(),
+ ipv4=dict(),
+ ipv6=dict(),
+ state=dict(default="present", choices=["present", "absent"]),
+ )
aggregate_spec = deepcopy(element_spec)
- aggregate_spec['name'] = dict(required=True)
+ aggregate_spec["name"] = dict(required=True)
# remove default in aggregate spec, to handle common arguments
remove_default_spec(aggregate_spec)
- argument_spec = dict(aggregate=dict(type='list',
- elements='dict',
- options=aggregate_spec), )
+ argument_spec = dict(
+ aggregate=dict(type="list", elements="dict", options=aggregate_spec)
+ )
argument_spec.update(element_spec)
argument_spec.update(vyos_argument_spec)
- required_one_of = [['name', 'aggregate']]
- mutually_exclusive = [['name', 'aggregate']]
- module = AnsibleModule(argument_spec=argument_spec,
- required_one_of=required_one_of,
- mutually_exclusive=mutually_exclusive,
- supports_check_mode=True)
+ required_one_of = [["name", "aggregate"]]
+ mutually_exclusive = [["name", "aggregate"]]
+ module = AnsibleModule(
+ argument_spec=argument_spec,
+ required_one_of=required_one_of,
+ mutually_exclusive=mutually_exclusive,
+ supports_check_mode=True,
+ )
warnings = list()
- result = {'changed': False}
+ result = {"changed": False}
if warnings:
- result['warnings'] = warnings
+ result["warnings"] = warnings
want = map_params_to_obj(module)
have = map_config_to_obj(module)
commands = map_obj_to_commands((want, have), module)
- result['commands'] = commands
+ result["commands"] = commands
if commands:
commit = not module.check_mode
load_config(module, commands, commit=commit)
- result['changed'] = True
+ result["changed"] = True
module.exit_json(**result)
-if __name__ == '__main__':
+if __name__ == "__main__":
main()