summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/module_utils/network/vyos/argspec/ntp_global/ntp_global.py5
-rw-r--r--plugins/module_utils/network/vyos/config/ntp_global/ntp_global.py60
-rw-r--r--plugins/module_utils/network/vyos/rm_templates/ntp_global.py60
-rw-r--r--plugins/modules/vyos_ntp_global.py16
4 files changed, 93 insertions, 48 deletions
diff --git a/plugins/module_utils/network/vyos/argspec/ntp_global/ntp_global.py b/plugins/module_utils/network/vyos/argspec/ntp_global/ntp_global.py
index cbbfd22..6940fb7 100644
--- a/plugins/module_utils/network/vyos/argspec/ntp_global/ntp_global.py
+++ b/plugins/module_utils/network/vyos/argspec/ntp_global/ntp_global.py
@@ -46,11 +46,14 @@ class Ntp_globalArgs(object): # pylint: disable=R0903
"type": "list",
"elements": "str",
"choices": [
- "noselect",
"dynamic",
+ "noselect",
"pool",
"preempt",
"prefer",
+ "nts",
+ "ptp",
+ "interleave",
],
},
},
diff --git a/plugins/module_utils/network/vyos/config/ntp_global/ntp_global.py b/plugins/module_utils/network/vyos/config/ntp_global/ntp_global.py
index 0af1af5..5d29406 100644
--- a/plugins/module_utils/network/vyos/config/ntp_global/ntp_global.py
+++ b/plugins/module_utils/network/vyos/config/ntp_global/ntp_global.py
@@ -30,11 +30,11 @@ from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.facts.facts
from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.rm_templates.ntp_global import (
NtpTemplate,
)
-
+from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.utils.version import (
+ LooseVersion,
+)
from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.vyos import get_os_version
-from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.utils.version import LooseVersion
-
class Ntp_global(ResourceModule):
"""
@@ -74,6 +74,16 @@ class Ntp_global(ResourceModule):
want, have and desired state.
"""
+ if LooseVersion(get_os_version(self._module)) >= LooseVersion("1.4"):
+ path = "service"
+ ac = "allow-client"
+ else:
+ path = "system"
+ ac = "allow-clients"
+
+ self._tmplt.set_ntp_path(path)
+ self._tmplt.set_ntp_ac(ac)
+
wantd = self._ntp_list_to_dict(self.want)
haved = self._ntp_list_to_dict(self.have)
@@ -89,6 +99,7 @@ class Ntp_global(ResourceModule):
commandlist = self._commandlist(haved)
servernames = self._servernames(haved)
# removing the servername and commandlist from the list after deleting it from haved
+ # iterate through the top-level items to delete
for k, have in iteritems(haved):
if k not in wantd:
for hk, hval in iteritems(have):
@@ -105,8 +116,14 @@ class Ntp_global(ResourceModule):
elif hk == "server" and have["server"] in servernames:
self._compareoverride(want={}, have=have)
servernames.remove(have["server"])
-
- # remove existing config for overridden,replaced and deleted
+ # if everything is deleted add the delete command for {path} ntp
+ # this should be equiv: servernames == [] and commandlist == ["server"]:
+ if wantd == {} and haved != {}:
+ self.commands.append(
+ self._tmplt.render({}, "service_delete", True),
+ )
+
+ # remove existing config for overridden and replaced
# Getting the list of the server names from haved
# to avoid the duplication of overridding/replacing the servers
if self.state in ["overridden", "replaced"]:
@@ -114,27 +131,17 @@ class Ntp_global(ResourceModule):
servernames = self._servernames(haved)
for k, have in iteritems(haved):
- if k not in wantd and "server" not in have:
- self._compareoverride(want={}, have=have)
- # removing the servername from the list after deleting it from haved
- elif k not in wantd and have["server"] in servernames:
- self._compareoverride(want={}, have=have)
- servernames.remove(have["server"])
+ if k not in wantd:
+ if "server" not in have:
+ self._compareoverride(want={}, have=have)
+ # removing the servername from the list after deleting it from haved
+ elif have["server"] in servernames:
+ self._compareoverride(want={}, have=have)
+ servernames.remove(have["server"])
for k, want in iteritems(wantd):
self._compare(want=want, have=haved.pop(k, {}))
- if LooseVersion(get_os_version(self._module)) >= LooseVersion("1.4"):
- path = "service"
- ac = "allow-client"
- else:
- path = "system"
- ac = "allow-clients"
-
- if self.commands:
- self.commands = [cl.replace('%%path%%', path) for cl in self.commands]
- self.commands = [nc.replace('%%ac%%', ac) for nc in self.commands]
-
def _compare(self, want, have):
"""Leverages the base class `compare()` method and
populates the list of commands to be run by comparing
@@ -193,11 +200,6 @@ class Ntp_global(ResourceModule):
servernames = []
for k, have in iteritems(haved):
for sk, sval in iteritems(have):
- if sk == "server" and sval not in [
- "0.pool.ntp.org",
- "1.pool.ntp.org",
- "2.pool.ntp.org",
- ]:
- if sval not in servernames:
- servernames.append(sval)
+ if sk != "options" and sval not in servernames:
+ servernames.append(sval)
return servernames
diff --git a/plugins/module_utils/network/vyos/rm_templates/ntp_global.py b/plugins/module_utils/network/vyos/rm_templates/ntp_global.py
index 1e011dd..e9d8a0c 100644
--- a/plugins/module_utils/network/vyos/rm_templates/ntp_global.py
+++ b/plugins/module_utils/network/vyos/rm_templates/ntp_global.py
@@ -25,8 +25,28 @@ from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.r
class NtpTemplate(NetworkTemplate):
def __init__(self, lines=None, module=None):
prefix = {"set": "set", "remove": "delete"}
+ self._overrides = { # 1.4+ by default
+ "_path": "service", # 1.4 or greater, "system" for 1.3 or less
+ "_ac": "allow-client", # 1.4 or greater, "allow-clients" for 1.3 or less
+ }
super(NtpTemplate, self).__init__(lines=lines, tmplt=self, prefix=prefix, module=module)
+ def set_ntp_path(self, path: str):
+ """set_ntp_path"""
+ self._overrides["_path"] = path
+
+ def set_ntp_ac(self, ac: str):
+ """set_ntp_ac"""
+ self._overrides["_ac"] = ac
+
+ def render(self, data, parser_name, negate=False):
+ """render"""
+ # add path to the data before rendering
+ data = data.copy()
+ data.update(self._overrides)
+ # call the original method
+ return super(NtpTemplate, self).render(data, parser_name, negate)
+
# fmt: off
PARSERS = [
@@ -35,11 +55,11 @@ class NtpTemplate(NetworkTemplate):
"name": "allow_clients",
"getval": re.compile(
r"""
- ^set\s(?P<path>system|service)?\sntp\s(?P<ac>allow-clients|allow-client)?\saddress (\s(?P<ipaddress>\S+))?
+ ^set\s(?P<path>system|service)\sntp\s(?P<ac>allow-clients|allow-client)\saddress (\s(?P<ipaddress>\S+))?
$""",
re.VERBOSE,
),
- "setval": "%%path%% ntp %%ac%% address {{allow_clients}}",
+ "setval": "{{_path}} ntp {{_ac}} address {{allow_clients}}",
"result": {
"allow_clients": ["{{ipaddress}}"],
},
@@ -50,11 +70,11 @@ class NtpTemplate(NetworkTemplate):
"name": "allow_clients_delete",
"getval": re.compile(
r"""
- ^set\s(?P<path>system|service)?\sntp\s(?P<ac>allow-clients|allow-client)?
+ ^set\s(?P<path>system|service)\sntp\s(?P<ac>allow-clients|allow-client)
$""",
re.VERBOSE,
),
- "setval": "%%path%% ntp %%ac%%",
+ "setval": "{{_path}} ntp {{_ac}}",
"result": {
},
@@ -66,11 +86,11 @@ class NtpTemplate(NetworkTemplate):
"name": "listen_addresses",
"getval": re.compile(
r"""
- ^set\s(?P<path>system|service)?\sntp\slisten-address (\s(?P<ip_address>\S+))?
+ ^set\s(?P<path>system|service)\sntp\slisten-address (\s(?P<ip_address>\S+))?
$""",
re.VERBOSE,
),
- "setval": "%%path%% ntp listen-address {{listen_addresses}}",
+ "setval": "{{_path}} ntp listen-address {{listen_addresses}}",
"result": {
"listen_addresses": ["{{ip_address}}"],
},
@@ -81,11 +101,25 @@ class NtpTemplate(NetworkTemplate):
"name": "listen_addresses_delete",
"getval": re.compile(
r"""
- ^set\s(?P<path>system|service)?\sntp\slisten-address
+ ^set\s(?P<path>system|service)\sntp\slisten-address
+ $""",
+ re.VERBOSE,
+ ),
+ "setval": "{{_path}} ntp listen-address",
+ "result": {
+ },
+ },
+
+ # set {{path}} ntp - for deleting the ntp configuration
+ {
+ "name": "service_delete",
+ "getval": re.compile(
+ r"""
+ ^set\s(?P<path>system|service)\sntp$
$""",
re.VERBOSE,
),
- "setval": "%%path%% ntp listen-address",
+ "setval": "{{_path}} ntp",
"result": {
},
},
@@ -95,11 +129,11 @@ class NtpTemplate(NetworkTemplate):
"name": "server",
"getval": re.compile(
r"""
- ^set\s(?P<path>system|service)?\sntp\sserver (\s(?P<name>\S+))?
+ ^set\s(?P<path>system|service)\sntp\sserver (\s(?P<name>\S+))
$""",
re.VERBOSE,
),
- "setval": "%%path%% ntp server {{server}}",
+ "setval": "{{_path}} ntp server {{server}}",
"result": {
"servers": {
"{{name}}": {
@@ -115,13 +149,13 @@ class NtpTemplate(NetworkTemplate):
"name": "options",
"getval": re.compile(
r"""
- ^set\s(?P<path>system|service)?\sntp\sserver
+ ^set\s(?P<path>system|service)\sntp\sserver
\s(?P<name>\S+)
- \s(?P<options>noselect|dynamic|pool|preempt|prefer)?
+ \s(?P<options>dynamic|preempt|pool|noselect|prefer|nts|interleave|ptp)
$""",
re.VERBOSE,
),
- "setval": "%%path%% ntp server {{server}} {{options}}",
+ "setval": "{{_path}} ntp server {{server}} {{options}}",
"result": {
"servers": {
"{{name}}": {
diff --git a/plugins/modules/vyos_ntp_global.py b/plugins/modules/vyos_ntp_global.py
index 4fd9891..cad08a6 100644
--- a/plugins/modules/vyos_ntp_global.py
+++ b/plugins/modules/vyos_ntp_global.py
@@ -22,7 +22,7 @@ description:
author:
- Varshitha Yataluru (@YVarshitha)
notes:
-- Tested against vyos 1.3
+- Tested against vyos 1.3.8
- This module works with connection C(network_cli).
- "VyOS v.1.4+ uses chronyd, and path changes from `system` to `service`"
options:
@@ -44,20 +44,26 @@ options:
elements: dict
suboptions:
server:
- description: server name for NTP
+ description: server name or address for NTP
type: str
options:
description:
- - server options for NTP
- - "`dynamic` changed to `pool` after v1.3"
+ - "server options for NTP"
+ - "`pool` replaces `dynamic` in Vyos 1.3"
+ - "`preempt` is only available in Vyos 1.3 and earlier"
+ - "`nts` was added in Vyos 1.4"
+ - "`ptp` and `interleave` were added in Vyos 1.5"
type: list
elements: str
choices:
- - noselect
- dynamic
+ - noselect
- pool
- preempt
- prefer
+ - nts
+ - ptp
+ - interleave
running_config:
description:
- This option is used only with state I(parsed).