summaryrefslogtreecommitdiff
path: root/plugins/modules/vyos_vlan.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/modules/vyos_vlan.py')
-rw-r--r--plugins/modules/vyos_vlan.py197
1 files changed, 0 insertions, 197 deletions
diff --git a/plugins/modules/vyos_vlan.py b/plugins/modules/vyos_vlan.py
deleted file mode 100644
index 18eca92..0000000
--- a/plugins/modules/vyos_vlan.py
+++ /dev/null
@@ -1,197 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# GNU General Public License v3.0+
-
-from __future__ import absolute_import, division, print_function
-
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: vyos_vlan
-short_description: Manage VLANs on VyOS network devices via REST API.
-description:
- - Manages 802.1Q VLAN sub-interfaces on VyOS Ethernet interfaces using
- the HTTPS REST API.
- - Mirrors C(vyos.vyos.vyos_vlan) but uses the HTTP API.
-version_added: "1.0.0"
-author:
- - VyOS Community (@vyos)
-options:
- vlan_id:
- description: VLAN ID (0-4094).
- type: int
- name:
- description: VLAN name (used as description on the VIF).
- type: str
- address:
- description: IP address for the VLAN interface.
- type: str
- interfaces:
- description: List of physical interfaces to configure the VLAN on.
- type: list
- elements: str
- aggregate:
- description: List of VLAN definitions.
- type: list
- elements: dict
- suboptions:
- vlan_id:
- type: int
- required: true
- name:
- type: str
- address:
- type: str
- interfaces:
- type: list
- elements: str
- required: true
- state:
- type: str
- choices: [present, absent]
- state:
- description: C(present) to configure, C(absent) to remove.
- type: str
- choices: [present, absent]
- default: present
- purge:
- description: Remove VLANs not defined in aggregate.
- type: bool
- default: false
- hostname:
- type: str
- required: true
- port:
- type: int
- default: 443
- api_key:
- type: str
- required: true
- no_log: true
- timeout:
- type: int
- default: 30
- verify_ssl:
- type: bool
- default: false
-"""
-
-RETURN = r"""
-commands:
- description: set/delete commands issued.
- returned: always
- type: list
-"""
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible_collections.vyos.rest.plugins.module_utils.vyos_rest import (
- VYOS_REST_CONNECTION_ARGSPEC,
- VyOSRestClient,
- VyOSRestError,
-)
-
-
-def _apply_vlan(client, vlan, commands):
- vid = str(vlan["vlan_id"])
- for iface in vlan.get("interfaces") or []:
- # Detect interface type
- if iface.startswith("bond"):
- itype = "bonding"
- else:
- itype = "ethernet"
- vif_base = ["interfaces", itype, iface, "vif", vid]
- client.configure_set(vif_base)
- commands.append("set interfaces {t} {i} vif {v}".format(t=itype, i=iface, v=vid))
- if vlan.get("name"):
- client.configure_set(vif_base + ["description"], vlan["name"])
- commands.append(
- "set interfaces {t} {i} vif {v} description '{n}'".format(
- t=itype,
- i=iface,
- v=vid,
- n=vlan["name"],
- ),
- )
- if vlan.get("address"):
- client.configure_set(vif_base + ["address"], vlan["address"])
- commands.append(
- "set interfaces {t} {i} vif {v} address {a}".format(
- t=itype,
- i=iface,
- v=vid,
- a=vlan["address"],
- ),
- )
-
-
-def _delete_vlan(client, vlan, commands):
- vid = str(vlan["vlan_id"])
- for iface in vlan.get("interfaces") or []:
- itype = "bonding" if iface.startswith("bond") else "ethernet"
- try:
- client.configure_delete(["interfaces", itype, iface, "vif", vid])
- commands.append("delete interfaces {t} {i} vif {v}".format(t=itype, i=iface, v=vid))
- except VyOSRestError:
- pass
-
-
-def main():
- vlan_spec = dict(
- vlan_id=dict(type="int", required=True),
- name=dict(type="str"),
- address=dict(type="str"),
- interfaces=dict(type="list", elements="str"),
- state=dict(type="str", choices=["present", "absent"]),
- )
- argument_spec = dict(
- vlan_id=dict(type="int"),
- name=dict(type="str"),
- address=dict(type="str"),
- interfaces=dict(type="list", elements="str"),
- aggregate=dict(type="list", elements="dict", options=vlan_spec),
- state=dict(type="str", default="present", choices=["present", "absent"]),
- purge=dict(type="bool", default=False),
- )
- argument_spec.update(VYOS_REST_CONNECTION_ARGSPEC)
- module = AnsibleModule(
- argument_spec=argument_spec,
- mutually_exclusive=[["aggregate", "vlan_id"]],
- supports_check_mode=True,
- )
- if module.check_mode:
- module.exit_json(changed=True, commands=["(check mode)"])
-
- client = VyOSRestClient(module)
- commands = []
- changed = False
-
- vlans = module.params.get("aggregate") or []
- if module.params.get("vlan_id"):
- vlans = [
- {
- "vlan_id": module.params["vlan_id"],
- "name": module.params.get("name"),
- "address": module.params.get("address"),
- "interfaces": module.params.get("interfaces") or [],
- "state": module.params.get("state", "present"),
- },
- ]
-
- try:
- for vlan in vlans:
- v_state = vlan.get("state") or module.params.get("state", "present")
- if v_state == "absent":
- _delete_vlan(client, vlan, commands)
- else:
- _apply_vlan(client, vlan, commands)
- changed = True
- except VyOSRestError as exc:
- module.fail_json(msg=str(exc))
-
- module.exit_json(changed=changed, commands=commands)
-
-
-if __name__ == "__main__":
- main()