summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--galaxy.yml2
-rw-r--r--plugins/module_utils/network/vyos/argspec/interfaces/interfaces.py11
-rw-r--r--plugins/module_utils/network/vyos/argspec/l3_interfaces/l3_interfaces.py12
-rw-r--r--plugins/module_utils/network/vyos/argspec/lag_interfaces/lag_interfaces.py12
-rw-r--r--plugins/module_utils/network/vyos/argspec/lldp_global/lldp_global.py11
-rw-r--r--plugins/module_utils/network/vyos/argspec/lldp_interfaces/lldp_interfaces.py11
-rw-r--r--plugins/module_utils/network/vyos/config/firewall_rules/firewall_rules.py25
-rw-r--r--plugins/module_utils/network/vyos/config/interfaces/interfaces.py70
-rw-r--r--plugins/module_utils/network/vyos/config/l3_interfaces/l3_interfaces.py60
-rw-r--r--plugins/module_utils/network/vyos/config/lag_interfaces/lag_interfaces.py72
-rw-r--r--plugins/module_utils/network/vyos/config/lldp_global/lldp_global.py58
-rw-r--r--plugins/module_utils/network/vyos/config/lldp_interfaces/lldp_interfaces.py75
-rw-r--r--plugins/module_utils/network/vyos/config/static_routes/static_routes.py8
-rw-r--r--plugins/module_utils/network/vyos/facts/l3_interfaces/l3_interfaces.py7
-rw-r--r--plugins/module_utils/network/vyos/facts/lag_interfaces/lag_interfaces.py26
-rw-r--r--plugins/modules/vyos_firewall_rules.py164
-rw-r--r--plugins/modules/vyos_interfaces.py264
-rw-r--r--plugins/modules/vyos_l3_interfaces.py215
-rw-r--r--plugins/modules/vyos_lag_interfaces.py230
-rw-r--r--plugins/modules/vyos_lldp_global.py191
-rw-r--r--plugins/modules/vyos_lldp_interfaces.py187
-rw-r--r--plugins/modules/vyos_static_routes.py257
-rw-r--r--test-requirements.txt2
-rw-r--r--tests/integration/network-integration.cfg4
-rw-r--r--tests/integration/targets/vyos_firewall_rules/tests/cli/deleted.yaml4
-rw-r--r--tests/integration/targets/vyos_firewall_rules/tests/cli/deleted_rule.yaml58
-rw-r--r--tests/integration/targets/vyos_firewall_rules/tests/cli/gathered.yaml12
-rw-r--r--tests/integration/targets/vyos_firewall_rules/tests/cli/parsed.yaml47
-rw-r--r--tests/integration/targets/vyos_firewall_rules/tests/cli/rendered.yaml17
-rw-r--r--tests/integration/targets/vyos_firewall_rules/vars/main.yaml74
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/_parsed_config.cfg12
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/empty_config.yaml27
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/gathered.yaml26
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/parsed.yaml16
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/rendered.yaml47
-rw-r--r--tests/integration/targets/vyos_interfaces/vars/main.yaml37
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tests/cli/_parsed_config.cfg9
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tests/cli/empty_config.yaml23
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tests/cli/gathered.yaml34
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tests/cli/parsed.yaml16
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tests/cli/rendered.yaml44
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/vars/main.yaml24
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/_parsed_config.cfg8
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/empty_config.yaml23
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/gathered.yaml26
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/parsed.yaml33
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/rendered.yaml38
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/vars/main.yaml10
-rw-r--r--tests/integration/targets/vyos_lldp_global/tests/cli/_parsed_config.cfg3
-rw-r--r--tests/integration/targets/vyos_lldp_global/tests/cli/empty_config.yaml23
-rw-r--r--tests/integration/targets/vyos_lldp_global/tests/cli/gathered.yaml25
-rw-r--r--tests/integration/targets/vyos_lldp_global/tests/cli/parsed.yaml15
-rw-r--r--tests/integration/targets/vyos_lldp_global/tests/cli/rendered.yaml28
-rw-r--r--tests/integration/targets/vyos_lldp_global/vars/main.yaml12
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/_parsed_config.cfg6
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/empty_config.yaml23
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/gathered.yaml25
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/parsed.yaml16
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/rendered.yaml37
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/vars/main.yaml30
-rw-r--r--tests/integration/targets/vyos_static_routes/tests/cli/deleted.yaml62
-rw-r--r--tests/integration/targets/vyos_static_routes/tests/cli/deleted_nh.yaml68
-rw-r--r--tests/integration/targets/vyos_static_routes/vars/main.yaml26
-rw-r--r--tests/unit/modules/network/vyos/test_vyos_static_route.py8
-rw-r--r--tests/unit/modules/network/vyos/test_vyos_static_routes.py12
65 files changed, 2160 insertions, 898 deletions
diff --git a/galaxy.yml b/galaxy.yml
index d43b0d3..00d7f0e 100644
--- a/galaxy.yml
+++ b/galaxy.yml
@@ -7,5 +7,5 @@ license_file: LICENSE
name: vyos
namespace: vyos
readme: README.rst
-repository: https://github.com/ansible-collections/vyos
+repository: https://github.com/ansible-collections/vyos.vyos
tags: [vyos, networking]
diff --git a/plugins/module_utils/network/vyos/argspec/interfaces/interfaces.py b/plugins/module_utils/network/vyos/argspec/interfaces/interfaces.py
index 3542cb1..fd8b612 100644
--- a/plugins/module_utils/network/vyos/argspec/interfaces/interfaces.py
+++ b/plugins/module_utils/network/vyos/argspec/interfaces/interfaces.py
@@ -61,8 +61,17 @@ class InterfacesArgs(object): # pylint: disable=R0903
},
"type": "list",
},
+ "running_config": {"type": "str"},
"state": {
- "choices": ["merged", "replaced", "overridden", "deleted"],
+ "choices": [
+ "merged",
+ "replaced",
+ "overridden",
+ "deleted",
+ "rendered",
+ "parsed",
+ "gathered",
+ ],
"default": "merged",
"type": "str",
},
diff --git a/plugins/module_utils/network/vyos/argspec/l3_interfaces/l3_interfaces.py b/plugins/module_utils/network/vyos/argspec/l3_interfaces/l3_interfaces.py
index 91434e4..2f1dfe4 100644
--- a/plugins/module_utils/network/vyos/argspec/l3_interfaces/l3_interfaces.py
+++ b/plugins/module_utils/network/vyos/argspec/l3_interfaces/l3_interfaces.py
@@ -25,7 +25,6 @@
The arg spec for the vyos_l3_interfaces module
"""
-
from __future__ import absolute_import, division, print_function
__metaclass__ = type
@@ -73,8 +72,17 @@ class L3_interfacesArgs(object): # pylint: disable=R0903
},
"type": "list",
},
+ "running_config": {"type": "str"},
"state": {
- "choices": ["merged", "replaced", "overridden", "deleted"],
+ "choices": [
+ "merged",
+ "replaced",
+ "overridden",
+ "deleted",
+ "rendered",
+ "gathered",
+ "parsed",
+ ],
"default": "merged",
"type": "str",
},
diff --git a/plugins/module_utils/network/vyos/argspec/lag_interfaces/lag_interfaces.py b/plugins/module_utils/network/vyos/argspec/lag_interfaces/lag_interfaces.py
index 97c5d5a..6cfdabf 100644
--- a/plugins/module_utils/network/vyos/argspec/lag_interfaces/lag_interfaces.py
+++ b/plugins/module_utils/network/vyos/argspec/lag_interfaces/lag_interfaces.py
@@ -19,7 +19,6 @@
# builder template.
#
#############################################
-
"""
The arg spec for the vyos_lag_interfaces module
"""
@@ -72,8 +71,17 @@ class Lag_interfacesArgs(object): # pylint: disable=R0903
},
"type": "list",
},
+ "running_config": {"type": "str"},
"state": {
- "choices": ["merged", "replaced", "overridden", "deleted"],
+ "choices": [
+ "merged",
+ "replaced",
+ "overridden",
+ "deleted",
+ "rendered",
+ "gathered",
+ "parsed",
+ ],
"default": "merged",
"type": "str",
},
diff --git a/plugins/module_utils/network/vyos/argspec/lldp_global/lldp_global.py b/plugins/module_utils/network/vyos/argspec/lldp_global/lldp_global.py
index 84bbc00..6205fd7 100644
--- a/plugins/module_utils/network/vyos/argspec/lldp_global/lldp_global.py
+++ b/plugins/module_utils/network/vyos/argspec/lldp_global/lldp_global.py
@@ -19,7 +19,6 @@
# builder template.
#
#############################################
-
"""
The arg spec for the vyos_lldp_global module
"""
@@ -48,8 +47,16 @@ class Lldp_globalArgs(object): # pylint: disable=R0903
},
"type": "dict",
},
+ "running_config": {"type": "str"},
"state": {
- "choices": ["merged", "replaced", "deleted"],
+ "choices": [
+ "merged",
+ "replaced",
+ "deleted",
+ "rendered",
+ "parsed",
+ "gathered",
+ ],
"default": "merged",
"type": "str",
},
diff --git a/plugins/module_utils/network/vyos/argspec/lldp_interfaces/lldp_interfaces.py b/plugins/module_utils/network/vyos/argspec/lldp_interfaces/lldp_interfaces.py
index 2976fc0..109ea43 100644
--- a/plugins/module_utils/network/vyos/argspec/lldp_interfaces/lldp_interfaces.py
+++ b/plugins/module_utils/network/vyos/argspec/lldp_interfaces/lldp_interfaces.py
@@ -81,8 +81,17 @@ class Lldp_interfacesArgs(object): # pylint: disable=R0903
},
"type": "list",
},
+ "running_config": {"type": "str"},
"state": {
- "choices": ["merged", "replaced", "overridden", "deleted"],
+ "choices": [
+ "merged",
+ "replaced",
+ "overridden",
+ "deleted",
+ "rendered",
+ "gathered",
+ "parsed",
+ ],
"default": "merged",
"type": "str",
},
diff --git a/plugins/module_utils/network/vyos/config/firewall_rules/firewall_rules.py b/plugins/module_utils/network/vyos/config/firewall_rules/firewall_rules.py
index e58593f..5c37741 100644
--- a/plugins/module_utils/network/vyos/config/firewall_rules/firewall_rules.py
+++ b/plugins/module_utils/network/vyos/config/firewall_rules/firewall_rules.py
@@ -235,28 +235,11 @@ class Firewall_rules(ConfigBase):
have, rs["name"], "r_list"
)
if h:
- w_rules = rs.get("rules") or []
- h_rules = h.get("rules") or []
- if w_rules and h_rules:
- for rule in w_rules:
- if self.search_r_sets_in_have(
- h_rules, rule["number"], "rules"
- ):
- commands.append(
- self._add_r_base_attrib(
- w["afi"],
- rs["name"],
- "number",
- rule,
- opr=False,
- )
- )
- else:
- commands.append(
- self._compute_command(
- w["afi"], h["name"], remove=True
- )
+ commands.append(
+ self._compute_command(
+ w["afi"], h["name"], remove=True
)
+ )
elif have:
for h in have:
if h["afi"] == w["afi"]:
diff --git a/plugins/module_utils/network/vyos/config/interfaces/interfaces.py b/plugins/module_utils/network/vyos/config/interfaces/interfaces.py
index deb504c..51bf98e 100644
--- a/plugins/module_utils/network/vyos/config/interfaces/interfaces.py
+++ b/plugins/module_utils/network/vyos/config/interfaces/interfaces.py
@@ -13,7 +13,6 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
-
from copy import deepcopy
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.cfg.base import (
ConfigBase,
@@ -49,14 +48,14 @@ class Interfaces(ConfigBase):
def __init__(self, module):
super(Interfaces, self).__init__(module)
- def get_interfaces_facts(self):
+ def get_interfaces_facts(self, data=None):
""" Get the 'facts' (the current configuration)
:rtype: A dictionary
:returns: The current configuration as a dictionary
"""
facts, _warnings = Facts(self._module).get_facts(
- self.gather_subset, self.gather_network_resources
+ self.gather_subset, self.gather_network_resources, data=data
)
interfaces_facts = facts["ansible_network_resources"].get("interfaces")
if not interfaces_facts:
@@ -72,25 +71,42 @@ class Interfaces(ConfigBase):
commands = list()
warnings = list()
- existing_interfaces_facts = self.get_interfaces_facts()
- commands.extend(self.set_config(existing_interfaces_facts))
- if commands:
- if self._module.check_mode:
- resp = self._connection.edit_config(commands, commit=False)
- else:
- resp = self._connection.edit_config(commands)
- result["changed"] = True
+ if self.state in self.ACTION_STATES:
+ existing_interfaces_facts = self.get_interfaces_facts()
+ else:
+ existing_interfaces_facts = []
- result["commands"] = commands
+ if self.state in self.ACTION_STATES or self.state == "rendered":
+ commands.extend(self.set_config(existing_interfaces_facts))
- if self._module._diff:
- result["diff"] = resp["diff"] if result["changed"] else None
+ if commands and self.state in self.ACTION_STATES:
+ if not self._module.check_mode:
+ self._connection.edit_config(commands)
+ result["changed"] = True
- changed_interfaces_facts = self.get_interfaces_facts()
+ if self.state in self.ACTION_STATES:
+ result["commands"] = commands
+
+ if self.state in self.ACTION_STATES or self.state == "gathered":
+ changed_interfaces_facts = self.get_interfaces_facts()
+ elif self.state == "rendered":
+ result["rendered"] = commands
+ elif self.state == "parsed":
+ running_config = self._module.params["running_config"]
+ if not running_config:
+ self._module.fail_json(
+ msg="value of running_config parameter must not be empty for state parsed"
+ )
+ result["parsed"] = self.get_interfaces_facts(data=running_config)
+ else:
+ changed_interfaces_facts = []
- result["before"] = existing_interfaces_facts
- if result["changed"]:
- result["after"] = changed_interfaces_facts
+ if self.state in self.ACTION_STATES:
+ result["before"] = existing_interfaces_facts
+ if result["changed"]:
+ result["after"] = changed_interfaces_facts
+ elif self.state == "gathered":
+ result["gathered"] = changed_interfaces_facts
result["warnings"] = warnings
return result
@@ -118,19 +134,21 @@ class Interfaces(ConfigBase):
to the desired configuration
"""
commands = []
- state = self._module.params["state"]
- if state in ("merged", "replaced", "overridden") and not want:
+ if (
+ self.state in ("merged", "replaced", "overridden", "rendered")
+ and not want
+ ):
self._module.fail_json(
msg="value of config parameter must not be empty for state {0}".format(
- state
+ self.state
)
)
- if state == "overridden":
+ if self.state == "overridden":
commands.extend(self._state_overridden(want=want, have=have))
- elif state == "deleted":
+ elif self.state == "deleted":
if not want:
for intf in have:
commands.extend(
@@ -146,12 +164,12 @@ class Interfaces(ConfigBase):
obj_in_have = search_obj_in_list(name, have)
if not obj_in_have:
- obj_in_have = {"name": item["name"]}
+ obj_in_have = {"name": name}
- elif state == "merged":
+ if self.state in ("merged", "rendered"):
commands.extend(self._state_merged(item, obj_in_have))
- elif state == "replaced":
+ elif self.state == "replaced":
commands.extend(self._state_replaced(item, obj_in_have))
return commands
diff --git a/plugins/module_utils/network/vyos/config/l3_interfaces/l3_interfaces.py b/plugins/module_utils/network/vyos/config/l3_interfaces/l3_interfaces.py
index a23e417..122cc1e 100644
--- a/plugins/module_utils/network/vyos/config/l3_interfaces/l3_interfaces.py
+++ b/plugins/module_utils/network/vyos/config/l3_interfaces/l3_interfaces.py
@@ -52,14 +52,14 @@ class L3_interfaces(ConfigBase):
def __init__(self, module):
super(L3_interfaces, self).__init__(module)
- def get_l3_interfaces_facts(self):
+ def get_l3_interfaces_facts(self, data=None):
""" Get the 'facts' (the current configuration)
:rtype: A dictionary
:returns: The current configuration as a dictionary
"""
facts, _warnings = Facts(self._module).get_facts(
- self.gather_subset, self.gather_network_resources
+ self.gather_subset, self.gather_network_resources, data=data
)
l3_interfaces_facts = facts["ansible_network_resources"].get(
"l3_interfaces"
@@ -78,25 +78,44 @@ class L3_interfaces(ConfigBase):
warnings = list()
commands = list()
- existing_l3_interfaces_facts = self.get_l3_interfaces_facts()
- commands.extend(self.set_config(existing_l3_interfaces_facts))
- if commands:
- if self._module.check_mode:
- resp = self._connection.edit_config(commands, commit=False)
- else:
- resp = self._connection.edit_config(commands)
- result["changed"] = True
+ if self.state in self.ACTION_STATES:
+ existing_l3_interfaces_facts = self.get_l3_interfaces_facts()
+ else:
+ existing_l3_interfaces_facts = []
- result["commands"] = commands
+ if self.state in self.ACTION_STATES or self.state == "rendered":
+ commands.extend(self.set_config(existing_l3_interfaces_facts))
- if self._module._diff:
- result["diff"] = resp["diff"] if result["changed"] else None
+ if commands and self.state in self.ACTION_STATES:
+ if not self._module.check_mode:
+ self._connection.edit_config(commands)
+ result["changed"] = True
- changed_l3_interfaces_facts = self.get_l3_interfaces_facts()
+ if self.state in self.ACTION_STATES:
+ result["commands"] = commands
+
+ if self.state in self.ACTION_STATES or self.state == "gathered":
+ changed_l3_interfaces_facts = self.get_l3_interfaces_facts()
+ elif self.state == "rendered":
+ result["rendered"] = commands
+ elif self.state == "parsed":
+ running_config = self._module.params["running_config"]
+ if not running_config:
+ self._module.fail_json(
+ msg="value of running_config parameter must not be empty for state parsed"
+ )
+ result["parsed"] = self.get_l3_interfaces_facts(
+ data=running_config
+ )
+ else:
+ changed_l3_interfaces_facts = []
- result["before"] = existing_l3_interfaces_facts
- if result["changed"]:
- result["after"] = changed_l3_interfaces_facts
+ if self.state in self.ACTION_STATES:
+ result["before"] = existing_l3_interfaces_facts
+ if result["changed"]:
+ result["after"] = changed_l3_interfaces_facts
+ elif self.state == "gathered":
+ result["gathered"] = changed_l3_interfaces_facts
result["warnings"] = warnings
return result
@@ -126,7 +145,10 @@ class L3_interfaces(ConfigBase):
commands = []
state = self._module.params["state"]
- if state in ("merged", "replaced", "overridden") and not want:
+ if (
+ state in ("merged", "replaced", "overridden", "rendered")
+ and not want
+ ):
self._module.fail_json(
msg="value of config parameter must not be empty for state {0}".format(
state
@@ -154,7 +176,7 @@ class L3_interfaces(ConfigBase):
if not obj_in_have:
obj_in_have = {"name": item["name"]}
- if state == "merged":
+ if state in ("merged", "rendered"):
commands.extend(self._state_merged(item, obj_in_have))
elif state == "replaced":
diff --git a/plugins/module_utils/network/vyos/config/lag_interfaces/lag_interfaces.py b/plugins/module_utils/network/vyos/config/lag_interfaces/lag_interfaces.py
index 2a9efd9..452670f 100644
--- a/plugins/module_utils/network/vyos/config/lag_interfaces/lag_interfaces.py
+++ b/plugins/module_utils/network/vyos/config/lag_interfaces/lag_interfaces.py
@@ -56,14 +56,14 @@ class Lag_interfaces(ConfigBase):
def __init__(self, module):
super(Lag_interfaces, self).__init__(module)
- def get_lag_interfaces_facts(self):
+ def get_lag_interfaces_facts(self, data=None):
""" Get the 'facts' (the current configuration)
:rtype: A dictionary
:returns: The current configuration as a dictionary
"""
facts, _warnings = Facts(self._module).get_facts(
- self.gather_subset, self.gather_network_resources
+ self.gather_subset, self.gather_network_resources, data=data
)
lag_interfaces_facts = facts["ansible_network_resources"].get(
"lag_interfaces"
@@ -79,27 +79,47 @@ class Lag_interfaces(ConfigBase):
:returns: The result from module execution
"""
result = {"changed": False}
- commands = list()
warnings = list()
- existing_lag_interfaces_facts = self.get_lag_interfaces_facts()
- commands.extend(self.set_config(existing_lag_interfaces_facts))
- if commands:
- if self._module.check_mode:
- resp = self._connection.edit_config(commands, commit=False)
- else:
- resp = self._connection.edit_config(commands)
- result["changed"] = True
+ commands = list()
+
+ if self.state in self.ACTION_STATES:
+ existing_lag_interfaces_facts = self.get_lag_interfaces_facts()
+ else:
+ existing_lag_interfaces_facts = []
- result["commands"] = commands
+ if self.state in self.ACTION_STATES or self.state == "rendered":
+ commands.extend(self.set_config(existing_lag_interfaces_facts))
- if self._module._diff:
- result["diff"] = resp["diff"] if result["changed"] else None
+ if commands and self.state in self.ACTION_STATES:
+ if not self._module.check_mode:
+ self._connection.edit_config(commands)
+ result["changed"] = True
- changed_lag_interfaces_facts = self.get_lag_interfaces_facts()
+ if self.state in self.ACTION_STATES:
+ result["commands"] = commands
+
+ if self.state in self.ACTION_STATES or self.state == "gathered":
+ changed_lag_interfaces_facts = self.get_lag_interfaces_facts()
+ elif self.state == "rendered":
+ result["rendered"] = commands
+ elif self.state == "parsed":
+ running_config = self._module.params["running_config"]
+ if not running_config:
+ self._module.fail_json(
+ msg="value of running_config parameter must not be empty for state parsed"
+ )
+ result["parsed"] = self.get_lag_interfaces_facts(
+ data=running_config
+ )
+ else:
+ changed_lag_interfaces_facts = []
- result["before"] = existing_lag_interfaces_facts
- if result["changed"]:
- result["after"] = changed_lag_interfaces_facts
+ if self.state in self.ACTION_STATES:
+ result["before"] = existing_lag_interfaces_facts
+ if result["changed"]:
+ result["after"] = changed_lag_interfaces_facts
+ elif self.state == "gathered":
+ result["gathered"] = changed_lag_interfaces_facts
result["warnings"] = warnings
return result
@@ -127,16 +147,18 @@ class Lag_interfaces(ConfigBase):
to the desired configuration
"""
commands = []
- state = self._module.params["state"]
- if state in ("merged", "replaced", "overridden") and not want:
+ if (
+ self.state in ("merged", "replaced", "overridden", "rendered")
+ and not want
+ ):
self._module.fail_json(
msg="value of config parameter must not be empty for state {0}".format(
- state
+ self.state
)
)
- if state == "overridden":
+ if self.state == "overridden":
commands.extend(self._state_overridden(want, have))
- elif state == "deleted":
+ elif self.state == "deleted":
if want:
for want_item in want:
name = want_item["name"]
@@ -149,9 +171,9 @@ class Lag_interfaces(ConfigBase):
for want_item in want:
name = want_item["name"]
obj_in_have = search_obj_in_list(name, have)
- if state == "merged":
+ if self.state in ("merged", "rendered"):
commands.extend(self._state_merged(want_item, obj_in_have))
- elif state == "replaced":
+ elif self.state == "replaced":
commands.extend(
self._state_replaced(want_item, obj_in_have)
)
diff --git a/plugins/module_utils/network/vyos/config/lldp_global/lldp_global.py b/plugins/module_utils/network/vyos/config/lldp_global/lldp_global.py
index 010e96d..c70d27f 100644
--- a/plugins/module_utils/network/vyos/config/lldp_global/lldp_global.py
+++ b/plugins/module_utils/network/vyos/config/lldp_global/lldp_global.py
@@ -47,20 +47,20 @@ class Lldp_global(ConfigBase):
def __init__(self, module):
super(Lldp_global, self).__init__(module)
- def get_lldp_global_facts(self):
+ def get_lldp_global_facts(self, data=None):
""" Get the 'facts' (the current configuration)
:rtype: A dictionary
:returns: The current configuration as a dictionary
"""
facts, _warnings = Facts(self._module).get_facts(
- self.gather_subset, self.gather_network_resources
+ self.gather_subset, self.gather_network_resources, data=data
)
lldp_global_facts = facts["ansible_network_resources"].get(
"lldp_global"
)
if not lldp_global_facts:
- return {}
+ return []
return lldp_global_facts
def execute_module(self):
@@ -70,22 +70,45 @@ class Lldp_global(ConfigBase):
:returns: The result from module execution
"""
result = {"changed": False}
- commands = list()
warnings = list()
+ commands = list()
+
+ if self.state in self.ACTION_STATES:
+ existing_lldp_global_facts = self.get_lldp_global_facts()
+ else:
+ existing_lldp_global_facts = []
- existing_lldp_global_facts = self.get_lldp_global_facts()
- commands.extend(self.set_config(existing_lldp_global_facts))
- if commands:
+ if self.state in self.ACTION_STATES or self.state == "rendered":
+ commands.extend(self.set_config(existing_lldp_global_facts))
+
+ if commands and self.state in self.ACTION_STATES:
if not self._module.check_mode:
self._connection.edit_config(commands)
result["changed"] = True
- result["commands"] = commands
- changed_lldp_global_facts = self.get_lldp_global_facts()
+ if self.state in self.ACTION_STATES:
+ result["commands"] = commands
+
+ if self.state in self.ACTION_STATES or self.state == "gathered":
+ changed_lldp_global_facts = self.get_lldp_global_facts()
+ elif self.state == "rendered":
+ result["rendered"] = commands
+ elif self.state == "parsed":
+ running_config = self._module.params["running_config"]
+ if not running_config:
+ self._module.fail_json(
+ msg="value of running_config parameter must not be empty for state parsed"
+ )
+ result["parsed"] = self.get_lldp_global_facts(data=running_config)
+ else:
+ changed_lldp_global_facts = []
- result["before"] = existing_lldp_global_facts
- if result["changed"]:
- result["after"] = changed_lldp_global_facts
+ if self.state in self.ACTION_STATES:
+ result["before"] = existing_lldp_global_facts
+ if result["changed"]:
+ result["after"] = changed_lldp_global_facts
+ elif self.state == "gathered":
+ result["gathered"] = changed_lldp_global_facts
result["warnings"] = warnings
return result
@@ -113,18 +136,17 @@ class Lldp_global(ConfigBase):
to the desired configuration
"""
commands = []
- state = self._module.params["state"]
- if state in ("merged", "replaced") and not want:
+ if self.state in ("merged", "replaced", "rendered") and not want:
self._module.fail_json(
msg="value of config parameter must not be empty for state {0}".format(
- state
+ self.state
)
)
- if state == "deleted":
+ if self.state == "deleted":
commands.extend(self._state_deleted(want=None, have=have))
- elif state == "merged":
+ elif self.state in ("merged", "rendered"):
commands.extend(self._state_merged(want=want, have=have))
- elif state == "replaced":
+ elif self.state == "replaced":
commands.extend(self._state_replaced(want=want, have=have))
return commands
diff --git a/plugins/module_utils/network/vyos/config/lldp_interfaces/lldp_interfaces.py b/plugins/module_utils/network/vyos/config/lldp_interfaces/lldp_interfaces.py
index 377fec9..94e39c3 100644
--- a/plugins/module_utils/network/vyos/config/lldp_interfaces/lldp_interfaces.py
+++ b/plugins/module_utils/network/vyos/config/lldp_interfaces/lldp_interfaces.py
@@ -15,7 +15,6 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
-
from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.cfg.base import (
ConfigBase,
)
@@ -54,14 +53,14 @@ class Lldp_interfaces(ConfigBase):
def __init__(self, module):
super(Lldp_interfaces, self).__init__(module)
- def get_lldp_interfaces_facts(self):
+ def get_lldp_interfaces_facts(self, data=None):
""" Get the 'facts' (the current configuration)
:rtype: A dictionary
:returns: The current configuration as a dictionary
"""
facts, _warnings = Facts(self._module).get_facts(
- self.gather_subset, self.gather_network_resources
+ self.gather_subset, self.gather_network_resources, data=data
)
lldp_interfaces_facts = facts["ansible_network_resources"].get(
"lldp_interfaces"
@@ -77,26 +76,47 @@ class Lldp_interfaces(ConfigBase):
:returns: The result from module execution
"""
result = {"changed": False}
- commands = list()
warnings = list()
- existing_lldp_interfaces_facts = self.get_lldp_interfaces_facts()
- commands.extend(self.set_config(existing_lldp_interfaces_facts))
- if commands:
- if self._module.check_mode:
- resp = self._connection.edit_config(commands, commit=False)
- else:
- resp = self._connection.edit_config(commands)
- result["changed"] = True
+ commands = list()
+
+ if self.state in self.ACTION_STATES:
+ existing_lldp_interfaces_facts = self.get_lldp_interfaces_facts()
+ else:
+ existing_lldp_interfaces_facts = []
- result["commands"] = commands
+ if self.state in self.ACTION_STATES or self.state == "rendered":
+ commands.extend(self.set_config(existing_lldp_interfaces_facts))
- if self._module._diff:
- result["diff"] = resp["diff"] if result["changed"] else None
+ if commands and self.state in self.ACTION_STATES:
+ if not self._module.check_mode:
+ self._connection.edit_config(commands)
+ result["changed"] = True
- changed_lldp_interfaces_facts = self.get_lldp_interfaces_facts()
- result["before"] = existing_lldp_interfaces_facts
- if result["changed"]:
- result["after"] = changed_lldp_interfaces_facts
+ if self.state in self.ACTION_STATES:
+ result["commands"] = commands
+
+ if self.state in self.ACTION_STATES or self.state == "gathered":
+ changed_lldp_interfaces_facts = self.get_lldp_interfaces_facts()
+ elif self.state == "rendered":
+ result["rendered"] = commands
+ elif self.state == "parsed":
+ running_config = self._module.params["running_config"]
+ if not running_config:
+ self._module.fail_json(
+ msg="value of running_config parameter must not be empty for state parsed"
+ )
+ result["parsed"] = self.get_lldp_interfaces_facts(
+ data=running_config
+ )
+ else:
+ changed_lldp_interfaces_facts = []
+
+ if self.state in self.ACTION_STATES:
+ result["before"] = existing_lldp_interfaces_facts
+ if result["changed"]:
+ result["after"] = changed_lldp_interfaces_facts
+ elif self.state == "gathered":
+ result["gathered"] = changed_lldp_interfaces_facts
result["warnings"] = warnings
return result
@@ -124,16 +144,18 @@ class Lldp_interfaces(ConfigBase):
to the desired configuration
"""
commands = []
- state = self._module.params["state"]
- if state in ("merged", "replaced", "overridden") and not want:
+ if (
+ self.state in ("merged", "replaced", "overridden", "rendered")
+ and not want
+ ):
self._module.fail_json(
msg="value of config parameter must not be empty for state {0}".format(
- state
+ self.state
)
)
- if state == "overridden":
+ if self.state == "overridden":
commands.extend(self._state_overridden(want=want, have=have))
- elif state == "deleted":
+ elif self.state == "deleted":
if want:
for item in want:
name = item["name"]
@@ -150,11 +172,11 @@ class Lldp_interfaces(ConfigBase):
for want_item in want:
name = want_item["name"]
have_item = search_obj_in_list(name, have)
- if state == "merged":
+ if self.state in ("merged", "rendered"):
commands.extend(
self._state_merged(want=want_item, have=have_item)
)
- else:
+ if self.state == "replaced":
commands.extend(
self._state_replaced(want=want_item, have=have_item)
)
@@ -243,7 +265,6 @@ class Lldp_interfaces(ConfigBase):
lldp_name = want["name"]
params = Lldp_interfaces.params
- commands.extend(self._add_location(lldp_name, want, have))
for attrib in params:
value = want[attrib]
if value:
diff --git a/plugins/module_utils/network/vyos/config/static_routes/static_routes.py b/plugins/module_utils/network/vyos/config/static_routes/static_routes.py
index e93d4ee..b359dbb 100644
--- a/plugins/module_utils/network/vyos/config/static_routes/static_routes.py
+++ b/plugins/module_utils/network/vyos/config/static_routes/static_routes.py
@@ -160,7 +160,7 @@ class Static_routes(ConfigBase):
routes = self._get_routes(want)
for r in routes:
h_item = self.search_route_in_have(have, r["dest"])
- if self.state == "merged" or self.state == "rendered":
+ if self.state in ("merged", "rendered"):
commands.extend(self._state_merged(want=r, have=h_item))
elif self.state == "replaced":
commands.extend(self._state_replaced(want=r, have=h_item))
@@ -253,12 +253,6 @@ class Static_routes(ConfigBase):
afi=item["afi"], remove=True
)
)
- for r in routes:
- h_route = self.search_route_in_have(have, r["dest"])
- if h_route:
- commands.extend(
- self._render_updates(r, h_route, opr=False)
- )
else:
routes = self._get_routes(have)
if self._is_ip_route_exist(routes):
diff --git a/plugins/module_utils/network/vyos/facts/l3_interfaces/l3_interfaces.py b/plugins/module_utils/network/vyos/facts/l3_interfaces/l3_interfaces.py
index d1d62c2..3b99d34 100644
--- a/plugins/module_utils/network/vyos/facts/l3_interfaces/l3_interfaces.py
+++ b/plugins/module_utils/network/vyos/facts/l3_interfaces/l3_interfaces.py
@@ -10,7 +10,12 @@ for a given resource, parsed, and the facts tree is populated
based on the configuration.
"""
-from __future__ import absolute_import, division, print_function
+from __future__ import (
+ absolute_import,
+ division,
+ print_function,
+ unicode_literals,
+)
__metaclass__ = type
diff --git a/plugins/module_utils/network/vyos/facts/lag_interfaces/lag_interfaces.py b/plugins/module_utils/network/vyos/facts/lag_interfaces/lag_interfaces.py
index 9201e5c..9056294 100644
--- a/plugins/module_utils/network/vyos/facts/lag_interfaces/lag_interfaces.py
+++ b/plugins/module_utils/network/vyos/facts/lag_interfaces/lag_interfaces.py
@@ -12,6 +12,7 @@ based on the configuration.
from __future__ import absolute_import, division, print_function
__metaclass__ = type
+
from re import findall, search, M
from copy import deepcopy
@@ -59,30 +60,21 @@ class Lag_interfacesFacts(object):
lag_regex = r" %s .+$" % lag
cfg = findall(lag_regex, data, M)
obj = self.render_config(cfg)
-
- output = connection.run_commands(
- ["show interfaces bonding " + lag + " slaves"]
- )
- lines = output[0].splitlines()
members = []
member = {}
- if len(lines) > 1:
- for line in lines[2:]:
- splitted_line = line.split()
-
- if len(splitted_line) > 1:
- member["member"] = splitted_line[0]
- members.append(member)
- else:
- members = []
- member = {}
+
+ group_regex = r".*eth.* '%s'" % lag
+ g_cfg = findall(group_regex, data, M)
+ for item in g_cfg:
+ output = search("^set interfaces ethernet (\\S+)", item, M)
+ if output:
+ member["member"] = output.group(1).strip("'")
+ members.append(member)
obj["name"] = lag.strip("'")
if members:
obj["members"] = members
-
if obj:
objs.append(obj)
-
facts = {}
if objs:
facts["lag_interfaces"] = []
diff --git a/plugins/modules/vyos_firewall_rules.py b/plugins/modules/vyos_firewall_rules.py
index a9e676b..9c2e832 100644
--- a/plugins/modules/vyos_firewall_rules.py
+++ b/plugins/modules/vyos_firewall_rules.py
@@ -37,8 +37,9 @@ ANSIBLE_METADATA = {
}
DOCUMENTATION = """module: vyos_firewall_rules
-short_description: Manage firewall rule-set attributes on VyOS devices
+short_description: Firewall rules resource module
description: This module manages firewall rule-set attributes on VyOS devices
+version_added: "1.0.0"
notes:
- Tested against VyOS 1.1.8 (helium).
- This module works with connection C(network_cli). See L(the VyOS OS Platform Options,../network/user_guide/platform_vyos.html).
@@ -397,13 +398,12 @@ options:
type: str
running_config:
description:
- - The module, by default, will connect to the remote device and retrieve the current
- running-config to use as a base for comparing against the contents of source.
- There are times when it is not desirable to have the task get the current running-config
- for every task in a playbook. The I(running_config) argument allows the implementer
- to pass in the configuration to use as the base config for comparison. This
- value of this option should be the output received from device by executing
- command C(show configuration commands | grep 'firewall'
+ - This option is used only with state I(parsed).
+ - The value of this option should be the output received from the VyOS device by executing
+ the command B(show configuration commands | grep firewall).
+ - The state I(parsed) reads the configuration from C(running_config) option and transforms
+ it into Ansible structured data as per the resource module's argspec and the value is then
+ returned in the I(parsed) key within the result.
type: str
state:
description:
@@ -437,7 +437,7 @@ EXAMPLES = """
# set firewall name Downlink rule 502 ipsec 'match-ipsec'
#
- name: Delete attributes of given firewall rules.
- vyos_firewall_rules:
+ vyos.vyos.vyos_firewall_rules:
config:
- afi: ipv4
rule_sets:
@@ -486,12 +486,22 @@ EXAMPLES = """
# set firewall group address-group 'inbound'
-# Using deleted to delete all the the firewall rules when provided config is empty
+# Using deleted to delete firewall rules based on afi
#
# Before state
# -------------
#
# vyos@vyos:~$ show configuration commands| grep firewall
+# set firewall ipv6-name UPLINK default-action 'accept'
+# set firewall ipv6-name UPLINK description 'This is ipv6 specific rule-set'
+# set firewall ipv6-name UPLINK rule 1 action 'accept'
+# set firewall ipv6-name UPLINK rule 1
+# set firewall ipv6-name UPLINK rule 1 description 'Fwipv6-Rule 1 is configured by Ansible'
+# set firewall ipv6-name UPLINK rule 1 ipsec 'match-ipsec'
+# set firewall ipv6-name UPLINK rule 2 action 'accept'
+# set firewall ipv6-name UPLINK rule 2
+# set firewall ipv6-name UPLINK rule 2 description 'Fwipv6-Rule 2 is configured by Ansible'
+# set firewall ipv6-name UPLINK rule 2 ipsec 'match-ipsec'
# set firewall group address-group 'inbound'
# set firewall name Downlink default-action 'accept'
# set firewall name Downlink description 'IPv4 INBOUND rule set'
@@ -501,10 +511,12 @@ EXAMPLES = """
# set firewall name Downlink rule 502 action 'reject'
# set firewall name Downlink rule 502 description 'Rule 502 is configured by Ansible'
# set firewall name Downlink rule 502 ipsec 'match-ipsec'
+
#
- name: Delete attributes of given firewall rules.
- vyos_firewall_rules:
+ vyos.vyos.vyos_firewall_rules:
config:
+ - afi: ipv4
state: deleted
#
#
@@ -514,69 +526,29 @@ EXAMPLES = """
#
# "before": [
# {
-# "afi": "ipv4",
+# "afi": "ipv6",
# "rule_sets": [
# {
# "default_action": "accept",
-# "description": "IPv4 INBOUND rule set",
-# "name": "Downlink",
+# "description": "This is ipv6 specific rule-set",
+# "name": "UPLINK",
# "rules": [
# {
# "action": "accept",
-# "description": "Rule 501 is configured by Ansible",
+# "description": "Fwipv6-Rule 1 is configured by Ansible",
# "ipsec": "match-ipsec",
-# "number": 501
+# "number": 1
# },
# {
-# "action": "reject",
-# "description": "Rule 502 is configured by Ansible",
+# "action": "accept",
+# "description": "Fwipv6-Rule 2 is configured by Ansible",
# "ipsec": "match-ipsec",
-# "number": 502
+# "number": 2
# }
# ]
-# }
+# }
# ]
-# }
-# ]
-# "commands": [
-# "delete firewall name"
-# ]
-#
-# "after": []
-# After state
-# ------------
-# vyos@vyos# run show configuration commands | grep firewall
-# set firewall group address-group 'inbound'
-
-
-# Using deleted to delete the the firewall rules based on afi
-#
-# Before state
-# -------------
-#
-# vyos@vyos:~$ show configuration commands| grep firewall
-# set firewall group address-group 'inbound'
-# set firewall name Downlink default-action 'accept'
-# set firewall name Downlink description 'IPv4 INBOUND rule set'
-# set firewall name Downlink rule 501 action 'accept'
-# set firewall name Downlink rule 501 description 'Rule 501 is configured by Ansible'
-# set firewall name Downlink rule 501 ipsec 'match-ipsec'
-# set firewall name Downlink rule 502 action 'reject'
-# set firewall name Downlink rule 502 description 'Rule 502 is configured by Ansible'
-# set firewall name Downlink rule 502 ipsec 'match-ipsec'
-#
-- name: Delete attributes of given firewall rules.
- vyos_firewall_rules:
- config:
- - afi: ipv4
- state: deleted
-#
-#
-# ------------------------
-# Module Execution Results
-# ------------------------
-#
-# "before": [
+# },
# {
# "afi": "ipv4",
# "rule_sets": [
@@ -603,18 +575,26 @@ EXAMPLES = """
# }
# ]
# "commands": [
-# "delete firewall name",
+# "delete firewall name"
# ]
#
# "after": []
# After state
# ------------
-# vyos@vyos# run show configuration commands | grep firewall
-# set firewall group address-group 'inbound'
-
+# vyos@vyos:~$ show configuration commands| grep firewall
+# set firewall ipv6-name UPLINK default-action 'accept'
+# set firewall ipv6-name UPLINK description 'This is ipv6 specific rule-set'
+# set firewall ipv6-name UPLINK rule 1 action 'accept'
+# set firewall ipv6-name UPLINK rule 1
+# set firewall ipv6-name UPLINK rule 1 description 'Fwipv6-Rule 1 is configured by Ansible'
+# set firewall ipv6-name UPLINK rule 1 ipsec 'match-ipsec'
+# set firewall ipv6-name UPLINK rule 2 action 'accept'
+# set firewall ipv6-name UPLINK rule 2
+# set firewall ipv6-name UPLINK rule 2 description 'Fwipv6-Rule 2 is configured by Ansible'
+# set firewall ipv6-name UPLINK rule 2 ipsec 'match-ipsec'
-# Using deleted to delete the the firewall rules based on rule number/id
+# Using deleted to delete all the the firewall rules when provided config is empty
#
# Before state
# -------------
@@ -631,13 +611,8 @@ EXAMPLES = """
# set firewall name Downlink rule 502 ipsec 'match-ipsec'
#
- name: Delete attributes of given firewall rules.
- vyos_firewall_rules:
+ vyos.vyos.vyos_firewall_rules:
config:
- - afi: ipv4
- rule_sets:
- - name: 'Downlink'
- rules:
- - number: 501
state: deleted
#
#
@@ -672,38 +647,14 @@ EXAMPLES = """
# }
# ]
# "commands": [
-# "delete firewall ipv6-name Downlink rule 501"
+# "delete firewall name"
# ]
#
-# "after": [
-# {
-# "afi": "ipv4",
-# "rule_sets": [
-# {
-# "default_action": "accept",
-# "description": "IPv4 INBOUND rule set",
-# "name": "Downlink",
-# "rules": [
-# {
-# "action": "reject",
-# "description": "Rule 502 is configured by Ansible",
-# "ipsec": "match-ipsec",
-# "number": 502
-# }
-# ]
-# }
-# ]
-# }
-# ]
+# "after": []
# After state
# ------------
-# vyos@vyos:~$ show configuration commands| grep firewall
+# vyos@vyos# run show configuration commands | grep firewall
# set firewall group address-group 'inbound'
-# set firewall name Downlink default-action 'accept'
-# set firewall name Downlink description 'IPv4 INBOUND rule set'
-# set firewall name Downlink rule 502 action 'reject'
-# set firewall name Downlink rule 502 description 'Rule 502 is configured by Ansible'
-# set firewall name Downlink rule 502 ipsec 'match-ipsec'
# Using merged
@@ -715,7 +666,7 @@ EXAMPLES = """
# set firewall group address-group 'inbound'
#
- name: Merge the provided configuration with the exisiting running configuration
- vyos_firewall_rules:
+ vyos.vyos.vyos_firewall_rules:
config:
- afi: 'ipv6'
rule_sets:
@@ -934,7 +885,7 @@ EXAMPLES = """
# set firewall name INBOUND rule 103 state related 'enable'
#
- name: Replace device configurations of listed firewall rules with provided configurations
- vyos_firewall_rules:
+ vyos.vyos.vyos_firewall_rules:
config:
- afi: 'ipv6'
rule_sets:
@@ -1116,7 +1067,7 @@ EXAMPLES = """
# set firewall name INBOUND rule 104 ipsec 'match-none'
#
- name: Overrides all device configuration with provided configuration
- vyos_firewall_rules:
+ vyos.vyos.vyos_firewall_rules:
config:
- afi: 'ipv4'
rule_sets:
@@ -1267,7 +1218,7 @@ EXAMPLES = """
# set firewall name INBOUND rule 103 state related 'enable'
#
- name: Gather listed firewall rules with provided configurations
- vyos_firewall_rules:
+ vyos.vyos.vyos_firewall_rules:
config:
state: gathered
#
@@ -1382,7 +1333,7 @@ EXAMPLES = """
#
#
- name: Render the commands for provided configuration
- vyos_firewall_rules:
+ vyos.vyos.vyos_firewall_rules:
config:
- afi: 'ipv6'
rule_sets:
@@ -1452,8 +1403,8 @@ EXAMPLES = """
# Using parsed
#
#
-- name: Render the commands for provided configuration
- vyos_firewall_rules:
+- name: Parsed the provided input commands.
+ vyos.vyos.vyos_firewall_rules:
running_config:
"set firewall group address-group 'inbound'
set firewall name Downlink default-action 'accept'
@@ -1546,6 +1497,7 @@ def main():
required_if = [
("state", "merged", ("config",)),
("state", "replaced", ("config",)),
+ ("state", "rendered", ("config",)),
("state", "overridden", ("config",)),
("state", "parsed", ("running_config",)),
]
diff --git a/plugins/modules/vyos_interfaces.py b/plugins/modules/vyos_interfaces.py
index 93df4e4..6730e30 100644
--- a/plugins/modules/vyos_interfaces.py
+++ b/plugins/modules/vyos_interfaces.py
@@ -30,14 +30,10 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
-ANSIBLE_METADATA = {
- "metadata_version": "1.1",
- "status": ["preview"],
- "supported_by": "network",
-}
+ANSIBLE_METADATA = {"metadata_version": "1.1", "supported_by": "Ansible"}
DOCUMENTATION = """module: vyos_interfaces
-short_description: Manages interface attributes of VyOS network devices.
+short_description: Interfaces resource module
description:
- This module manages the interface attributes on VyOS network devices.
- This module supports managing base attributes of Ethernet, Bonding, VXLAN, Loopback
@@ -45,7 +41,10 @@ description:
notes:
- Tested against VyOS 1.1.8 (helium).
- This module works with connection C(network_cli). See L(the VyOS OS Platform Options,../network/user_guide/platform_vyos.html).
-author: Nilashish Chakraborty (@nilashishc)
+version_added: "1.0.0"
+author:
+- Nilashish Chakraborty (@nilashishc)
+- Rohit Thakur (@rohitthakur2590)
options:
config:
description: The provided interfaces configuration.
@@ -119,6 +118,15 @@ options:
- MTU for the virtual sub-interface.
- Refer to vendor documentation for valid values.
type: int
+ running_config:
+ description:
+ - This option is used only with state I(parsed).
+ - The value of this option should be the output received from the VyOS device by executing
+ the command B(show configuration commands | grep interfaces).
+ - The state I(parsed) reads the configuration from C(running_config) option and transforms
+ it into Ansible structured data as per the resource module's argspec and the value is then
+ returned in the I(parsed) key within the result.
+ type: str
state:
description:
- The state of the configuration after module completion.
@@ -128,6 +136,9 @@ options:
- replaced
- overridden
- deleted
+ - rendered
+ - gathered
+ - parsed
default: merged
"""
EXAMPLES = """
@@ -152,7 +163,7 @@ EXAMPLES = """
# set interfaces loopback lo
- name: Merge provided configuration with device configuration
- vyos_interfaces:
+ vyos.vyos.vyos_interfaces:
config:
- name: eth2
description: 'Configured by Ansible'
@@ -330,7 +341,7 @@ EXAMPLES = """
#
#
- name: Replace device configurations of listed interfaces with provided configurations
- vyos_interfaces:
+ vyos.vyos.vyos_interfaces:
config:
- name: eth2
description: "Replaced by Ansible"
@@ -515,7 +526,7 @@ EXAMPLES = """
#
#
- name: Overrides all device configuration with provided configuration
- vyos_interfaces:
+ vyos.vyos.vyos_interfaces:
config:
- name: eth0
description: Outbound Interface For The Appliance
@@ -700,7 +711,7 @@ EXAMPLES = """
#
#
- name: Delete attributes of given interfaces (Note - This won't delete the interfaces themselves)
- vyos_interfaces:
+ vyos.vyos.vyos_interfaces:
config:
- name: bond1
@@ -838,6 +849,224 @@ EXAMPLES = """
# set interfaces loopback lo
#
#
+
+
+# Using gathered
+#
+# Before state:
+# -------------
+#
+# vyos@192# run show configuration commands | grep interfaces
+# set interfaces ethernet eth0 address 'dhcp'
+# set interfaces ethernet eth0 duplex 'auto'
+# set interfaces ethernet eth0 hw-id '08:00:27:50:5e:19'
+# set interfaces ethernet eth0 smp_affinity 'auto'
+# set interfaces ethernet eth0 speed 'auto'
+# set interfaces ethernet eth1 description 'Configured by Ansible'
+# set interfaces ethernet eth1 duplex 'auto'
+# set interfaces ethernet eth1 mtu '1500'
+# set interfaces ethernet eth1 speed 'auto'
+# set interfaces ethernet eth1 vif 200 description 'VIF - 200'
+# set interfaces ethernet eth2 description 'Configured by Ansible'
+# set interfaces ethernet eth2 duplex 'auto'
+# set interfaces ethernet eth2 mtu '1500'
+# set interfaces ethernet eth2 speed 'auto'
+# set interfaces ethernet eth2 vif 200 description 'VIF - 200'
+#
+- name: Gather listed interfaces with provided configurations
+ vyos.vyos.vyos_interfaces:
+ config:
+ state: gathered
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+# "gathered": [
+# {
+# "description": "Configured by Ansible",
+# "duplex": "auto",
+# "enabled": true,
+# "mtu": 1500,
+# "name": "eth2",
+# "speed": "auto",
+# "vifs": [
+# {
+# "description": "VIF - 200",
+# "enabled": true,
+# "vlan_id": 200
+# }
+# ]
+# },
+# {
+# "description": "Configured by Ansible",
+# "duplex": "auto",
+# "enabled": true,
+# "mtu": 1500,
+# "name": "eth1",
+# "speed": "auto",
+# "vifs": [
+# {
+# "description": "VIF - 200",
+# "enabled": true,
+# "vlan_id": 200
+# }
+# ]
+# },
+# {
+# "duplex": "auto",
+# "enabled": true,
+# "name": "eth0",
+# "speed": "auto"
+# }
+# ]
+#
+#
+# After state:
+# -------------
+#
+# vyos@192# run show configuration commands | grep interfaces
+# set interfaces ethernet eth0 address 'dhcp'
+# set interfaces ethernet eth0 duplex 'auto'
+# set interfaces ethernet eth0 hw-id '08:00:27:50:5e:19'
+# set interfaces ethernet eth0 smp_affinity 'auto'
+# set interfaces ethernet eth0 speed 'auto'
+# set interfaces ethernet eth1 description 'Configured by Ansible'
+# set interfaces ethernet eth1 duplex 'auto'
+# set interfaces ethernet eth1 mtu '1500'
+# set interfaces ethernet eth1 speed 'auto'
+# set interfaces ethernet eth1 vif 200 description 'VIF - 200'
+# set interfaces ethernet eth2 description 'Configured by Ansible'
+# set interfaces ethernet eth2 duplex 'auto'
+# set interfaces ethernet eth2 mtu '1500'
+# set interfaces ethernet eth2 speed 'auto'
+# set interfaces ethernet eth2 vif 200 description 'VIF - 200'
+
+
+# Using rendered
+#
+#
+- name: Render the commands for provided configuration
+ vyos.vyos.vyos_interfaces:
+ config:
+ - name: eth0
+ enabled: true
+ duplex: auto
+ speed: auto
+ - name: eth1
+ description: Configured by Ansible - Interface 1
+ mtu: 1500
+ speed: auto
+ duplex: auto
+ enabled: true
+ vifs:
+ - vlan_id: 100
+ description: Eth1 - VIF 100
+ mtu: 400
+ enabled: true
+ - vlan_id: 101
+ description: Eth1 - VIF 101
+ enabled: true
+ - name: eth2
+ description: Configured by Ansible - Interface 2 (ADMIN DOWN)
+ mtu: 600
+ enabled: false
+ state: rendered
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+#
+# "rendered": [
+# "set interfaces ethernet eth0 duplex 'auto'",
+# "set interfaces ethernet eth0 speed 'auto'",
+# "delete interfaces ethernet eth0 disable",
+# "set interfaces ethernet eth1 duplex 'auto'",
+# "delete interfaces ethernet eth1 disable",
+# "set interfaces ethernet eth1 speed 'auto'",
+# "set interfaces ethernet eth1 description 'Configured by Ansible - Interface 1'",
+# "set interfaces ethernet eth1 mtu '1500'",
+# "set interfaces ethernet eth1 vif 100 description 'Eth1 - VIF 100'",
+# "set interfaces ethernet eth1 vif 100 mtu '400'",
+# "set interfaces ethernet eth1 vif 101 description 'Eth1 - VIF 101'",
+# "set interfaces ethernet eth2 disable",
+# "set interfaces ethernet eth2 description 'Configured by Ansible - Interface 2 (ADMIN DOWN)'",
+# "set interfaces ethernet eth2 mtu '600'"
+# ]
+
+
+# Using parsed
+#
+#
+- name: Parse the configuration.
+ vyos.vyos.vyos_interfaces:
+ running_config:
+ "set interfaces ethernet eth0 address 'dhcp'
+ set interfaces ethernet eth0 duplex 'auto'
+ set interfaces ethernet eth0 hw-id '08:00:27:50:5e:19'
+ set interfaces ethernet eth0 smp_affinity 'auto'
+ set interfaces ethernet eth0 speed 'auto'
+ set interfaces ethernet eth1 description 'Configured by Ansible'
+ set interfaces ethernet eth1 duplex 'auto'
+ set interfaces ethernet eth1 mtu '1500'
+ set interfaces ethernet eth1 speed 'auto'
+ set interfaces ethernet eth1 vif 200 description 'VIF - 200'
+ set interfaces ethernet eth2 description 'Configured by Ansible'
+ set interfaces ethernet eth2 duplex 'auto'
+ set interfaces ethernet eth2 mtu '1500'
+ set interfaces ethernet eth2 speed 'auto'
+ set interfaces ethernet eth2 vif 200 description 'VIF - 200'"
+ state: parsed
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+#
+# "parsed": [
+# {
+# "description": "Configured by Ansible",
+# "duplex": "auto",
+# "enabled": true,
+# "mtu": 1500,
+# "name": "eth2",
+# "speed": "auto",
+# "vifs": [
+# {
+# "description": "VIF - 200",
+# "enabled": true,
+# "vlan_id": 200
+# }
+# ]
+# },
+# {
+# "description": "Configured by Ansible",
+# "duplex": "auto",
+# "enabled": true,
+# "mtu": 1500,
+# "name": "eth1",
+# "speed": "auto",
+# "vifs": [
+# {
+# "description": "VIF - 200",
+# "enabled": true,
+# "vlan_id": 200
+# }
+# ]
+# },
+# {
+# "duplex": "auto",
+# "enabled": true,
+# "name": "eth0",
+# "speed": "auto"
+# }
+# ]
+
+
"""
RETURN = """
before:
@@ -879,8 +1108,19 @@ def main():
:returns: the result form module invocation
"""
+ required_if = [
+ ("state", "merged", ("config",)),
+ ("state", "replaced", ("config",)),
+ ("state", "rendered", ("config",)),
+ ("state", "overridden", ("config",)),
+ ("state", "parsed", ("running_config",)),
+ ]
+ mutually_exclusive = [("config", "running_config")]
module = AnsibleModule(
- argument_spec=InterfacesArgs.argument_spec, supports_check_mode=True
+ argument_spec=InterfacesArgs.argument_spec,
+ required_if=required_if,
+ supports_check_mode=True,
+ mutually_exclusive=mutually_exclusive,
)
result = Interfaces(module).execute_module()
diff --git a/plugins/modules/vyos_l3_interfaces.py b/plugins/modules/vyos_l3_interfaces.py
index a77ecaf..4724240 100644
--- a/plugins/modules/vyos_l3_interfaces.py
+++ b/plugins/modules/vyos_l3_interfaces.py
@@ -37,12 +37,14 @@ ANSIBLE_METADATA = {
}
DOCUMENTATION = """module: vyos_l3_interfaces
-short_description: Manages L3 interface attributes of VyOS network devices.
+short_description: L3 interfaces resource module
description: This module manages the L3 interface attributes on VyOS network devices.
notes:
- Tested against VyOS 1.1.8 (helium).
- This module works with connection C(network_cli). See L(the VyOS OS Platform Options,../network/user_guide/platform_vyos.html).
-author: Nilashish Chakraborty (@NilashishC)
+author:
+- Nilashish Chakraborty (@NilashishC)
+- Rohit Thakur (@rohitthakur2590)
options:
config:
description: The provided L3 interfaces configuration.
@@ -104,6 +106,16 @@ options:
description:
- IPv6 address of the virtual interface.
type: str
+ running_config:
+ description:
+ - This option is used only with state I(parsed).
+ - The value of this option should be the output received from the VyOS device by executing
+ the command B(show configuration commands | grep -e eth[2,3]).
+ - The state I(parsed) reads the configuration from C(running_config) option and transforms
+ it into Ansible structured data as per the resource module's argspec and the value is then
+ returned in the I(parsed) key within the result.
+ type: str
+ version_added: "1.0.0"
state:
description:
- The state of the configuration after module completion.
@@ -113,6 +125,9 @@ options:
- replaced
- overridden
- deleted
+ - parsed
+ - gathered
+ - rendered
default: merged
"""
EXAMPLES = """
@@ -128,7 +143,7 @@ EXAMPLES = """
# set interfaces ethernet eth3 vif 102
- name: Merge provided configuration with device configuration
- vyos_l3_interfaces:
+ vyos.vyos.vyos_l3_interfaces:
config:
- name: eth2
ipv4:
@@ -196,7 +211,7 @@ EXAMPLES = """
# set interfaces ethernet eth3 vif 102 address '2001:db8:4000::2/34'
#
- name: Replace device configurations of listed interfaces with provided configurations
- vyos_l3_interfaces:
+ vyos.vyos.vyos_l3_interfaces:
config:
- name: eth2
ipv4:
@@ -252,7 +267,7 @@ EXAMPLES = """
# set interfaces ethernet eth3 vif 102 address '2001:db8:4000::2/34'
- name: Overrides all device configuration with provided configuration
- vyos_l3_interfaces:
+ vyos.vyos.vyos_l3_interfaces:
config:
- name: eth0
ipv4:
@@ -303,7 +318,7 @@ EXAMPLES = """
# set interfaces ethernet eth3 vif 102 address '2001:db8:4000::2/34'
- name: Delete L3 attributes of given interfaces (Note - This won't delete the interface itself)
- vyos_l3_interfaces:
+ vyos.vyos.vyos_l3_interfaces:
config:
- name: eth1
- name: eth2
@@ -326,6 +341,180 @@ EXAMPLES = """
# set interfaces ethernet eth3 smp_affinity 'auto'
+# Using gathered
+#
+# Before state:
+# -------------
+#
+# vyos:~$ show configuration commands | grep -e eth[2,3,0]
+# set interfaces ethernet eth0 address 'dhcp'
+# set interfaces ethernet eth0 duplex 'auto'
+# set interfaces ethernet eth0 hw-id '08:00:27:50:5e:19'
+# set interfaces ethernet eth0 smp_affinity 'auto'
+# set interfaces ethernet eth0 speed 'auto'
+# set interfaces ethernet eth1 address '192.0.2.14/24'
+# set interfaces ethernet eth2 address '192.0.2.11/24'
+# set interfaces ethernet eth2 address '192.0.2.10/24'
+# set interfaces ethernet eth2 address '2001:db8::10/32'
+# set interfaces ethernet eth2 address '2001:db8::12/32'
+#
+- name: Gather listed l3 interfaces with provided configurations
+ vyos.vyos.vyos_l3_interfaces:
+ config:
+ state: gathered
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+# "gathered": [
+# {
+# "ipv4": [
+# {
+# "address": "192.0.2.11/24"
+# },
+# {
+# "address": "192.0.2.10/24"
+# }
+# ],
+# "ipv6": [
+# {
+# "address": "2001:db8::10/32"
+# },
+# {
+# "address": "2001:db8::12/32"
+# }
+# ],
+# "name": "eth2"
+# },
+# {
+# "ipv4": [
+# {
+# "address": "192.0.2.14/24"
+# }
+# ],
+# "name": "eth1"
+# },
+# {
+# "ipv4": [
+# {
+# "address": "dhcp"
+# }
+# ],
+# "name": "eth0"
+# }
+# ]
+#
+#
+# After state:
+# -------------
+#
+# vyos:~$ show configuration commands | grep -e eth[2,3]
+# set interfaces ethernet eth0 address 'dhcp'
+# set interfaces ethernet eth0 duplex 'auto'
+# set interfaces ethernet eth0 hw-id '08:00:27:50:5e:19'
+# set interfaces ethernet eth0 smp_affinity 'auto'
+# set interfaces ethernet eth0 speed 'auto'
+# set interfaces ethernet eth1 address '192.0.2.14/24'
+# set interfaces ethernet eth2 address '192.0.2.11/24'
+# set interfaces ethernet eth2 address '192.0.2.10/24'
+# set interfaces ethernet eth2 address '2001:db8::10/32'
+# set interfaces ethernet eth2 address '2001:db8::12/32'
+
+
+# Using rendered
+#
+#
+- name: Render the commands for provided configuration
+ vyos.vyos.vyos_l3_interfaces:
+ config:
+ - name: eth1
+ ipv4:
+ - address: 192.0.2.14/24
+ - name: eth2
+ ipv4:
+ - address: 192.0.2.10/24
+ - address: 192.0.2.11/24
+ ipv6:
+ - address: 2001:db8::10/32
+ - address: 2001:db8::12/32
+ state: rendered
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+#
+# "rendered": [
+# "set interfaces ethernet eth1 address '192.0.2.14/24'",
+# "set interfaces ethernet eth2 address '192.0.2.11/24'",
+# "set interfaces ethernet eth2 address '192.0.2.10/24'",
+# "set interfaces ethernet eth2 address '2001:db8::10/32'",
+# "set interfaces ethernet eth2 address '2001:db8::12/32'"
+# ]
+
+
+# Using parsed
+#
+#
+- name: parse the provided running configuration
+ vyos.vyos.vyos_l3_interfaces:
+ running_config:
+ "set interfaces ethernet eth0 address 'dhcp'
+ set interfaces ethernet eth1 address '192.0.2.14/24'
+ set interfaces ethernet eth2 address '192.0.2.10/24'
+ set interfaces ethernet eth2 address '192.0.2.11/24'
+ set interfaces ethernet eth2 address '2001:db8::10/32'
+ set interfaces ethernet eth2 address '2001:db8::12/32'"
+ state: parsed
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+#
+# "parsed": [
+# {
+# "ipv4": [
+# {
+# "address": "192.0.2.10/24"
+# },
+# {
+# "address": "192.0.2.11/24"
+# }
+# ],
+# "ipv6": [
+# {
+# "address": "2001:db8::10/32"
+# },
+# {
+# "address": "2001:db8::12/32"
+# }
+# ],
+# "name": "eth2"
+# },
+# {
+# "ipv4": [
+# {
+# "address": "192.0.2.14/24"
+# }
+# ],
+# "name": "eth1"
+# },
+# {
+# "ipv4": [
+# {
+# "address": "dhcp"
+# }
+# ],
+# "name": "eth0"
+# }
+# ]
+
+
"""
RETURN = """
before:
@@ -365,8 +554,20 @@ def main():
:returns: the result form module invocation
"""
+ required_if = [
+ ("state", "merged", ("config",)),
+ ("state", "replaced", ("config",)),
+ ("state", "rendered", ("config",)),
+ ("state", "overridden", ("config",)),
+ ("state", "parsed", ("running_config",)),
+ ]
+ mutually_exclusive = [("config", "running_config")]
+
module = AnsibleModule(
- argument_spec=L3_interfacesArgs.argument_spec, supports_check_mode=True
+ argument_spec=L3_interfacesArgs.argument_spec,
+ required_if=required_if,
+ supports_check_mode=True,
+ mutually_exclusive=mutually_exclusive,
)
result = L3_interfaces(module).execute_module()
diff --git a/plugins/modules/vyos_lag_interfaces.py b/plugins/modules/vyos_lag_interfaces.py
index 84f3d01..1ba511c 100644
--- a/plugins/modules/vyos_lag_interfaces.py
+++ b/plugins/modules/vyos_lag_interfaces.py
@@ -30,16 +30,13 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
-ANSIBLE_METADATA = {
- "metadata_version": "1.1",
- "status": ["preview"],
- "supported_by": "network",
-}
+ANSIBLE_METADATA = {"metadata_version": "1.1", "supported_by": "Ansible"}
DOCUMENTATION = """module: vyos_lag_interfaces
-short_description: Manages attributes of link aggregation groups on VyOS network devices.
+short_description: LAG interfaces resource module
description: This module manages attributes of link aggregation groups on VyOS network
devices.
+version_added: "1.0.0"
notes:
- Tested against VyOS 1.1.8 (helium).
- This module works with connection C(network_cli). See L(the VyOS OS Platform Options,../network/user_guide/platform_vyos.html).
@@ -100,6 +97,15 @@ options:
description:
- IP address to use for ARP monitoring.
type: list
+ running_config:
+ description:
+ - This option is used only with state I(parsed).
+ - The value of this option should be the output received from the VyOS device by executing
+ the command B(show configuration commands | grep bond).
+ - The state I(parsed) reads the configuration from C(running_config) option and transforms
+ it into Ansible structured data as per the resource module's argspec and the value is then
+ returned in the I(parsed) key within the result.
+ type: str
state:
description:
- The state of the configuration after module completion.
@@ -109,6 +115,9 @@ options:
- replaced
- overridden
- deleted
+ - parsed
+ - gathered
+ - rendered
default: merged
"""
EXAMPLES = """
@@ -122,7 +131,7 @@ EXAMPLES = """
# set interfaces bonding bond3
#
- name: Merge provided configuration with device configuration
- vyos_lag_interfaces:
+ vyos.vyos.vyos_lag_interfaces:
config:
- name: bond2
mode: active-backup
@@ -226,7 +235,7 @@ EXAMPLES = """
# set interfaces ethernet eth3 bond-group 'bond3'
#
- name: Replace device configurations of listed LAGs with provided configurations
- vyos_lag_interfaces:
+ vyos.vyos.vyos_lag_interfaces:
config:
- name: bond3
mode: '802.3ad'
@@ -331,7 +340,7 @@ EXAMPLES = """
# set interfaces ethernet eth3 bond-group 'bond3'
#
- name: Overrides all device configuration with provided configuration
- vyos_lag_interfaces:
+ vyos.vyos.vyos_lag_interfaces:
config:
- name: bond3
mode: active-backup
@@ -441,7 +450,7 @@ EXAMPLES = """
# set interfaces ethernet eth3 bond-group 'bond3'
#
- name: Delete LAG attributes of given interfaces (Note This won't delete the interface itself)
- vyos_lag_interfaces:
+ vyos.vyos.vyos_lag_interfaces:
config:
- name: bond2
- name: bond3
@@ -507,6 +516,202 @@ EXAMPLES = """
# set interfaces bonding bond3
+# Using gathered
+#
+# Before state:
+# -------------
+#
+# vyos@192# run show configuration commands | grep bond
+# set interfaces bonding bond0 hash-policy 'layer2'
+# set interfaces bonding bond0 mode 'active-backup'
+# set interfaces bonding bond0 primary 'eth1'
+# set interfaces bonding bond1 hash-policy 'layer2+3'
+# set interfaces bonding bond1 mode 'active-backup'
+# set interfaces bonding bond1 primary 'eth2'
+# set interfaces ethernet eth1 bond-group 'bond0'
+# set interfaces ethernet eth2 bond-group 'bond1'
+#
+- name: Gather listed lag interfaces with provided configurations
+ vyos.vyos.vyos_lag_interfaces:
+ config:
+ state: gathered
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+# "gathered": [
+# {
+# "afi": "ipv6",
+# "rule_sets": [
+# {
+# "default_action": "accept",
+# "description": "This is ipv6 specific rule-set",
+# "name": "UPLINK",
+# "rules": [
+# {
+# "action": "accept",
+# "description": "Fwipv6-Rule 1 is configured by Ansible",
+# "ipsec": "match-ipsec",
+# "number": 1
+# },
+# {
+# "action": "accept",
+# "description": "Fwipv6-Rule 2 is configured by Ansible",
+# "ipsec": "match-ipsec",
+# "number": 2
+# }
+# ]
+# }
+# ]
+# },
+# {
+# "afi": "ipv4",
+# "rule_sets": [
+# {
+# "default_action": "accept",
+# "description": "IPv4 INBOUND rule set",
+# "name": "INBOUND",
+# "rules": [
+# {
+# "action": "accept",
+# "description": "Rule 101 is configured by Ansible",
+# "ipsec": "match-ipsec",
+# "number": 101
+# },
+# {
+# "action": "reject",
+# "description": "Rule 102 is configured by Ansible",
+# "ipsec": "match-ipsec",
+# "number": 102
+# },
+# {
+# "action": "accept",
+# "description": "Rule 103 is configured by Ansible",
+# "destination": {
+# "group": {
+# "address_group": "inbound"
+# }
+# },
+# "number": 103,
+# "source": {
+# "address": "192.0.2.0"
+# },
+# "state": {
+# "established": true,
+# "invalid": false,
+# "new": false,
+# "related": true
+# }
+# }
+# ]
+# }
+# ]
+# }
+# ]
+#
+#
+# After state:
+# -------------
+#
+# vyos@192# run show configuration commands | grep bond
+# set interfaces bonding bond0 hash-policy 'layer2'
+# set interfaces bonding bond0 mode 'active-backup'
+# set interfaces bonding bond0 primary 'eth1'
+# set interfaces bonding bond1 hash-policy 'layer2+3'
+# set interfaces bonding bond1 mode 'active-backup'
+# set interfaces bonding bond1 primary 'eth2'
+# set interfaces ethernet eth1 bond-group 'bond0'
+# set interfaces ethernet eth2 bond-group 'bond1'
+
+
+# Using rendered
+#
+#
+- name: Render the commands for provided configuration
+ vyos.vyos.vyos_lag_interfaces:
+ config:
+ - name: bond0
+ hash_policy: layer2
+ members:
+ - member: eth1
+ mode: active-backup
+ primary: eth1
+ - name: bond1
+ hash_policy: layer2+3
+ members:
+ - member: eth2
+ mode: active-backup
+ primary: eth2
+ state: rendered
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+#
+# "rendered": [
+# "set interfaces bonding bond0 hash-policy 'layer2'",
+# "set interfaces ethernet eth1 bond-group 'bond0'",
+# "set interfaces bonding bond0 mode 'active-backup'",
+# "set interfaces bonding bond0 primary 'eth1'",
+# "set interfaces bonding bond1 hash-policy 'layer2+3'",
+# "set interfaces ethernet eth2 bond-group 'bond1'",
+# "set interfaces bonding bond1 mode 'active-backup'",
+# "set interfaces bonding bond1 primary 'eth2'"
+# ]
+
+
+# Using parsed
+#
+#
+- name: Parsed the commands for provided configuration
+ vyos.vyos.vyos_l3_interfaces:
+ running_config:
+ "set interfaces bonding bond0 hash-policy 'layer2'
+ set interfaces bonding bond0 mode 'active-backup'
+ set interfaces bonding bond0 primary 'eth1'
+ set interfaces bonding bond1 hash-policy 'layer2+3'
+ set interfaces bonding bond1 mode 'active-backup'
+ set interfaces bonding bond1 primary 'eth2'
+ set interfaces ethernet eth1 bond-group 'bond0'
+ set interfaces ethernet eth2 bond-group 'bond1'"
+ state: parsed
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+#
+# "parsed": [
+# {
+# "hash_policy": "layer2",
+# "members": [
+# {
+# "member": "eth1"
+# }
+# ],
+# "mode": "active-backup",
+# "name": "bond0",
+# "primary": "eth1"
+# },
+# {
+# "hash_policy": "layer2+3",
+# "members": [
+# {
+# "member": "eth2"
+# }
+# ],
+# "mode": "active-backup",
+# "name": "bond1",
+# "primary": "eth2"
+# }
+# ]
+
+
"""
RETURN = """
before:
@@ -551,12 +756,17 @@ def main():
required_if = [
("state", "merged", ("config",)),
("state", "replaced", ("config",)),
+ ("state", "rendered", ("config",)),
("state", "overridden", ("config",)),
+ ("state", "parsed", ("running_config",)),
]
+ mutually_exclusive = [("config", "running_config")]
+
module = AnsibleModule(
argument_spec=Lag_interfacesArgs.argument_spec,
required_if=required_if,
supports_check_mode=True,
+ mutually_exclusive=mutually_exclusive,
)
result = Lag_interfaces(module).execute_module()
diff --git a/plugins/modules/vyos_lldp_global.py b/plugins/modules/vyos_lldp_global.py
index 08eb113..3a93c95 100644
--- a/plugins/modules/vyos_lldp_global.py
+++ b/plugins/modules/vyos_lldp_global.py
@@ -30,17 +30,13 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
-ANSIBLE_METADATA = {
- "metadata_version": "1.1",
- "status": ["preview"],
- "supported_by": "network",
-}
+ANSIBLE_METADATA = {"metadata_version": "1.1", "supported_by": "Ansible"}
DOCUMENTATION = """module: vyos_lldp_global
-short_description: Manage link layer discovery protocol (LLDP) attributes on VyOS
- devices..
+short_description: LLDP global resource module
description: This module manages link layer discovery protocol (LLDP) attributes on
VyOS devices.
+version_added: "1.0.0"
notes:
- Tested against VyOS 1.1.8 (helium).
- This module works with connection C(network_cli). See L(the VyOS OS Platform Options,../network/user_guide/platform_vyos.html).
@@ -72,6 +68,15 @@ options:
- edp
- fdp
- sonmp
+ running_config:
+ description:
+ - This option is used only with state I(parsed).
+ - The value of this option should be the output received from the VyOS device by executing
+ the command B(show configuration commands | grep lldp).
+ - The state I(parsed) reads the configuration from C(running_config) option and transforms
+ it into Ansible structured data as per the resource module's argspec and the value is then
+ returned in the I(parsed) key within the result.
+ type: str
state:
description:
- The state of the configuration after module completion.
@@ -80,6 +85,9 @@ options:
- merged
- replaced
- deleted
+ - gathered
+ - rendered
+ - parsed
default: merged
"""
EXAMPLES = """
@@ -89,10 +97,9 @@ EXAMPLES = """
# -------------
#
# vyos@vyos:~$ show configuration commands|grep lldp
-# vyos@vyos:~$
#
- name: Merge provided configuration with device configuration
- vyos_lldp_global:
+ vyos.vyos.vyos_lldp_global:
config:
legacy_protocols:
- 'fdp'
@@ -154,7 +161,7 @@ EXAMPLES = """
# set service lldp snmp enable
#
- name: Replace device configurations with provided configurations
- vyos_lldp_global:
+ vyos.vyos.vyos_lldp_global:
config:
legacy_protocols:
- 'edp'
@@ -231,7 +238,7 @@ EXAMPLES = """
# set service lldp management-address '192.0.2.14'
#
- name: Delete attributes of given lldp service (This won't delete the LLDP service itself)
- vyos_lldp_global:
+ vyos.vyos.vyos_lldp_global:
config:
state: deleted
#
@@ -273,6 +280,163 @@ EXAMPLES = """
# set service lldp
+# Using gathered
+#
+# Before state:
+# -------------
+#
+# vyos@192# run show configuration commands | grep lldp
+# set service lldp legacy-protocols 'cdp'
+# set service lldp management-address '192.0.2.17'
+#
+- name: Gather lldp global config with provided configurations
+ vyos.vyos.vyos_lldp_global:
+ config:
+ state: gathered
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+# "gathered": [
+# {
+# "config_trap": true,
+# "group": {
+# "address_group": [
+# {
+# "description": "Sales office hosts address list",
+# "members": [
+# {
+# "address": "192.0.3.1"
+# },
+# {
+# "address": "192.0.3.2"
+# }
+# ],
+# "name": "ENG-HOSTS"
+# },
+# {
+# "description": "Sales office hosts address list",
+# "members": [
+# {
+# "address": "192.0.2.1"
+# },
+# {
+# "address": "192.0.2.2"
+# },
+# {
+# "address": "192.0.2.3"
+# }
+# ],
+# "name": "SALES-HOSTS"
+# }
+# ],
+# "network_group": [
+# {
+# "description": "This group has the Management network addresses",
+# "members": [
+# {
+# "address": "192.0.1.0/24"
+# }
+# ],
+# "name": "MGMT"
+# }
+# ]
+# },
+# "log_martians": true,
+# "ping": {
+# "all": true,
+# "broadcast": true
+# },
+# "route_redirects": [
+# {
+# "afi": "ipv4",
+# "icmp_redirects": {
+# "receive": false,
+# "send": true
+# },
+# "ip_src_route": true
+# }
+# ],
+# "state_policy": [
+# {
+# "action": "accept",
+# "connection_type": "established",
+# "log": true
+# },
+# {
+# "action": "reject",
+# "connection_type": "invalid"
+# }
+# ],
+# "syn_cookies": true,
+# "twa_hazards_protection": true,
+# "validation": "strict"
+# }
+#
+# After state:
+# -------------
+#
+# vyos@192# run show configuration commands | grep lldp
+# set service lldp legacy-protocols 'cdp'
+# set service lldp management-address '192.0.2.17'
+
+
+# Using rendered
+#
+#
+- name: Render the commands for provided configuration
+ vyos.vyos.vyos_lldp_global:
+ config:
+ address: 192.0.2.17
+ enable: true
+ legacy_protocols:
+ - cdp
+ state: rendered
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+#
+# "rendered": [
+# "set service lldp legacy-protocols 'cdp'",
+# "set service lldp",
+# "set service lldp management-address '192.0.2.17'"
+# ]
+#
+
+
+# Using parsed
+#
+#
+- name: Parse the provided commands to provide structured configuration
+ vyos.vyos.vyos_lldp_global:
+ running_config:
+ "set service lldp legacy-protocols 'cdp'
+ set service lldp legacy-protocols 'fdp'
+ set service lldp management-address '192.0.2.11'"
+ state: parsed
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+#
+# "parsed": {
+# "address": "192.0.2.11",
+# "enable": true,
+# "legacy_protocols": [
+# "cdp",
+# "fdp"
+# ]
+# }
+#
+
+
"""
RETURN = """
before:
@@ -317,13 +481,16 @@ def main():
required_if = [
("state", "merged", ("config",)),
("state", "replaced", ("config",)),
+ ("state", "rendered", ("config",)),
+ ("state", "parsed", ("running_config",)),
]
+ mutually_exclusive = [("config", "running_config")]
module = AnsibleModule(
argument_spec=Lldp_globalArgs.argument_spec,
required_if=required_if,
supports_check_mode=True,
+ mutually_exclusive=mutually_exclusive,
)
-
result = Lldp_global(module).execute_module()
module.exit_json(**result)
diff --git a/plugins/modules/vyos_lldp_interfaces.py b/plugins/modules/vyos_lldp_interfaces.py
index 8fe572b..b26da49 100644
--- a/plugins/modules/vyos_lldp_interfaces.py
+++ b/plugins/modules/vyos_lldp_interfaces.py
@@ -30,18 +30,15 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
-ANSIBLE_METADATA = {
- "metadata_version": "1.1",
- "status": ["preview"],
- "supported_by": "network",
-}
+ANSIBLE_METADATA = {"metadata_version": "1.1", "supported_by": "Ansible"}
DOCUMENTATION = """module: vyos_lldp_interfaces
-short_description: Manages attributes of lldp interfaces on VyOS devices.
+short_description: LLDP interfaces resource module
description: This module manages attributes of lldp interfaces on VyOS network devices.
notes:
- Tested against VyOS 1.1.8 (helium).
- This module works with connection C(network_cli). See L(the VyOS OS Platform Options,../network/user_guide/platform_vyos.html).
+version_added: "1.0.0"
author:
- Rohit Thakur (@rohitthakur2590)
options:
@@ -111,6 +108,15 @@ options:
elin:
description: Emergency Call Service ELIN number (between 10-25 numbers).
type: str
+ running_config:
+ description:
+ - This option is used only with state I(parsed).
+ - The value of this option should be the output received from the VyOS device by executing
+ the command B(show configuration commands | grep lldp).
+ - The state I(parsed) reads the configuration from C(running_config) option and transforms
+ it into Ansible structured data as per the resource module's argspec and the value is then
+ returned in the I(parsed) key within the result.
+ type: str
state:
description:
- The state of the configuration after module completion.
@@ -120,6 +126,9 @@ options:
- replaced
- overridden
- deleted
+ - rendered
+ - parsed
+ - gathered
default: merged
"""
EXAMPLES = """
@@ -131,7 +140,7 @@ EXAMPLES = """
# vyos@vyos:~$ show configuration commands | grep lldp
#
- name: Merge provided configuration with device configuration
- vyos_lldp_interfaces:
+ vyos.vyos.vyos_lldp_interfaces:
config:
- name: 'eth1'
location:
@@ -225,7 +234,7 @@ EXAMPLES = """
# set service lldp interface eth2 location coordinate-based longitude '222.267255W'
#
- name: Replace device configurations of listed LLDP interfaces with provided configurations
- vyos_lldp_interfaces:
+ vyos.vyos.vyos_lldp_interfaces:
config:
- name: 'eth2'
location:
@@ -348,7 +357,7 @@ EXAMPLES = """
# set service lldp interface eth2 location civic-based country-code 'US'
#
- name: Overrides all device configuration with provided configuration
- vyos_lag_interfaces:
+ vyos.vyos.vyos_lldp_interfaces:
config:
- name: 'eth2'
location:
@@ -423,7 +432,7 @@ EXAMPLES = """
# set service lldp interface eth2 location elin '0000000911'
#
- name: Delete lldp interface attributes of given interfaces.
- vyos_lag_interfaces:
+ vyos.vyos.vyos_lldp_interfaces:
config:
- name: 'eth2'
state: deleted
@@ -453,6 +462,159 @@ EXAMPLES = """
# set service 'lldp'
+# Using gathered
+#
+# Before state:
+# -------------
+#
+# vyos@192# run show configuration commands | grep lldp
+# set service lldp interface eth1 location civic-based ca-type 0 ca-value 'ENGLISH'
+# set service lldp interface eth1 location civic-based country-code 'US'
+# set service lldp interface eth2 location coordinate-based altitude '2200'
+# set service lldp interface eth2 location coordinate-based datum 'WGS84'
+# set service lldp interface eth2 location coordinate-based latitude '33.524449N'
+# set service lldp interface eth2 location coordinate-based longitude '222.267255W'
+#
+- name: Gather listed lldp interfaces from running configuration
+ vyos.vyos.vyos_lldp_interfaces:
+ config:
+ state: gathered
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+# "gathered": [
+# {
+# "location": {
+# "coordinate_based": {
+# "altitude": 2200,
+# "datum": "WGS84",
+# "latitude": "33.524449N",
+# "longitude": "222.267255W"
+# }
+# },
+# "name": "eth2"
+# },
+# {
+# "location": {
+# "civic_based": {
+# "ca_info": [
+# {
+# "ca_type": 0,
+# "ca_value": "ENGLISH"
+# }
+# ],
+# "country_code": "US"
+# }
+# },
+# "name": "eth1"
+# }
+# ]
+#
+#
+# After state:
+# -------------
+#
+# vyos@192# run show configuration commands | grep lldp
+# set service lldp interface eth1 location civic-based ca-type 0 ca-value 'ENGLISH'
+# set service lldp interface eth1 location civic-based country-code 'US'
+# set service lldp interface eth2 location coordinate-based altitude '2200'
+# set service lldp interface eth2 location coordinate-based datum 'WGS84'
+# set service lldp interface eth2 location coordinate-based latitude '33.524449N'
+# set service lldp interface eth2 location coordinate-based longitude '222.267255W'
+
+
+# Using rendered
+#
+#
+- name: Render the commands for provided configuration
+ vyos.vyos.vyos_lldp_interfaces:
+ config:
+ - name: eth1
+ location:
+ civic_based:
+ country_code: US
+ ca_info:
+ - ca_type: 0
+ ca_value: ENGLISH
+ - name: eth2
+ location:
+ coordinate_based:
+ altitude: 2200
+ datum: WGS84
+ longitude: 222.267255W
+ latitude: 33.524449N
+ state: rendered
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+#
+# "rendered": [
+# "set service lldp interface eth1 location civic-based country-code 'US'",
+# "set service lldp interface eth1 location civic-based ca-type 0 ca-value 'ENGLISH'",
+# "set service lldp interface eth1",
+# "set service lldp interface eth2 location coordinate-based latitude '33.524449N'",
+# "set service lldp interface eth2 location coordinate-based altitude '2200'",
+# "set service lldp interface eth2 location coordinate-based datum 'WGS84'",
+# "set service lldp interface eth2 location coordinate-based longitude '222.267255W'",
+# "set service lldp interface eth2"
+# ]
+
+
+# Using parsed
+#
+#
+- name: Parsed the commands to provide structured configuration.
+ vyos.vyos.vyos_lldp_interfaces:
+ running_config:
+ "set service lldp interface eth1 location civic-based ca-type 0 ca-value 'ENGLISH'
+ set service lldp interface eth1 location civic-based country-code 'US'
+ set service lldp interface eth2 location coordinate-based altitude '2200'
+ set service lldp interface eth2 location coordinate-based datum 'WGS84'
+ set service lldp interface eth2 location coordinate-based latitude '33.524449N'
+ set service lldp interface eth2 location coordinate-based longitude '222.267255W'"
+ state: parsed
+#
+#
+# -------------------------
+# Module Execution Result
+# -------------------------
+#
+#
+# "parsed": [
+# {
+# "location": {
+# "coordinate_based": {
+# "altitude": 2200,
+# "datum": "WGS84",
+# "latitude": "33.524449N",
+# "longitude": "222.267255W"
+# }
+# },
+# "name": "eth2"
+# },
+# {
+# "location": {
+# "civic_based": {
+# "ca_info": [
+# {
+# "ca_type": 0,
+# "ca_value": "ENGLISH"
+# }
+# ],
+# "country_code": "US"
+# }
+# },
+# "name": "eth1"
+# }
+# ]
+
+
"""
RETURN = """
before:
@@ -497,12 +659,17 @@ def main():
required_if = [
("state", "merged", ("config",)),
("state", "replaced", ("config",)),
+ ("state", "rendered", ("config",)),
("state", "overridden", ("config",)),
+ ("state", "parsed", ("running_config",)),
]
+ mutually_exclusive = [("config", "running_config")]
+
module = AnsibleModule(
argument_spec=Lldp_interfacesArgs.argument_spec,
required_if=required_if,
supports_check_mode=True,
+ mutually_exclusive=mutually_exclusive,
)
result = Lldp_interfaces(module).execute_module()
diff --git a/plugins/modules/vyos_static_routes.py b/plugins/modules/vyos_static_routes.py
index 6e50203..e71114a 100644
--- a/plugins/modules/vyos_static_routes.py
+++ b/plugins/modules/vyos_static_routes.py
@@ -30,16 +30,13 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
-ANSIBLE_METADATA = {
- "metadata_version": "1.1",
- "status": ["preview"],
- "supported_by": "network",
-}
+ANSIBLE_METADATA = {"metadata_version": "1.1", "supported_by": "Ansible"}
DOCUMENTATION = """module: vyos_static_routes
-short_description: Manages attributes of static routes on VyOS network devices.
+short_description: Static routes resource module
description: This module manages attributes of static routes on VyOS network devices.
notes:
+version_added: "1.0.0"
- Tested against VyOS 1.1.8 (helium).
- This module works with connection C(network_cli). See L(the VyOS OS Platform Options,../network/user_guide/platform_vyos.html).
author:
@@ -114,13 +111,12 @@ options:
type: str
running_config:
description:
- - The module, by default, will connect to the remote device and retrieve the current
- running-config to use as a base for comparing against the contents of source.
- There are times when it is not desirable to have the task get the current running-config
- for every task in a playbook. The I(running_config) argument allows the implementer
- to pass in the configuration to use as the base config for comparison. This
- value of this option should be the output received from device by executing
- command C(show configuration commands | grep 'static route')
+ - This option is used only with state I(parsed).
+ - The value of this option should be the output received from the VyOS device by executing
+ the command B(show configuration commands | grep static route).
+ - The state I(parsed) reads the configuration from C(running_config) option and transforms
+ it into Ansible structured data as per the resource module's argspec and the value is then
+ returned in the I(parsed) key within the result.
type: str
state:
description:
@@ -145,7 +141,7 @@ EXAMPLES = """
# vyos@vyos:~$ show configuration commands | grep static
#
- name: Merge the provided configuration with the exisiting running configuration
- vyos_static_routes:
+ vyos.vyos.vyos_static_routes:
config:
- address_families:
- afi: 'ipv4'
@@ -259,7 +255,7 @@ EXAMPLES = """
# set protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::2'
#
- name: Replace device configurations of listed static routes with provided configurations
- vyos_static_routes:
+ vyos.vyos.vyos_static_routes:
config:
- address_families:
- afi: 'ipv4'
@@ -435,7 +431,7 @@ EXAMPLES = """
# set protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::2'
#
- name: Overrides all device configuration with provided configuration
- vyos_static_routes:
+ vyos.vyos.vyos_static_routes:
config:
- address_families:
- afi: 'ipv4'
@@ -531,92 +527,6 @@ EXAMPLES = """
# set protocols static route 198.0.2.48/28 next-hop '192.0.2.18'
-# Using deleted to delete static route based on destination
-#
-# Before state
-# -------------
-#
-# vyos@vyos:~$ show configuration commands| grep static
-# set protocols static route 192.0.2.32/28 'blackhole'
-# set protocols static route 192.0.2.32/28 next-hop '192.0.2.6'
-# set protocols static route 192.0.2.32/28 next-hop '192.0.2.7'
-# set protocols static route6 2001:db8:1000::/36 blackhole distance '2'
-# set protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::1'
-# set protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::2'
-#
-- name: Delete static route per destination.
- vyos_static_routes:
- config:
- - address_families:
- - afi: 'ipv4'
- routes:
- - dest: '192.0.2.32/28'
- - afi: 'ipv6'
- routes:
- - dest: '2001:db8:1000::/36'
- state: deleted
-#
-#
-# ------------------------
-# Module Execution Results
-# ------------------------
-#
-# "before": [
-# {
-# "address_families": [
-# {
-# "afi": "ipv4",
-# "routes": [
-# {
-# "blackhole_config": {
-# "type": "blackhole"
-# },
-# "dest": "192.0.2.32/28",
-# "next_hops": [
-# {
-# "forward_router_address": "192.0.2.6"
-# },
-# {
-# "forward_router_address": "192.0.2.7"
-# }
-# ]
-# }
-# ]
-# },
-# {
-# "afi": "ipv6",
-# "routes": [
-# {
-# "blackhole_config": {
-# "distance": 2
-# },
-# "dest": "2001:db8:1000::/36",
-# "next_hops": [
-# {
-# "forward_router_address": "2001:db8:2000:2::1"
-# },
-# {
-# "forward_router_address": "2001:db8:2000:2::2"
-# }
-# ]
-# }
-# ]
-# }
-# ]
-# }
-# ]
-# "commands": [
-# "delete protocols static route 192.0.2.32/28",
-# "delete protocols static route6 2001:db8:1000::/36"
-# ]
-#
-# "after": []
-# After state
-# ------------
-# vyos@vyos# run show configuration commands | grep static
-# set protocols 'static'
-
-
# Using deleted to delete static route based on afi
#
# Before state
@@ -631,7 +541,7 @@ EXAMPLES = """
# set protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::2'
#
- name: Delete static route based on afi.
- vyos_static_routes:
+ vyos.vyos.vyos_static_routes:
config:
- address_families:
- afi: 'ipv4'
@@ -713,7 +623,7 @@ EXAMPLES = """
# set protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::2'
#
- name: Delete all the static routes.
- vyos_static_routes:
+ vyos.vyos.vyos_static_routes:
config:
state: deleted
#
@@ -778,141 +688,11 @@ EXAMPLES = """
# set protocols 'static'
-# Using deleted to delete static route based on next-hop
-#
-# Before state
-# -------------
-#
-# vyos@vyos:~$ show configuration commands| grep static
-# set protocols static route 192.0.2.32/28 'blackhole'
-# set protocols static route 192.0.2.32/28 next-hop '192.0.2.6'
-# set protocols static route 192.0.2.32/28 next-hop '192.0.2.7'
-# set protocols static route6 2001:db8:1000::/36 blackhole distance '2'
-# set protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::1'
-# set protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::2'
-#
-- name: Delete static routes per next-hops
- vyos_static_routes:
- config:
- - address_families:
- - afi: 'ipv4'
- routes:
- - dest: '192.0.2.32/28'
- next-hops:
- - forward_router_address: '192.0.2.6'
- - afi: 'ipv6'
- routes:
- - dest: '2001:db8:1000::/36'
- next-hops:
- - forward_router_address: '2001:db8:2000:2::1'
- state: deleted
-#
-#
-# ------------------------
-# Module Execution Results
-# ------------------------
-#
-# "before": [
-# {
-# "address_families": [
-# {
-# "afi": "ipv4",
-# "routes": [
-# {
-# "blackhole_config": {
-# "type": "blackhole"
-# },
-# "dest": "192.0.2.32/28",
-# "next_hops": [
-# {
-# "forward_router_address": "192.0.2.6"
-# },
-# {
-# "forward_router_address": "192.0.2.7"
-# }
-# ]
-# }
-# ]
-# },
-# {
-# "afi": "ipv6",
-# "routes": [
-# {
-# "blackhole_config": {
-# "distance": 2
-# },
-# "dest": "2001:db8:1000::/36",
-# "next_hops": [
-# {
-# "forward_router_address": "2001:db8:2000:2::1"
-# },
-# {
-# "forward_router_address": "2001:db8:2000:2::2"
-# }
-# ]
-# }
-# ]
-# }
-# ]
-# }
-# ]
-# "commands": [
-# "delete protocols static route 192.0.2.32/28 next-hop '192.0.2.6'",
-# "delete protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::1'"
-# ]
-#
-# "after": [
-# {
-# "address_families": [
-# {
-# "afi": "ipv4",
-# "routes": [
-# {
-# "blackhole_config": {
-# "type": "blackhole"
-# },
-# "dest": "192.0.2.32/28",
-# "next_hops": [
-# {
-# "forward_router_address": "192.0.2.7"
-# }
-# ]
-# }
-# ]
-# },
-# {
-# "afi": "ipv6",
-# "routes": [
-# {
-# "blackhole_config": {
-# "distance": 2
-# },
-# "dest": "2001:db8:1000::/36",
-# "next_hops": [
-# {
-# "forward_router_address": "2001:db8:2000:2::2"
-# }
-# ]
-# }
-# ]
-# }
-# ]
-# }
-# ]
-# After state
-# ------------
-# vyos@vyos:~$ show configuration commands| grep static
-# set protocols static route 192.0.2.32/28 'blackhole'
-# set protocols static route 192.0.2.32/28 next-hop '192.0.2.7'
-# set protocols static route6 2001:db8:1000::/36 blackhole distance '2'
-# set protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::2'
-
-
# Using rendered
#
#
- name: Render the commands for provided configuration
- vyos_static_routes:
+ vyos.vyos.vyos_static_routes:
config:
- address_families:
- afi: 'ipv4'
@@ -955,8 +735,8 @@ EXAMPLES = """
# Using parsed
#
#
-- name: Render the commands for provided configuration
- vyos_static_routes:
+- name: Parse the provided running configuration
+ vyos.vyos.vyos_static_routes:
running_config:
"set protocols static route 192.0.2.32/28 'blackhole'
set protocols static route 192.0.2.32/28 next-hop '192.0.2.6'
@@ -1026,7 +806,7 @@ EXAMPLES = """
# set protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::2'
#
- name: Gather listed static routes with provided configurations
- vyos_static_routes:
+ vyos.vyos.vyos_static_routes:
config:
state: gathered
#
@@ -1137,6 +917,7 @@ def main():
required_if = [
("state", "merged", ("config",)),
("state", "replaced", ("config",)),
+ ("state", "rendered", ("config",)),
("state", "overridden", ("config",)),
("state", "parsed", ("running_config",)),
]
diff --git a/test-requirements.txt b/test-requirements.txt
index 5037396..3f3af99 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,4 +1,6 @@
black ; python_version > '3.5'
flake8
+mock
pexpect
+pytest-xdist
yamllint
diff --git a/tests/integration/network-integration.cfg b/tests/integration/network-integration.cfg
new file mode 100644
index 0000000..d12c1ef
--- /dev/null
+++ b/tests/integration/network-integration.cfg
@@ -0,0 +1,4 @@
+[persistent_connection]
+command_timeout = 100
+connect_timeout = 100
+connect_retry_timeout = 100
diff --git a/tests/integration/targets/vyos_firewall_rules/tests/cli/deleted.yaml b/tests/integration/targets/vyos_firewall_rules/tests/cli/deleted.yaml
index 7acfe65..67bfd3c 100644
--- a/tests/integration/targets/vyos_firewall_rules/tests/cli/deleted.yaml
+++ b/tests/integration/targets/vyos_firewall_rules/tests/cli/deleted.yaml
@@ -11,15 +11,11 @@
register: result
vyos.vyos.vyos_firewall_rules: &id001
config:
-
- afi: ipv6
rule_sets:
-
- name: UPLINK
-
- afi: ipv4
rule_sets:
-
- name: INBOUND
state: deleted
diff --git a/tests/integration/targets/vyos_firewall_rules/tests/cli/deleted_rule.yaml b/tests/integration/targets/vyos_firewall_rules/tests/cli/deleted_rule.yaml
deleted file mode 100644
index d77e2a9..0000000
--- a/tests/integration/targets/vyos_firewall_rules/tests/cli/deleted_rule.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
----
-- debug:
- msg: Start vyos_firewall_rules deleted integration tests ansible_connection={{
- ansible_connection }}
-
-- include_tasks: _populate.yaml
-
-- block:
-
- - name: Delete firewall rule.
- register: result
- vyos.vyos.vyos_firewall_rules: &id001
- config:
-
- - afi: ipv6
- rule_sets:
-
- - name: UPLINK
- rules:
-
- - number: 1
- state: deleted
-
- - name: Assert that the before dicts were correctly generated
- assert:
- that:
- - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
-
- - name: Assert that the correct set of commands were generated
- assert:
- that:
- - "{{ deleted_r['commands'] | symmetric_difference(result['commands'])\
- \ |length == 0 }}"
-
- - name: Assert that the after dicts were correctly generated
- assert:
- that:
- - "{{ deleted_r['after'] | symmetric_difference(result['after']) |length\
- \ == 0 }}"
-
- - name: Delete attributes of given interfaces (IDEMPOTENT)
- register: result
- vyos.vyos.vyos_firewall_rules: *id001
-
- - name: Assert that the previous task was idempotent
- assert:
- that:
- - result.changed == false
- - result.commands|length == 0
-
- - name: Assert that the before dicts were correctly generated
- assert:
- that:
- - "{{ deleted_r['after'] | symmetric_difference(result['before']) |length\
- \ == 0 }}"
- always:
-
- - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_firewall_rules/tests/cli/gathered.yaml b/tests/integration/targets/vyos_firewall_rules/tests/cli/gathered.yaml
index cdc8e51..59c81aa 100644
--- a/tests/integration/targets/vyos_firewall_rules/tests/cli/gathered.yaml
+++ b/tests/integration/targets/vyos_firewall_rules/tests/cli/gathered.yaml
@@ -9,9 +9,9 @@
- block:
- - name: Merge the provided configuration with the exisiting running configuration
+ - name: Gather the provided configuration with the exisiting running configuration
register: result
- vyos.vyos.vyos_firewall_rules: &id001
+ vyos.vyos.vyos_firewall_rules:
config:
state: gathered
@@ -21,14 +21,6 @@
- "{{ populate | symmetric_difference(result['gathered']) |length == 0\
\ }}"
- - name: Gather the existing running configuration (IDEMPOTENT)
- register: result
- vyos.vyos.vyos_firewall_rules: *id001
-
- - name: Assert that the previous task was idempotent
- assert:
- that:
- - result['changed'] == false
always:
- include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_firewall_rules/tests/cli/parsed.yaml b/tests/integration/targets/vyos_firewall_rules/tests/cli/parsed.yaml
index a793ac5..bc95524 100644
--- a/tests/integration/targets/vyos_firewall_rules/tests/cli/parsed.yaml
+++ b/tests/integration/targets/vyos_firewall_rules/tests/cli/parsed.yaml
@@ -3,39 +3,14 @@
msg: START vyos_firewall_rules parsed integration tests on connection={{ ansible_connection
}}
-- include_tasks: _remove_config.yaml
-
-- include_tasks: _populate.yaml
-
-- block:
-
- - name: Gather firewall_rules facts
- register: firewall_rules_facts
- vyos.vyos.vyos_facts:
- gather_subset:
- - default
- gather_network_resources:
- - firewall_rules
-
- - name: Provide the running configuration for parsing (config to be parsed)
- register: result
- vyos.vyos.vyos_firewall_rules: &id001
- running_config: "{{ lookup('file', '_parsed_config.cfg') }}"
- state: parsed
-
- - name: Assert that correct parsing done
- assert:
- that: "{{ ansible_facts['network_resources']['firewall_rules'] | symmetric_difference(result['parsed'])\
- \ |length == 0 }}"
-
- - name: Gather the existing running configuration (IDEMPOTENT)
- register: result
- vyos.vyos.vyos_firewall_rules: *id001
-
- - name: Assert that the previous task was idempotent
- assert:
- that:
- - result['changed'] == false
- always:
-
- - include_tasks: _remove_config.yaml
+- name: Parse externally provided Firewall rules config to agnostic model
+ register: result
+ vyos.vyos.vyos_firewall_rules:
+ running_config: "{{ lookup('file', '_parsed_config.cfg') }}"
+ state: parsed
+
+- name: Assert that config was correctly parsed
+ assert:
+ that:
+ - "{{ parsed['after'] | symmetric_difference(result['parsed']) |length ==\
+ \ 0 }}"
diff --git a/tests/integration/targets/vyos_firewall_rules/tests/cli/rendered.yaml b/tests/integration/targets/vyos_firewall_rules/tests/cli/rendered.yaml
index f000998..6670fd7 100644
--- a/tests/integration/targets/vyos_firewall_rules/tests/cli/rendered.yaml
+++ b/tests/integration/targets/vyos_firewall_rules/tests/cli/rendered.yaml
@@ -5,13 +5,11 @@
- include_tasks: _remove_config.yaml
-- include_tasks: _populate.yaml
-
- block:
- name: Structure provided configuration into device specific commands
register: result
- vyos.vyos.vyos_firewall_rules: &id001
+ vyos.vyos.vyos_firewall_rules:
config:
- afi: ipv6
@@ -60,14 +58,5 @@
- "{{ rendered['commands'] | symmetric_difference(result['rendered'])\
\ |length == 0 }}"
- - name: Structure provided configuration into device specific commands (IDEMPOTENT)
- register: result
- vyos.vyos.vyos_firewall_rules: *id001
-
- - name: Assert that the previous task was idempotent
- assert:
- that:
- - result['changed'] == false
- always:
-
- - include_tasks: _remove_config.yaml
+- debug:
+ msg: END vyos_firewall_rules rendered integration tests on connection={{ ansible_connection }}
diff --git a/tests/integration/targets/vyos_firewall_rules/vars/main.yaml b/tests/integration/targets/vyos_firewall_rules/vars/main.yaml
index c15a101..88323ba 100644
--- a/tests/integration/targets/vyos_firewall_rules/vars/main.yaml
+++ b/tests/integration/targets/vyos_firewall_rules/vars/main.yaml
@@ -196,42 +196,7 @@ overridden:
action: reject
description: Rule 502 is configured by Ansible
ipsec: match-ipsec
-rendered:
- commands:
- - set firewall ipv6-name UPLINK default-action 'accept'
- - set firewall ipv6-name UPLINK description 'This is ipv6 specific rule-set'
- - set firewall name INBOUND default-action 'accept'
- - set firewall name INBOUND description 'IPv4 INBOUND rule set'
- - set firewall name INBOUND rule 101 action 'accept'
- - set firewall name INBOUND rule 101
- - set firewall name INBOUND rule 101 description 'Rule 101 is configured by Ansible'
- - set firewall name INBOUND rule 101 ipsec 'match-ipsec'
- - set firewall name INBOUND rule 102 action 'reject'
- - set firewall name INBOUND rule 102
- - set firewall name INBOUND rule 102 description 'Rule 102 is configured by Ansible'
- - set firewall name INBOUND rule 102 ipsec 'match-ipsec'
- - set firewall name INBOUND rule 103 description 'Rule 103 is configured by Ansible'
- - set firewall name INBOUND rule 103 destination group address-group inbound
- - set firewall name INBOUND rule 103
- - set firewall name INBOUND rule 103 source address 192.0.2.0
- - set firewall name INBOUND rule 103 state established enable
- - set firewall name INBOUND rule 103 state related enable
- - set firewall name INBOUND rule 103 state invalid disable
- - set firewall name INBOUND rule 103 state new disable
- - set firewall name INBOUND rule 103 action 'accept'
-deleted_rs:
- commands:
- - delete firewall ipv6-name UPLINK
- - delete firewall name INBOUND
- after: []
-deleted_afi_all:
- commands:
- - delete firewall ipv6-name
- - delete firewall name
- after: []
-deleted_r:
- commands:
- - delete firewall ipv6-name UPLINK rule 1
+parsed:
after:
- afi: ipv6
rule_sets:
@@ -239,6 +204,10 @@ deleted_r:
description: This is ipv6 specific rule-set
default_action: accept
rules:
+ - number: 1
+ action: accept
+ description: Fwipv6-Rule 1 is configured by Ansible
+ ipsec: match-ipsec
- number: 2
action: accept
description: Fwipv6-Rule 2 is configured by Ansible
@@ -270,6 +239,39 @@ deleted_r:
new: false
invalid: false
related: true
+rendered:
+ commands:
+ - set firewall ipv6-name UPLINK default-action 'accept'
+ - set firewall ipv6-name UPLINK description 'This is ipv6 specific rule-set'
+ - set firewall name INBOUND default-action 'accept'
+ - set firewall name INBOUND description 'IPv4 INBOUND rule set'
+ - set firewall name INBOUND rule 101 action 'accept'
+ - set firewall name INBOUND rule 101
+ - set firewall name INBOUND rule 101 description 'Rule 101 is configured by Ansible'
+ - set firewall name INBOUND rule 101 ipsec 'match-ipsec'
+ - set firewall name INBOUND rule 102 action 'reject'
+ - set firewall name INBOUND rule 102
+ - set firewall name INBOUND rule 102 description 'Rule 102 is configured by Ansible'
+ - set firewall name INBOUND rule 102 ipsec 'match-ipsec'
+ - set firewall name INBOUND rule 103 description 'Rule 103 is configured by Ansible'
+ - set firewall name INBOUND rule 103 destination group address-group inbound
+ - set firewall name INBOUND rule 103
+ - set firewall name INBOUND rule 103 source address 192.0.2.0
+ - set firewall name INBOUND rule 103 state established enable
+ - set firewall name INBOUND rule 103 state related enable
+ - set firewall name INBOUND rule 103 state invalid disable
+ - set firewall name INBOUND rule 103 state new disable
+ - set firewall name INBOUND rule 103 action 'accept'
+deleted_rs:
+ commands:
+ - delete firewall ipv6-name UPLINK
+ - delete firewall name INBOUND
+ after: []
+deleted_afi_all:
+ commands:
+ - delete firewall ipv6-name
+ - delete firewall name
+ after: []
round_trip:
after:
- afi: ipv6
diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/_parsed_config.cfg b/tests/integration/targets/vyos_interfaces/tests/cli/_parsed_config.cfg
new file mode 100644
index 0000000..e5c3fc7
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tests/cli/_parsed_config.cfg
@@ -0,0 +1,12 @@
+set interfaces ethernet eth1 description 'Configured by Ansible - Interface 1'
+set interfaces ethernet eth1 duplex 'auto'
+set interfaces ethernet eth1 hw-id '08:00:27:da:67:43'
+set interfaces ethernet eth1 mtu '1500'
+set interfaces ethernet eth1 speed 'auto'
+set interfaces ethernet eth1 vif 100 description 'Eth1 - VIF 100'
+set interfaces ethernet eth1 vif 100 mtu '400'
+set interfaces ethernet eth1 vif 101 description 'Eth1 - VIF 101'
+set interfaces ethernet eth2 description 'Configured by Ansible - Interface 2 (ADMIN DOWN)'
+set interfaces ethernet eth2 'disable'
+set interfaces ethernet eth2 hw-id '08:00:27:d8:70:b0'
+set interfaces ethernet eth2 mtu '600'
diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/empty_config.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/empty_config.yaml
index e1e154d..652f158 100644
--- a/tests/integration/targets/vyos_interfaces/tests/cli/empty_config.yaml
+++ b/tests/integration/targets/vyos_interfaces/tests/cli/empty_config.yaml
@@ -1,7 +1,7 @@
---
- debug:
- msg: START vyos_interfaces empty_config integration tests on connection={{ ansible_connection
- }}
+ msg: START vyos_interfaces empty_config integration tests on connection={{
+ ansible_connection }}
- name: Merged with empty config should give appropriate error message
register: result
@@ -35,3 +35,26 @@
- assert:
that:
- result.msg == 'value of config parameter must not be empty for state overridden'
+
+- name: Parsed with empty running_config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_interfaces:
+ running_config:
+ state: parsed
+
+- assert:
+ that:
+ - result.msg == 'value of running_config parameter must not be empty for state
+ parsed'
+
+- name: Rendered with empty config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_interfaces:
+ config:
+ state: rendered
+
+- assert:
+ that:
+ - result.msg == 'value of config parameter must not be empty for state rendered'
diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/gathered.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/gathered.yaml
new file mode 100644
index 0000000..ac9892c
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tests/cli/gathered.yaml
@@ -0,0 +1,26 @@
+---
+- debug:
+ msg: START vyos_interfaces gathered integration tests on connection={{ ansible_connection
+ }}
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+
+ - name: Gather the provided configuration with the exisiting running configuration
+ register: result
+ vyos.vyos.vyos_interfaces:
+ config:
+ state: gathered
+
+ - name: Assert that gathered dicts was correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['gathered']) |length == 0\
+ \ }}"
+
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/parsed.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/parsed.yaml
new file mode 100644
index 0000000..a44fc2f
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tests/cli/parsed.yaml
@@ -0,0 +1,16 @@
+---
+- debug:
+ msg: START vyos_interfaces parsed integration tests on connection={{ ansible_connection
+ }}
+
+- name: Parse externally provided interfaces config to agnostic model
+ register: result
+ vyos.vyos.vyos_interfaces:
+ running_config: "{{ lookup('file', '_parsed_config.cfg') }}"
+ state: parsed
+
+- name: Assert that config was correctly parsed
+ assert:
+ that:
+ - "{{ parsed['after'] | symmetric_difference(result['parsed']) |length ==\
+ \ 0 }}"
diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/rendered.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/rendered.yaml
new file mode 100644
index 0000000..5030d71
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tests/cli/rendered.yaml
@@ -0,0 +1,47 @@
+---
+- debug:
+ msg: START vyos_interfaces rendered integration tests on connection={{ ansible_connection
+ }}
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+
+ - name: Structure provided configuration into device specific commands
+ register: result
+ vyos.vyos.vyos_interfaces:
+ config:
+ - name: eth0
+ enabled: true
+ duplex: auto
+ speed: auto
+ - name: eth1
+ description: Configured by Ansible - Interface 1
+ mtu: 1500
+ speed: auto
+ duplex: auto
+ enabled: true
+ vifs:
+ - vlan_id: 100
+ description: Eth1 - VIF 100
+ mtu: 400
+ enabled: true
+ - vlan_id: 101
+ description: Eth1 - VIF 101
+ enabled: true
+ - name: eth2
+ description: Configured by Ansible - Interface 2 (ADMIN DOWN)
+ mtu: 600
+ enabled: false
+ state: rendered
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ rendered['commands'] | symmetric_difference(result['rendered'])\
+ \ |length == 0 }}"
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_interfaces/vars/main.yaml b/tests/integration/targets/vyos_interfaces/vars/main.yaml
index b730080..84a8bf0 100644
--- a/tests/integration/targets/vyos_interfaces/vars/main.yaml
+++ b/tests/integration/targets/vyos_interfaces/vars/main.yaml
@@ -104,6 +104,26 @@ replaced:
enabled: true
duplex: auto
speed: auto
+parsed:
+ after:
+ - name: eth1
+ description: Configured by Ansible - Interface 1
+ mtu: 1500
+ speed: auto
+ duplex: auto
+ enabled: true
+ vifs:
+ - vlan_id: 100
+ description: Eth1 - VIF 100
+ mtu: 400
+ enabled: true
+ - vlan_id: 101
+ description: Eth1 - VIF 101
+ enabled: true
+ - name: eth2
+ description: Configured by Ansible - Interface 2 (ADMIN DOWN)
+ mtu: 600
+ enabled: false
overridden:
commands:
- delete interfaces ethernet eth1 description
@@ -133,6 +153,23 @@ overridden:
vifs:
- vlan_id: 200
enabled: true
+rendered:
+ commands:
+ - set interfaces ethernet eth0 duplex 'auto'
+ - set interfaces ethernet eth0 speed 'auto'
+ - delete interfaces ethernet eth0 disable
+ - set interfaces ethernet eth1 duplex 'auto'
+ - delete interfaces ethernet eth1 disable
+ - set interfaces ethernet eth1 speed 'auto'
+ - set interfaces ethernet eth1 description 'Configured by Ansible - Interface 1'
+ - set interfaces ethernet eth1 mtu '1500'
+ - set interfaces ethernet eth1 vif 100 description 'Eth1 - VIF 100'
+ - set interfaces ethernet eth1 vif 100 mtu '400'
+ - set interfaces ethernet eth1 vif 101 description 'Eth1 - VIF 101'
+ - set interfaces ethernet eth2 disable
+ - set interfaces ethernet eth2 description 'Configured by Ansible - Interface 2 (ADMIN DOWN)'
+ - set interfaces ethernet eth2 mtu '600'
+
deleted:
commands:
- delete interfaces ethernet eth1 description
diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/_parsed_config.cfg b/tests/integration/targets/vyos_l3_interfaces/tests/cli/_parsed_config.cfg
new file mode 100644
index 0000000..ef070a7
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/_parsed_config.cfg
@@ -0,0 +1,9 @@
+set interfaces ethernet eth1 address '192.0.2.10/24'
+set interfaces ethernet eth1 address '2001:db8::10/32'
+set interfaces ethernet eth1 hw-id '08:00:27:da:67:43'
+set interfaces ethernet eth2 address '198.51.100.10/24'
+set interfaces ethernet eth2 hw-id '08:00:27:d8:70:b0'
+set interfaces ethernet eth2 vif 101 address '198.51.100.130/25'
+set interfaces ethernet eth2 vif 101 address '2001:db8::20/32'
+
+
diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/empty_config.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/empty_config.yaml
index 96d4cda..9929dd7 100644
--- a/tests/integration/targets/vyos_l3_interfaces/tests/cli/empty_config.yaml
+++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/empty_config.yaml
@@ -35,3 +35,26 @@
- assert:
that:
- result.msg == 'value of config parameter must not be empty for state overridden'
+
+- name: Parsed with empty running_config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_l3_interfaces:
+ running_config:
+ state: parsed
+
+- assert:
+ that:
+ - result.msg == 'value of running_config parameter must not be empty for state
+ parsed'
+
+- name: Rendered with empty config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_l3_interfaces:
+ config:
+ state: rendered
+
+- assert:
+ that:
+ - result.msg == 'value of config parameter must not be empty for state rendered'
diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/gathered.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/gathered.yaml
new file mode 100644
index 0000000..625047b
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/gathered.yaml
@@ -0,0 +1,34 @@
+---
+- debug:
+ msg: START vyos_l3_interfaces gathered integration tests on connection={{ ansible_connection
+ }}
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+
+ - name: Merge the provided configuration with the exisiting running configuration
+ register: result
+ vyos.vyos.vyos_l3_interfaces: &id001
+ config:
+ state: gathered
+
+ - name: Assert that gathered dicts was correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['gathered']) |length == 0\
+ \ }}"
+
+ - name: Gather the existing running configuration (IDEMPOTENT)
+ register: result
+ vyos.vyos.vyos_l3_interfaces: *id001
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - result['changed'] == false
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/parsed.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/parsed.yaml
new file mode 100644
index 0000000..d5ff205
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/parsed.yaml
@@ -0,0 +1,16 @@
+---
+- debug:
+ msg: START vyos_l3_nterfaces parsed integration tests on connection={{ ansible_connection
+ }}
+
+- name: Parse externally provided interfaces config to agnostic model
+ register: result
+ vyos.vyos.vyos_l3_interfaces:
+ running_config: "{{ lookup('file', '_parsed_config.cfg') }}"
+ state: parsed
+
+- name: Assert that config was correctly parsed
+ assert:
+ that:
+ - "{{ parsed['after'] | symmetric_difference(result['parsed']) |length ==\
+ \ 0 }}"
diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/rendered.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/rendered.yaml
new file mode 100644
index 0000000..02a2865
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/rendered.yaml
@@ -0,0 +1,44 @@
+---
+- debug:
+ msg: START vyos_l3_interfaces rendered integration tests on connection={{ ansible_connection
+ }}
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+
+ - name: Structure provided configuration into device specific commands
+ register: result
+ vyos.vyos.vyos_l3_interfaces: &id001
+ config:
+ - name: eth1
+ ipv4:
+ - address: 192.0.2.14/24
+ - name: eth2
+ ipv4:
+ - address: 192.0.2.10/24
+ - address: 192.0.2.11/24
+ ipv6:
+ - address: 2001:db8::10/32
+ - address: 2001:db8::12/32
+ state: rendered
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ rendered['commands'] | symmetric_difference(result['rendered'])\
+ \ |length == 0 }}"
+
+ - name: Structure provided configuration into device specific commands (IDEMPOTENT)
+ register: result
+ vyos.vyos.vyos_l3_interfaces: *id001
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - result['changed'] == false
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml b/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml
index ee329d3..e9781e6 100644
--- a/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml
+++ b/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml
@@ -79,6 +79,30 @@ overridden:
ipv4:
- address: 192.0.2.15/24
- name: eth2
+parsed:
+ after:
+ - name: eth1
+ ipv4:
+ - address: 192.0.2.10/24
+ ipv6:
+ - address: 2001:db8::10/32
+ - name: eth2
+ ipv4:
+ - address: 198.51.100.10/24
+ vifs:
+ - vlan_id: 101
+ ipv4:
+ - address: 198.51.100.130/25
+ ipv6:
+ - address: 2001:db8::20/32
+rendered:
+ commands:
+ - set interfaces ethernet eth1 address '192.0.2.14/24'
+ - set interfaces ethernet eth2 address '192.0.2.11/24'
+ - set interfaces ethernet eth2 address '192.0.2.10/24'
+ - set interfaces ethernet eth2 address '2001:db8::10/32'
+ - set interfaces ethernet eth2 address '2001:db8::12/32'
+
deleted:
commands:
- delete interfaces ethernet eth1 address '192.0.2.14/24'
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/_parsed_config.cfg b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_parsed_config.cfg
new file mode 100644
index 0000000..ea3bfce
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_parsed_config.cfg
@@ -0,0 +1,8 @@
+set interfaces bonding bond0 hash-policy 'layer2'
+set interfaces bonding bond0 mode 'active-backup'
+set interfaces bonding bond0 primary 'eth1'
+set interfaces bonding bond1 hash-policy 'layer2+3'
+set interfaces bonding bond1 mode 'active-backup'
+set interfaces bonding bond1 primary 'eth2'
+set interfaces ethernet eth1 bond-group 'bond0'
+set interfaces ethernet eth2 bond-group 'bond1' \ No newline at end of file
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/empty_config.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/empty_config.yaml
index 3894fb5..6e89eae 100644
--- a/tests/integration/targets/vyos_lag_interfaces/tests/cli/empty_config.yaml
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/empty_config.yaml
@@ -35,3 +35,26 @@
- assert:
that:
- result.msg == 'value of config parameter must not be empty for state overridden'
+
+- name: Parsed with empty running_config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_lag_interfaces:
+ running_config:
+ state: parsed
+
+- assert:
+ that:
+ - result.msg == 'value of running_config parameter must not be empty for state
+ parsed'
+
+- name: Rendered with empty config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_lag_interfaces:
+ config:
+ state: rendered
+
+- assert:
+ that:
+ - result.msg == 'value of config parameter must not be empty for state rendered'
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/gathered.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/gathered.yaml
new file mode 100644
index 0000000..aca168d
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/gathered.yaml
@@ -0,0 +1,26 @@
+---
+- debug:
+ msg: START vyos_lag_interfaces gathered integration tests on connection={{ ansible_connection
+ }}
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+
+ - name: Gather the provided configuration with the exisiting running configuration
+ register: result
+ vyos.vyos.vyos_lag_interfaces: &id001
+ config:
+ state: gathered
+
+ - name: Assert that gathered dicts was correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['gathered']) |length == 0\
+ \ }}"
+
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/parsed.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/parsed.yaml
new file mode 100644
index 0000000..ed7bc61
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/parsed.yaml
@@ -0,0 +1,33 @@
+---
+- debug:
+ msg: START vyos_lag_interfaces parsed integration tests on connection={{ ansible_connection
+ }}
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+
+ - name: Gather lag_interfaces facts
+ register: lag_interfaces_facts
+ vyos.vyos.vyos_facts:
+ gather_subset:
+ - default
+ gather_network_resources:
+ - lag_interfaces
+
+ - name: Provide the running configuration for parsing (config to be parsed)
+ register: result
+ vyos.vyos.vyos_lag_interfaces:
+ running_config: "{{ lookup('file', '_parsed_config.cfg') }}"
+ state: parsed
+
+ - name: Assert that correct parsing done
+ assert:
+ that: "{{ ansible_facts['network_resources']['lag_interfaces'] | symmetric_difference(result['parsed'])\
+ \ |length == 0 }}"
+
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/rendered.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/rendered.yaml
new file mode 100644
index 0000000..e6d7928
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/rendered.yaml
@@ -0,0 +1,38 @@
+---
+- debug:
+ msg: START vyos_lag_interfaces rendered integration tests on connection={{ ansible_connection
+ }}
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+
+ - name: Structure provided configuration into device specific commands
+ register: result
+ vyos.vyos.vyos_lag_interfaces:
+ config:
+ - name: bond0
+ hash_policy: layer2
+ members:
+ - member: eth1
+ mode: active-backup
+ primary: eth1
+ - name: bond1
+ hash_policy: layer2+3
+ members:
+ - member: eth2
+ mode: active-backup
+ primary: eth2
+ state: rendered
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ rendered['commands'] | symmetric_difference(result['rendered'])\
+ \ |length == 0 }}"
+
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lag_interfaces/vars/main.yaml b/tests/integration/targets/vyos_lag_interfaces/vars/main.yaml
index 5783693..9784fb9 100644
--- a/tests/integration/targets/vyos_lag_interfaces/vars/main.yaml
+++ b/tests/integration/targets/vyos_lag_interfaces/vars/main.yaml
@@ -83,6 +83,16 @@ deleted:
after:
- name: bond0
- name: bond1
+rendered:
+ commands:
+ - set interfaces bonding bond0 hash-policy 'layer2'
+ - set interfaces ethernet eth1 bond-group 'bond0'
+ - set interfaces bonding bond0 mode 'active-backup'
+ - set interfaces bonding bond0 primary 'eth1'
+ - set interfaces bonding bond1 hash-policy 'layer2+3'
+ - set interfaces ethernet eth2 bond-group 'bond1'
+ - set interfaces bonding bond1 mode 'active-backup'
+ - set interfaces bonding bond1 primary 'eth2'
round_trip:
after:
- name: bond0
diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/_parsed_config.cfg b/tests/integration/targets/vyos_lldp_global/tests/cli/_parsed_config.cfg
new file mode 100644
index 0000000..9c9f66c
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/tests/cli/_parsed_config.cfg
@@ -0,0 +1,3 @@
+set service lldp legacy-protocols 'fdp'
+set service lldp legacy-protocols 'cdp'
+set service lldp management-address '192.0.2.17'
diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/empty_config.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/empty_config.yaml
index a197c45..0333fa4 100644
--- a/tests/integration/targets/vyos_lldp_global/tests/cli/empty_config.yaml
+++ b/tests/integration/targets/vyos_lldp_global/tests/cli/empty_config.yaml
@@ -24,3 +24,26 @@
- assert:
that:
- result.msg == 'value of config parameter must not be empty for state replaced'
+
+- name: Parsed with empty running_config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_lldp_global:
+ running_config:
+ state: parsed
+
+- assert:
+ that:
+ - result.msg == 'value of running_config parameter must not be empty for state
+ parsed'
+
+- name: Rendered with empty config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_lldp_global:
+ config:
+ state: rendered
+
+- assert:
+ that:
+ - result.msg == 'value of config parameter must not be empty for state rendered'
diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/gathered.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/gathered.yaml
new file mode 100644
index 0000000..95e01de
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/tests/cli/gathered.yaml
@@ -0,0 +1,25 @@
+---
+- debug:
+ msg: START vyos_lldp_global gathered integration tests on connection={{
+ ansible_connection }}
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+
+ - name: Gather the provided configuration with the exisiting running configuration
+ register: result
+ vyos.vyos.vyos_lldp_global:
+ config:
+ state: gathered
+
+ - name: Assert that gathered dicts was correctly generated
+ assert:
+ that:
+ - "{{ populate == result['gathered'] }}"
+
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/parsed.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/parsed.yaml
new file mode 100644
index 0000000..b9c3abf
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/tests/cli/parsed.yaml
@@ -0,0 +1,15 @@
+---
+- debug:
+ msg: START vyos_lldp_global parsed integration tests on connection={{ ansible_connection
+ }}
+
+- name: Parse externally provided LLDP global config to agnostic model
+ register: result
+ vyos.vyos.vyos_lldp_global:
+ running_config: "{{ lookup('file', '_parsed_config.cfg') }}"
+ state: parsed
+
+- name: Assert that config was correctly parsed
+ assert:
+ that:
+ - "{{ parsed['after'] == result['parsed'] }}"
diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/rendered.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/rendered.yaml
new file mode 100644
index 0000000..5e9f4c5
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/tests/cli/rendered.yaml
@@ -0,0 +1,28 @@
+---
+- debug:
+ msg: START vyos_lldp_global rendered integration tests on connection={{
+ ansible_connection }}
+
+- include_tasks: _remove_config.yaml
+
+- block:
+
+ - name: Structure provided configuration into device specific commands
+ register: result
+ vyos.vyos.vyos_lldp_global:
+ config:
+ address: 192.0.2.17
+ enable: true
+ legacy_protocols:
+ - cdp
+ state: rendered
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ rendered['commands'] | symmetric_difference(result['rendered'])\
+ \ |length == 0 }}"
+
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_global/vars/main.yaml b/tests/integration/targets/vyos_lldp_global/vars/main.yaml
index 81e71be..622b8e4 100644
--- a/tests/integration/targets/vyos_lldp_global/vars/main.yaml
+++ b/tests/integration/targets/vyos_lldp_global/vars/main.yaml
@@ -31,6 +31,18 @@ replaced:
- cdp
- edp
- sonmp
+parsed:
+ after:
+ address: 192.0.2.17
+ enable: true
+ legacy_protocols:
+ - fdp
+ - cdp
+rendered:
+ commands:
+ - set service lldp legacy-protocols 'cdp'
+ - set service lldp
+ - set service lldp management-address '192.0.2.17'
deleted:
commands:
- delete service lldp management-address
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_parsed_config.cfg b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_parsed_config.cfg
new file mode 100644
index 0000000..40c96c4
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_parsed_config.cfg
@@ -0,0 +1,6 @@
+set service lldp interface eth1 location civic-based ca-type 0 ca-value 'ENGLISH'
+set service lldp interface eth1 location civic-based country-code 'US'
+set service lldp interface eth2 location coordinate-based altitude '2200'
+set service lldp interface eth2 location coordinate-based datum 'WGS84'
+set service lldp interface eth2 location coordinate-based latitude '33.524449N'
+set service lldp interface eth2 location coordinate-based longitude '222.267255W' \ No newline at end of file
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/empty_config.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/empty_config.yaml
index a5ff0a8..4ef40c9 100644
--- a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/empty_config.yaml
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/empty_config.yaml
@@ -35,3 +35,26 @@
- assert:
that:
- result.msg == 'value of config parameter must not be empty for state overridden'
+
+- name: Parsed with empty running_config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_lldp_interfaces:
+ running_config:
+ state: parsed
+
+- assert:
+ that:
+ - result.msg == 'value of running_config parameter must not be empty for state
+ parsed'
+
+- name: Rendered with empty config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_lldp_interfaces:
+ config:
+ state: rendered
+
+- assert:
+ that:
+ - result.msg == 'value of config parameter must not be empty for state rendered'
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/gathered.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/gathered.yaml
new file mode 100644
index 0000000..180b62f
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/gathered.yaml
@@ -0,0 +1,25 @@
+---
+- debug:
+ msg: START vyos_lldp_interfaces gathered integration tests on connection={{ ansible_connection
+ }}
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+
+ - name: Gather the provided configuration with the exisiting running configuration
+ register: result
+ vyos.vyos.vyos_lldp_interfaces:
+ config:
+ state: gathered
+
+ - name: Assert that gathered dicts was correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['gathered']) |length == 0\
+ \ }}"
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/parsed.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/parsed.yaml
new file mode 100644
index 0000000..0ca52be
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/parsed.yaml
@@ -0,0 +1,16 @@
+---
+- debug:
+ msg: START vyos_lldp_nterfaces parsed integration tests on connection={{ ansible_connection
+ }}
+
+- name: Parse externally provided interfaces config to agnostic model
+ register: result
+ vyos.vyos.vyos_lldp_interfaces:
+ running_config: "{{ lookup('file', '_parsed_config.cfg') }}"
+ state: parsed
+
+- name: Assert that config was correctly parsed
+ assert:
+ that:
+ - "{{ parsed['after'] | symmetric_difference(result['parsed']) |length ==\
+ \ 0 }}"
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/rendered.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/rendered.yaml
new file mode 100644
index 0000000..342e64b
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/rendered.yaml
@@ -0,0 +1,37 @@
+---
+- debug:
+ msg: START vyos_lldp_interfaces rendered integration tests on connection={{ ansible_connection
+ }}
+
+- include_tasks: _remove_config.yaml
+
+- block:
+
+ - name: Structure provided configuration into device specific commands
+ register: result
+ vyos.vyos.vyos_lldp_interfaces:
+ config:
+ - name: eth1
+ location:
+ civic_based:
+ country_code: US
+ ca_info:
+ - ca_type: 0
+ ca_value: ENGLISH
+ - name: eth2
+ location:
+ coordinate_based:
+ altitude: 2200
+ datum: WGS84
+ longitude: 222.267255W
+ latitude: 33.524449N
+ state: rendered
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ rendered['commands'] | symmetric_difference(result['rendered'])\
+ \ |length == 0 }}"
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_interfaces/vars/main.yaml b/tests/integration/targets/vyos_lldp_interfaces/vars/main.yaml
index 3cb684e..092f653 100644
--- a/tests/integration/targets/vyos_lldp_interfaces/vars/main.yaml
+++ b/tests/integration/targets/vyos_lldp_interfaces/vars/main.yaml
@@ -9,10 +9,6 @@ merged:
- set service lldp interface eth2 location coordinate-based altitude '2200'
- set service lldp interface eth2 location coordinate-based datum 'WGS84'
- set service lldp interface eth2 location coordinate-based longitude '222.267255W'
- - set service lldp interface eth2 location coordinate-based latitude '33.524449N'
- - set service lldp interface eth2 location coordinate-based altitude '2200'
- - set service lldp interface eth2 location coordinate-based datum 'WGS84'
- - set service lldp interface eth2 location coordinate-based longitude '222.267255W'
- set service lldp interface eth2
after:
- name: eth1
@@ -44,6 +40,16 @@ populate:
datum: WGS84
longitude: 222.267255W
latitude: 33.524449N
+rendered:
+ commands:
+ - set service lldp interface eth1 location civic-based country-code 'US'
+ - set service lldp interface eth1 location civic-based ca-type 0 ca-value 'ENGLISH'
+ - set service lldp interface eth1
+ - set service lldp interface eth2 location coordinate-based latitude '33.524449N'
+ - set service lldp interface eth2 location coordinate-based altitude '2200'
+ - set service lldp interface eth2 location coordinate-based datum 'WGS84'
+ - set service lldp interface eth2 location coordinate-based longitude '222.267255W'
+ - set service lldp interface eth2
replaced:
commands:
- delete service lldp interface eth2 location
@@ -91,6 +97,22 @@ overridden:
- name: eth2
location:
elin: 0000000911
+parsed:
+ after:
+ - name: eth1
+ location:
+ civic_based:
+ country_code: US
+ ca_info:
+ - ca_type: 0
+ ca_value: ENGLISH
+ - name: eth2
+ location:
+ coordinate_based:
+ altitude: 2200
+ datum: WGS84
+ longitude: 222.267255W
+ latitude: 33.524449N
deleted:
commands:
- delete service lldp interface eth1
diff --git a/tests/integration/targets/vyos_static_routes/tests/cli/deleted.yaml b/tests/integration/targets/vyos_static_routes/tests/cli/deleted.yaml
deleted file mode 100644
index 7f098f5..0000000
--- a/tests/integration/targets/vyos_static_routes/tests/cli/deleted.yaml
+++ /dev/null
@@ -1,62 +0,0 @@
----
-- debug:
- msg: Start vyos_static_routes deleted integration tests ansible_connection={{
- ansible_connection }}
-
-- include_tasks: _populate.yaml
-
-- block:
-
- - name: Delete static route based on destiation.
- register: result
- vyos.vyos.vyos_static_routes: &id001
- config:
-
- - address_families:
-
- - afi: ipv4
- routes:
-
- - dest: 192.0.2.32/28
-
- - afi: ipv6
- routes:
-
- - dest: 2001:db8:1000::/36
- state: deleted
-
- - name: Assert that the before dicts were correctly generated
- assert:
- that:
- - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
-
- - name: Assert that the correct set of commands were generated
- assert:
- that:
- - "{{ deleted_dest['commands'] | symmetric_difference(result['commands'])\
- \ |length == 0 }}"
-
- - name: Assert that the after dicts were correctly generated
- assert:
- that:
- - "{{ deleted_dest['after'] | symmetric_difference(result['after']) |length\
- \ == 0 }}"
-
- - name: Delete attributes of given interfaces (IDEMPOTENT)
- register: result
- vyos.vyos.vyos_static_routes: *id001
-
- - name: Assert that the previous task was idempotent
- assert:
- that:
- - result.changed == false
- - result.commands|length == 0
-
- - name: Assert that the before dicts were correctly generated
- assert:
- that:
- - "{{ deleted_dest['after'] | symmetric_difference(result['before']) |length\
- \ == 0 }}"
- always:
-
- - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_static_routes/tests/cli/deleted_nh.yaml b/tests/integration/targets/vyos_static_routes/tests/cli/deleted_nh.yaml
deleted file mode 100644
index f6075d2..0000000
--- a/tests/integration/targets/vyos_static_routes/tests/cli/deleted_nh.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
----
-- debug:
- msg: Start vyos_static_routes deleted integration tests ansible_connection={{
- ansible_connection }}
-
-- include_tasks: _populate.yaml
-
-- block:
-
- - name: Delete static route based on next_hop.
- register: result
- vyos.vyos.vyos_static_routes: &id001
- config:
-
- - address_families:
-
- - afi: ipv4
- routes:
-
- - dest: 192.0.2.32/28
- next_hops:
-
- - forward_router_address: 192.0.2.9
-
- - afi: ipv6
- routes:
-
- - dest: 2001:db8:1000::/36
- next_hops:
-
- - forward_router_address: 2001:db8:2000:2::1
- state: deleted
-
- - name: Assert that the before dicts were correctly generated
- assert:
- that:
- - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
-
- - name: Assert that the correct set of commands were generated
- assert:
- that:
- - "{{ deleted_nh['commands'] | symmetric_difference(result['commands'])\
- \ |length == 0 }}"
-
- - name: Assert that the after dicts were correctly generated
- assert:
- that:
- - "{{ deleted_nh['after'] | symmetric_difference(result['after']) |length\
- \ == 0 }}"
-
- - name: Delete attributes of given interfaces (IDEMPOTENT)
- register: result
- vyos.vyos.vyos_static_routes: *id001
-
- - name: Assert that the previous task was idempotent
- assert:
- that:
- - result.changed == false
- - result.commands|length == 0
-
- - name: Assert that the before dicts were correctly generated
- assert:
- that:
- - "{{ deleted_nh['after'] | symmetric_difference(result['before']) |length\
- \ == 0 }}"
- always:
-
- - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_static_routes/vars/main.yaml b/tests/integration/targets/vyos_static_routes/vars/main.yaml
index 93b875f..6ce4cea 100644
--- a/tests/integration/targets/vyos_static_routes/vars/main.yaml
+++ b/tests/integration/targets/vyos_static_routes/vars/main.yaml
@@ -94,31 +94,7 @@ rendered:
- set protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::2'
- set protocols static route6 2001:db8:1000::/36 blackhole distance '2'
- set protocols static route6 2001:db8:1000::/36
-deleted_dest:
- commands:
- - delete protocols static route 192.0.2.32/28
- - delete protocols static route6 2001:db8:1000::/36
- after: []
-deleted_nh:
- commands:
- - delete protocols static route 192.0.2.32/28 next-hop '192.0.2.9'
- - delete protocols static route6 2001:db8:1000::/36 next-hop '2001:db8:2000:2::1'
- after:
- - address_families:
- - afi: ipv4
- routes:
- - dest: 192.0.2.32/28
- blackhole_config:
- type: blackhole
- next_hops:
- - forward_router_address: 192.0.2.10
- - afi: ipv6
- routes:
- - dest: 2001:db8:1000::/36
- blackhole_config:
- distance: 2
- next_hops:
- - forward_router_address: 2001:db8:2000:2::2
+
deleted_afi_all:
commands:
- delete protocols static route
diff --git a/tests/unit/modules/network/vyos/test_vyos_static_route.py b/tests/unit/modules/network/vyos/test_vyos_static_route.py
index 762508c..8eef5fb 100644
--- a/tests/unit/modules/network/vyos/test_vyos_static_route.py
+++ b/tests/unit/modules/network/vyos/test_vyos_static_route.py
@@ -21,7 +21,7 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
from ansible_collections.vyos.vyos.tests.unit.compat.mock import patch
-from ansible.modules.network.vyos import _vyos_static_route
+from ansible.modules.network.vyos import vyos_static_route
from ansible_collections.vyos.vyos.tests.unit.modules.utils import (
set_module_args,
)
@@ -30,18 +30,18 @@ from .vyos_module import TestVyosModule
class TestVyosStaticRouteModule(TestVyosModule):
- module = _vyos_static_route
+ module = vyos_static_route
def setUp(self):
super(TestVyosStaticRouteModule, self).setUp()
self.mock_get_config = patch(
- "ansible.modules.network.vyos._vyos_static_route.get_config"
+ "ansible.modules.network.vyos.vyos_static_route.get_config"
)
self.get_config = self.mock_get_config.start()
self.mock_load_config = patch(
- "ansible.modules.network.vyos._vyos_static_route.load_config"
+ "ansible.modules.network.vyos.vyos_static_route.load_config"
)
self.load_config = self.mock_load_config.start()
diff --git a/tests/unit/modules/network/vyos/test_vyos_static_routes.py b/tests/unit/modules/network/vyos/test_vyos_static_routes.py
index 3646d61..85c0842 100644
--- a/tests/unit/modules/network/vyos/test_vyos_static_routes.py
+++ b/tests/unit/modules/network/vyos/test_vyos_static_routes.py
@@ -277,17 +277,9 @@ class TestVyosStaticRoutesModule(TestVyosModule):
def test_vyos_static_routes_deleted(self):
set_module_args(
dict(
- config=[
- dict(
- address_families=[
- dict(
- afi="ipv4", routes=[dict(dest="192.0.2.32/28")]
- )
- ]
- )
- ],
+ config=[dict(address_families=[dict(afi="ipv4")])],
state="deleted",
)
)
- commands = ["delete protocols static route 192.0.2.32/28"]
+ commands = ["delete protocols static route"]
self.execute_module(changed=True, commands=commands)