diff options
Diffstat (limited to 'plugins')
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). |