summaryrefslogtreecommitdiff
path: root/plugins/modules/vyos_system.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/modules/vyos_system.py')
-rw-r--r--plugins/modules/vyos_system.py147
1 files changed, 147 insertions, 0 deletions
diff --git a/plugins/modules/vyos_system.py b/plugins/modules/vyos_system.py
new file mode 100644
index 0000000..d1d696e
--- /dev/null
+++ b/plugins/modules/vyos_system.py
@@ -0,0 +1,147 @@
+#!/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_system
+short_description: Manage system settings on VyOS via the REST API.
+description:
+ - Manages system-level settings — hostname, domain name, name servers,
+ domain search list — using the VyOS HTTPS REST API.
+ - Mirrors C(vyos.vyos.vyos_system) but uses the HTTP API.
+version_added: "1.0.0"
+author:
+ - VyOS Community (@vyos)
+options:
+ host_name:
+ description: System hostname.
+ type: str
+ domain_name:
+ description: System domain name.
+ type: str
+ name_server:
+ description: List of DNS name servers. Mutually exclusive with domain_search.
+ type: list
+ elements: str
+ aliases: [name_servers]
+ domain_search:
+ description: List of domain search suffixes. Mutually exclusive with name_server.
+ type: list
+ elements: str
+ state:
+ description: C(present) to apply, C(absent) to remove.
+ type: str
+ choices: [present, absent]
+ default: present
+ 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 main():
+ argument_spec = dict(
+ host_name=dict(type="str"),
+ domain_name=dict(type="str"),
+ name_server=dict(type="list", elements="str", aliases=["name_servers"]),
+ domain_search=dict(type="list", elements="str"),
+ state=dict(type="str", default="present", choices=["present", "absent"]),
+ )
+ argument_spec.update(VYOS_REST_CONNECTION_ARGSPEC)
+ module = AnsibleModule(
+ argument_spec=argument_spec,
+ mutually_exclusive=[["name_server", "domain_search"]],
+ supports_check_mode=True,
+ )
+
+ if module.check_mode:
+ module.exit_json(changed=True, commands=["(check mode)"])
+
+ client = VyOSRestClient(module)
+ state = module.params["state"]
+ commands = []
+ changed = False
+
+ try:
+ if state == "present":
+ if module.params.get("host_name"):
+ client.configure_set(["system", "host-name"], module.params["host_name"])
+ commands.append("set system host-name '{h}'".format(h=module.params["host_name"]))
+ changed = True
+ if module.params.get("domain_name"):
+ client.configure_set(["system", "domain-name"], module.params["domain_name"])
+ commands.append(
+ "set system domain-name '{d}'".format(d=module.params["domain_name"]),
+ )
+ changed = True
+ for ns in module.params.get("name_server") or []:
+ client.configure_set(["system", "name-server"], ns)
+ commands.append("set system name-server {ns}".format(ns=ns))
+ changed = True
+ for ds in module.params.get("domain_search") or []:
+ client.configure_set(["system", "domain-search", "domain"], ds)
+ commands.append("set system domain-search domain {ds}".format(ds=ds))
+ changed = True
+ else:
+ if module.params.get("host_name"):
+ try:
+ client.configure_delete(["system", "host-name"])
+ commands.append("delete system host-name")
+ changed = True
+ except VyOSRestError:
+ pass
+ if module.params.get("domain_name"):
+ try:
+ client.configure_delete(["system", "domain-name"])
+ commands.append("delete system domain-name")
+ changed = True
+ except VyOSRestError:
+ pass
+ if module.params.get("name_server"):
+ try:
+ client.configure_delete(["system", "name-server"])
+ commands.append("delete system name-server")
+ changed = True
+ except VyOSRestError:
+ pass
+ except VyOSRestError as exc:
+ module.fail_json(msg=str(exc))
+
+ module.exit_json(changed=changed, commands=commands)
+
+
+if __name__ == "__main__":
+ main()