summaryrefslogtreecommitdiff
path: root/plugins/modules
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/modules')
-rw-r--r--plugins/modules/vyos_info.py115
-rw-r--r--plugins/modules/vyos_lldp_global.py32
2 files changed, 25 insertions, 122 deletions
diff --git a/plugins/modules/vyos_info.py b/plugins/modules/vyos_info.py
deleted file mode 100644
index 8946868..0000000
--- a/plugins/modules/vyos_info.py
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-
-
-__metaclass__ = type
-
-DOCUMENTATION = r"""
----
-module: vyos_info
-short_description: Retrieve system information from a VyOS device via the REST API.
-description:
- - Queries the public C(/info) endpoint (HTTP GET) which requires no
- authentication and returns the VyOS version, hostname, and a welcome banner.
-version_added: "1.0.0"
-author:
- - VyOS Community (@vyos)
-options:
- hostname:
- description: IP address or FQDN of the VyOS device.
- type: str
- required: true
- port:
- description: HTTPS port for the REST API.
- type: int
- default: 443
- api_key:
- description: >
- API key. Not required for this module (the /info endpoint is public)
- but kept in the spec for consistency with other modules in this collection.
- type: str
- no_log: true
- timeout:
- description: Request timeout in seconds.
- type: int
- default: 10
- verify_ssl:
- description: Validate the device's TLS certificate.
- type: bool
- default: false
-requirements:
- - VyOS 1.3+
-examples: |
- - name: Get VyOS system info
- vyos.rest.vyos_info:
- hostname: 192.168.1.1
- register: sys_info
-
- - name: Print VyOS version
- ansible.builtin.debug:
- msg: "Running VyOS {{ sys_info.version }}"
-"""
-
-RETURN = r"""
-version:
- description: VyOS version string.
- returned: success
- type: str
- sample: "1.4-rolling-202401010000"
-hostname:
- description: System hostname.
- returned: success
- type: str
- sample: vyos-router
-banner:
- description: Welcome banner text.
- returned: success
- type: str
- sample: "Welcome to VyOS"
-info:
- description: Full info dict as returned by the device.
- returned: success
- type: dict
-"""
-
-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 main():
- argument_spec = dict()
- argument_spec.update(VYOS_REST_CONNECTION_ARGSPEC)
- # api_key not strictly required for /info
- argument_spec["api_key"]["required"] = False
- argument_spec["api_key"]["default"] = ""
-
- module = AnsibleModule(
- argument_spec=argument_spec,
- supports_check_mode=True,
- )
-
- client = VyOSRestClient(module)
- try:
- result = client.info()
- except VyOSRestError as exc:
- module.fail_json(msg=str(exc))
-
- data = result.get("data", {})
- module.exit_json(
- changed=False,
- version=data.get("version", ""),
- hostname=data.get("hostname", ""),
- banner=data.get("banner", ""),
- info=data,
- )
-
-
-if __name__ == "__main__":
- main()
diff --git a/plugins/modules/vyos_lldp_global.py b/plugins/modules/vyos_lldp_global.py
index 0a9618d..1eb10bd 100644
--- a/plugins/modules/vyos_lldp_global.py
+++ b/plugins/modules/vyos_lldp_global.py
@@ -74,35 +74,53 @@ def _get(vyos):
if "management-address" in raw:
v = raw["management-address"]
result["addresses"] = (
- list(v.keys()) if isinstance(v, dict) else ([v] if isinstance(v, str) else list(v))
+ sorted(list(v.keys()))
+ if isinstance(v, dict)
+ else ([v] if isinstance(v, str) else sorted(list(v)))
)
if "snmp" in raw:
result["snmp"] = "enable"
if "legacy-protocols" in raw:
v = raw["legacy-protocols"]
result["legacy_protocols"] = (
- list(v.keys()) if isinstance(v, dict) else ([v] if isinstance(v, str) else list(v))
+ sorted(list(v.keys()))
+ if isinstance(v, dict)
+ else ([v] if isinstance(v, str) else sorted(list(v)))
)
return result
def _build(want, have, state):
cmds = []
+
if state in ("replaced", "deleted") and have:
cmds.append(("delete", _BASE))
if state == "deleted":
return cmds
- if want.get("enable") is not False:
+
+ # enable — only set if not already enabled
+ if want.get("enable") is not False and not have.get("enable"):
cmds.append(("set", _BASE))
+
+ # addresses — only add missing ones
+ have_addrs = set(have.get("addresses") or [])
for addr in want.get("addresses") or []:
- cmds.append(("set", _BASE + ["management-address", addr]))
+ if addr not in have_addrs:
+ cmds.append(("set", _BASE + ["management-address", addr]))
+
+ # snmp
if want.get("snmp"):
- if want["snmp"] == "disable":
+ if want["snmp"] == "disable" and have.get("snmp"):
cmds.append(("delete", _BASE + ["snmp"]))
- else:
+ elif want["snmp"] != "disable" and not have.get("snmp"):
cmds.append(("set", _BASE + ["snmp"]))
+
+ # legacy_protocols — only add missing ones
+ have_protos = set(have.get("legacy_protocols") or [])
for p in want.get("legacy_protocols") or []:
- cmds.append(("set", _BASE + ["legacy-protocols", p]))
+ if p not in have_protos:
+ cmds.append(("set", _BASE + ["legacy-protocols", p]))
+
return cmds