summaryrefslogtreecommitdiff
path: root/plugins/modules/vyos_static_route.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/modules/vyos_static_route.py')
-rw-r--r--plugins/modules/vyos_static_route.py335
1 files changed, 0 insertions, 335 deletions
diff --git a/plugins/modules/vyos_static_route.py b/plugins/modules/vyos_static_route.py
deleted file mode 100644
index 7f3719de..00000000
--- a/plugins/modules/vyos_static_route.py
+++ /dev/null
@@ -1,335 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# (c) 2017, Ansible by Red Hat, inc
-#
-# This file is part of Ansible by Red Hat
-#
-# Ansible is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Ansible is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
-#
-
-from __future__ import absolute_import, division, print_function
-
-__metaclass__ = type
-
-DOCUMENTATION = """
-module: vyos_static_route
-author: Trishna Guha (@trishnaguha)
-short_description: (deprecated, removed after 2022-06-01) Manage static IP routes
- on Vyatta VyOS network devices
-description:
-- This module provides declarative management of static IP routes on Vyatta VyOS network
- devices.
-version_added: 1.0.0
-deprecated:
- alternative: vyos_static_routes
- why: Updated modules released with more functionality.
- removed_at_date: '2022-06-01'
-notes:
-- Tested against VyOS 1.1.8 (helium).
-- This module works with connection C(ansible.netcommon.network_cli). See L(the VyOS OS Platform Options,../network/user_guide/platform_vyos.html).
-options:
- prefix:
- description:
- - Network prefix of the static route. C(mask) param should be ignored if C(prefix)
- is provided with C(mask) value C(prefix/mask).
- type: str
- mask:
- description:
- - Network prefix mask of the static route.
- type: str
- next_hop:
- description:
- - Next hop IP of the static route.
- type: str
- admin_distance:
- description:
- - Admin distance of the static route.
- type: int
- aggregate:
- description: List of static route definitions
- type: list
- elements: dict
- suboptions:
- prefix:
- description:
- - Network prefix of the static route. C(mask) param should be ignored if C(prefix)
- is provided with C(mask) value C(prefix/mask).
- required: True
- type: str
- mask:
- description:
- - Network prefix mask of the static route.
- type: str
- next_hop:
- description:
- - Next hop IP of the static route.
- type: str
- admin_distance:
- description:
- - Admin distance of the static route.
- type: int
- state:
- description:
- - State of the static route configuration.
- choices:
- - present
- - absent
- type: str
- state:
- description:
- - State of the static route configuration.
- default: present
- choices:
- - present
- - absent
- type: str
-extends_documentation_fragment:
-- vyos.vyos.vyos
-
-
-"""
-
-EXAMPLES = """
-- name: configure static route
- vyos.vyos.vyos_static_route:
- prefix: 192.168.2.0
- mask: 24
- next_hop: 10.0.0.1
-
-- name: configure static route prefix/mask
- vyos.vyos.vyos_static_route:
- prefix: 192.168.2.0/16
- next_hop: 10.0.0.1
-
-- name: remove configuration
- vyos.vyos.vyos_static_route:
- prefix: 192.168.2.0
- mask: 16
- next_hop: 10.0.0.1
- state: absent
-
-- name: configure aggregates of static routes
- vyos.vyos.vyos_static_route:
- aggregate:
- - {prefix: 192.168.2.0, mask: 24, next_hop: 10.0.0.1}
- - {prefix: 192.168.3.0, mask: 16, next_hop: 10.0.2.1}
- - {prefix: 192.168.3.0/16, next_hop: 10.0.2.1}
-
-- name: Remove static route collections
- vyos.vyos.vyos_static_route:
- aggregate:
- - {prefix: 172.24.1.0/24, next_hop: 192.168.42.64}
- - {prefix: 172.24.3.0/24, next_hop: 192.168.42.64}
- state: absent
-"""
-
-RETURN = """
-commands:
- description: The list of configuration mode commands to send to the device
- returned: always
- type: list
- sample:
- - set protocols static route 192.168.2.0/16 next-hop 10.0.0.1
-"""
-import re
-
-from copy import deepcopy
-
-from ansible.module_utils._text import to_text
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.common.validation import check_required_together
-from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
- remove_default_spec,
-)
-from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.vyos import (
- get_config,
- load_config,
-)
-from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.vyos import (
- vyos_argument_spec,
-)
-
-
-def spec_to_commands(updates, module):
- commands = list()
- want, have = updates
- for w in want:
- prefix = w["prefix"]
- mask = w["mask"]
- next_hop = w["next_hop"]
- admin_distance = w["admin_distance"]
- state = w["state"]
- del w["state"]
-
- if state == "absent" and w in have:
- commands.append(
- "delete protocols static route %s/%s" % (prefix, mask)
- )
- elif state == "present" and w not in have:
- cmd = "set protocols static route %s/%s next-hop %s" % (
- prefix,
- mask,
- next_hop,
- )
- if admin_distance != "None":
- cmd += " distance %s" % (admin_distance)
- commands.append(cmd)
-
- return commands
-
-
-def config_to_dict(module):
- data = get_config(module)
- obj = []
-
- for line in data.split("\n"):
- if line.startswith("set protocols static route"):
- match = re.search(r"static route (\S+)", line, re.M)
- prefix = match.group(1).split("/")[0]
- mask = match.group(1).split("/")[1]
- if "next-hop" in line:
- match_hop = re.search(r"next-hop (\S+)", line, re.M)
- next_hop = match_hop.group(1).strip("'")
-
- match_distance = re.search(r"distance (\S+)", line, re.M)
- if match_distance is not None:
- admin_distance = match_distance.group(1)[1:-1]
- else:
- admin_distance = None
-
- if admin_distance is not None:
- obj.append(
- {
- "prefix": prefix,
- "mask": mask,
- "next_hop": next_hop,
- "admin_distance": admin_distance,
- }
- )
- else:
- obj.append(
- {
- "prefix": prefix,
- "mask": mask,
- "next_hop": next_hop,
- "admin_distance": "None",
- }
- )
-
- return obj
-
-
-def map_params_to_obj(module, required_together=None):
- obj = []
- aggregate = module.params.get("aggregate")
- if aggregate:
- for item in aggregate:
- for key in item:
- if item.get(key) is None:
- item[key] = module.params[key]
-
- try:
- check_required_together(required_together, item)
- except TypeError as exc:
- module.fail_json(to_text(exc))
- d = item.copy()
- if "/" in d["prefix"]:
- d["mask"] = d["prefix"].split("/")[1]
- d["prefix"] = d["prefix"].split("/")[0]
-
- if "admin_distance" in d:
- d["admin_distance"] = str(d["admin_distance"])
-
- obj.append(d)
- else:
- prefix = module.params["prefix"].strip()
- if "/" in prefix:
- mask = prefix.split("/")[1]
- prefix = prefix.split("/")[0]
- else:
- mask = module.params["mask"].strip()
- next_hop = module.params["next_hop"].strip()
- admin_distance = str(module.params["admin_distance"])
- state = module.params["state"]
-
- obj.append(
- {
- "prefix": prefix,
- "mask": mask,
- "next_hop": next_hop,
- "admin_distance": admin_distance,
- "state": state,
- }
- )
-
- return obj
-
-
-def main():
- """main entry point for module execution"""
- element_spec = dict(
- prefix=dict(type="str"),
- mask=dict(type="str"),
- next_hop=dict(type="str"),
- admin_distance=dict(type="int"),
- state=dict(default="present", choices=["present", "absent"]),
- )
-
- aggregate_spec = deepcopy(element_spec)
- aggregate_spec["prefix"] = dict(required=True)
-
- # remove default in aggregate spec, to handle common arguments
- remove_default_spec(aggregate_spec)
-
- argument_spec = dict(
- aggregate=dict(type="list", elements="dict", options=aggregate_spec)
- )
-
- argument_spec.update(element_spec)
- argument_spec.update(vyos_argument_spec)
-
- required_one_of = [["aggregate", "prefix"]]
- required_together = [["prefix", "next_hop"]]
- mutually_exclusive = [["aggregate", "prefix"]]
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- required_one_of=required_one_of,
- required_together=required_together,
- mutually_exclusive=mutually_exclusive,
- supports_check_mode=True,
- )
-
- warnings = list()
-
- result = {"changed": False}
- if warnings:
- result["warnings"] = warnings
- want = map_params_to_obj(module, required_together=required_together)
- have = config_to_dict(module)
-
- commands = spec_to_commands((want, have), module)
- result["commands"] = commands
-
- if commands:
- commit = not module.check_mode
- load_config(module, commands, commit=commit)
- result["changed"] = True
-
- module.exit_json(**result)
-
-
-if __name__ == "__main__":
- main()