diff options
author | omnom62 <75066712+omnom62@users.noreply.github.com> | 2024-11-19 20:35:31 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-19 10:35:31 +0000 |
commit | 04c837af1cf89ff42adc42062df48a0dd209a0e1 (patch) | |
tree | a67c6f3dd2e07ec5bd742b294b1ed423171f9655 | |
parent | 67cda0147ab54136ef0604427c5a01a7f4b21986 (diff) | |
download | vyos.vyos-04c837af1cf89ff42adc42062df48a0dd209a0e1.tar.gz vyos.vyos-04c837af1cf89ff42adc42062df48a0dd209a0e1.zip |
T6832: VyOS v1.4+ chronyd conf support (#357)
* VyOS v1.4+ chronyd conf support
* template typo fix
* Making replace tool more robust by distinctive placeholder
* allow-clients workaround
* test for ntp_global and v1.4
* sanity and change log
* sanity fix
* updates to tests (dynamic >.pool) and docs
* doc update 'system' > 'service'
6 files changed, 521 insertions, 156 deletions
diff --git a/changelogs/fragments/ntp_global.yaml b/changelogs/fragments/ntp_global.yaml new file mode 100644 index 0000000..bab9b55 --- /dev/null +++ b/changelogs/fragments/ntp_global.yaml @@ -0,0 +1,5 @@ +--- +minor_changes: + - Added support for VyOS 1.4+ (chronyd vs ntpd) + - Fixed syntax for allow_client in 1.4+ + - Added test suite for ntp_global and 1.4+ diff --git a/docs/vyos.vyos.vyos_ntp_global_module.rst b/docs/vyos.vyos.vyos_ntp_global_module.rst index d2606f8..8bfa05a 100644 --- a/docs/vyos.vyos.vyos_ntp_global_module.rst +++ b/docs/vyos.vyos.vyos_ntp_global_module.rst @@ -114,8 +114,8 @@ Parameters <td> <ul style="margin: 0; padding: 0"><b>Choices:</b> <li>noselect</li> - <li>dynamic</li> - <li>pool</li> + <li>dynamic (v1.2)</li> + <li>pool (v1.3+))</li> <li>preempt</li> <li>prefer</li> </ul> @@ -195,6 +195,7 @@ Notes .. note:: - Tested against vyos 1.3 - This module works with connection ``network_cli``. + - VyOS v.1.4+ uses chronyd, and path changes from ``system`` to ``service`` @@ -210,9 +211,9 @@ Examples # # Before state: # # ------------- # vyos@vyos:~$ show configuration commands | grep ntp - # set system ntp server time1.vyos.net - # set system ntp server time2.vyos.net - # set system ntp server time3.vyos.net + # set service ntp server time1.vyos.net + # set system/service ntp server time2.vyos.net + # set system/service ntp server time3.vyos.net # vyos@vyos:~$ # # Task @@ -261,20 +262,20 @@ Examples # }, # "changed": true, # "commands": [ - # "set system ntp allow-clients address 10.6.6.0/24", - # "set system ntp listen-address 10.1.3.1", - # "set system ntp server 203.0.113.0 prefer" + # "set system/service ntp allow-clients address 10.6.6.0/24", + # "set system/service ntp listen-address 10.1.3.1", + # "set system/service ntp server 203.0.113.0 prefer" # ] # After state: # # ------------- # vyos@vyos:~$ show configuration commands | grep ntp - # set system ntp allow-clients address '10.6.6.0/24' - # set system ntp listen-address '10.1.3.1' - # set system ntp server 203.0.113.0 prefer, - # set system ntp server time1.vyos.net - # set system ntp server time2.vyos.net - # set system ntp server time3.vyos.net + # set system/service ntp allow-clients address '10.6.6.0/24' + # set system/service ntp listen-address '10.1.3.1' + # set system/service ntp server 203.0.113.0 prefer, + # set system/service ntp server time1.vyos.net + # set system/service ntp server time2.vyos.net + # set system/service ntp server time3.vyos.net # vyos@vyos:~$ @@ -285,25 +286,25 @@ Examples # # Before state: # # ------------- # vyos@vyos:~$ show configuration commands | grep ntp - # set system ntp allow-clients address '10.4.9.0/24' - # set system ntp allow-clients address '10.4.7.0/24' - # set system ntp allow-clients address '10.1.2.0/24' - # set system ntp allow-clients address '10.2.3.0/24' - # set system ntp listen-address '10.1.9.16' - # set system ntp listen-address '10.5.3.2' - # set system ntp listen-address '10.7.9.21' - # set system ntp listen-address '10.8.9.4' - # set system ntp listen-address '10.4.5.1' - # set system ntp server 10.3.6.5 noselect - # set system ntp server 10.3.6.5 dynamic - # set system ntp server 10.3.6.5 preempt - # set system ntp server 10.3.6.5 prefer - # set system ntp server server4 noselect - # set system ntp server server4 dynamic - # set system ntp server server5 - # set system ntp server time1.vyos.net - # set system ntp server time2.vyos.net - # set system ntp server time3.vyos.net + # set system/service ntp allow-clients address '10.4.9.0/24' + # set system/service ntp allow-clients address '10.4.7.0/24' + # set system/service ntp allow-clients address '10.1.2.0/24' + # set system/service ntp allow-clients address '10.2.3.0/24' + # set system/service ntp listen-address '10.1.9.16' + # set system/service ntp listen-address '10.5.3.2' + # set system/service ntp listen-address '10.7.9.21' + # set system/service ntp listen-address '10.8.9.4' + # set system/service ntp listen-address '10.4.5.1' + # set system/service ntp server 10.3.6.5 noselect + # set system/service ntp server 10.3.6.5 dynamic + # set system/service ntp server 10.3.6.5 preempt + # set system/service ntp server 10.3.6.5 prefer + # set system/service ntp server server4 noselect + # set system/service ntp server server4 dynamic + # set system/service ntp server server5 + # set system/service ntp server time1.vyos.net + # set system/service ntp server time2.vyos.net + # set system/service ntp server time3.vyos.net # vyos@vyos:~$ # # Task @@ -396,32 +397,32 @@ Examples # }, # "changed": true, # "commands": [ - # "delete system ntp allow-clients address 10.4.7.0/24", - # "delete system ntp allow-clients address 10.2.3.0/24", - # "delete system ntp allow-clients address 10.1.2.0/24", - # "delete system ntp allow-clients address 10.4.9.0/24", - # "delete system ntp listen-address 10.7.9.21", - # "delete system ntp listen-address 10.4.5.1", - # "delete system ntp listen-address 10.5.3.2", - # "delete system ntp listen-address 10.8.9.4", - # "delete system ntp listen-address 10.1.9.16", - # "delete system ntp server 10.3.6.5", - # "delete system ntp server server4", - # "delete system ntp server server5", - # "set system ntp allow-clients address 10.6.6.0/24", - # "set system ntp listen-address 10.1.3.1", - # "set system ntp server 203.0.113.0 prefer" + # "delete system/service ntp allow-clients address 10.4.7.0/24", + # "delete system/service ntp allow-clients address 10.2.3.0/24", + # "delete system/service ntp allow-clients address 10.1.2.0/24", + # "delete system/service ntp allow-clients address 10.4.9.0/24", + # "delete system/service ntp listen-address 10.7.9.21", + # "delete system/service ntp listen-address 10.4.5.1", + # "delete system/service ntp listen-address 10.5.3.2", + # "delete system/service ntp listen-address 10.8.9.4", + # "delete system/service ntp listen-address 10.1.9.16", + # "delete system/service ntp server 10.3.6.5", + # "delete system/service ntp server server4", + # "delete system/service ntp server server5", + # "set system/service ntp allow-clients address 10.6.6.0/24", + # "set system/service ntp listen-address 10.1.3.1", + # "set system/service ntp server 203.0.113.0 prefer" # ] # After state: # # ------------- # vyos@vyos:~$ show configuration commands | grep ntp - # set system ntp allow-clients address '10.6.6.0/24' - # set system ntp listen-address '10.1.3.1' - # set system ntp server 203.0.113.0 prefer, - # set system ntp server time1.vyos.net - # set system ntp server time2.vyos.net - # set system ntp server time3.vyos.net + # set system/service ntp allow-clients address '10.6.6.0/24' + # set system/service ntp listen-address '10.1.3.1' + # set system/service ntp server 203.0.113.0 prefer, + # set system/service ntp server time1.vyos.net + # set system/service ntp server time2.vyos.net + # set system/service ntp server time3.vyos.net # vyos@vyos:~$ # # ------------------- @@ -431,12 +432,12 @@ Examples # # Before state: # # ------------- # vyos@vyos:~$ show configuration commands | grep ntp - # set system ntp allow-clients address '10.6.6.0/24' - # set system ntp listen-address '10.1.3.1' - # set system ntp server 203.0.113.0 prefer, - # set system ntp server time1.vyos.net - # set system ntp server time2.vyos.net - # set system ntp server time3.vyos.net + # set system/service ntp allow-clients address '10.6.6.0/24' + # set system/service ntp listen-address '10.1.3.1' + # set system/service ntp server 203.0.113.0 prefer, + # set system/service ntp server time1.vyos.net + # set system/service ntp server time2.vyos.net + # set system/service ntp server time3.vyos.net # vyos@vyos:~$ # Task @@ -527,31 +528,31 @@ Examples # }, # "changed": true, # "commands": [ - # "delete system ntp allow-clients address 10.6.6.0/24", - # "delete system ntp listen-address 10.1.3.1", - # "delete system ntp server ser", - # "set system ntp allow-clients address 10.3.3.0/24", - # "set system ntp listen-address 10.7.8.1", - # "set system ntp server server1 dynamic", - # "set system ntp server server1 prefer", - # "set system ntp server server2 noselect", - # "set system ntp server server2 preempt", - # "set system ntp server serv" + # "delete service ntp allow-clients address 10.6.6.0/24", + # "delete service ntp listen-address 10.1.3.1", + # "delete service ntp server ser", + # "set service ntp allow-clients address 10.3.3.0/24", + # "set service ntp listen-address 10.7.8.1", + # "set service ntp server server1 dynamic", + # "set service ntp server server1 prefer", + # "set service ntp server server2 noselect", + # "set service ntp server server2 preempt", + # "set service ntp server serv" # ] # After state: # # ------------- # vyos@vyos:~$ show configuration commands | grep ntp - # set system ntp allow-clients address '10.3.3.0/24' - # set system ntp listen-address '10.7.8.1' - # set system ntp server serv - # set system ntp server server1 dynamic - # set system ntp server server1 prefer - # set system ntp server server2 noselect - # set system ntp server server2 preempt - # set system ntp server time1.vyos.net - # set system ntp server time2.vyos.net - # set system ntp server time3.vyos.net + # set service ntp allow-clients address '10.3.3.0/24' + # set service ntp listen-address '10.7.8.1' + # set service ntp server serv + # set service ntp server server1 dynamic + # set service ntp server server1 prefer + # set service ntp server server2 noselect + # set service ntp server server2 preempt + # set service ntp server time1.vyos.net + # set service ntp server time2.vyos.net + # set service ntp server time3.vyos.net # vyos@vyos:~$ # 4. Using gathered @@ -560,16 +561,16 @@ Examples # # Before state: # # ------------- # vyos@vyos:~$ show configuration commands | grep ntp - # set system ntp allow-clients address '10.3.3.0/24' - # set system ntp listen-address '10.7.8.1' - # set system ntp server serv - # set system ntp server server1 dynamic - # set system ntp server server1 prefer - # set system ntp server server2 noselect - # set system ntp server server2 preempt - # set system ntp server time1.vyos.net - # set system ntp server time2.vyos.net - # set system ntp server time3.vyos.net + # set service ntp allow-clients address '10.3.3.0/24' + # set service ntp listen-address '10.7.8.1' + # set service ntp server serv + # set service ntp server server1 dynamic + # set service ntp server server1 prefer + # set service ntp server server2 noselect + # set service ntp server server2 preempt + # set service ntp server time1.vyos.net + # set service ntp server time2.vyos.net + # set service ntp server time3.vyos.net # vyos@vyos:~$ # Task @@ -620,16 +621,16 @@ Examples # After state: # # ------------- # vyos@vyos:~$ show configuration commands | grep ntp - # set system ntp allow-clients address '10.3.3.0/24' - # set system ntp listen-address '10.7.8.1' - # set system ntp server serv - # set system ntp server server1 dynamic - # set system ntp server server1 prefer - # set system ntp server server2 noselect - # set system ntp server server2 preempt - # set system ntp server time1.vyos.net - # set system ntp server time2.vyos.net - # set system ntp server time3.vyos.net + # set service ntp allow-clients address '10.3.3.0/24' + # set service ntp listen-address '10.7.8.1' + # set service ntp server serv + # set service ntp server server1 dynamic + # set service ntp server server1 prefer + # set service ntp server server2 noselect + # set service ntp server server2 preempt + # set service ntp server time1.vyos.net + # set service ntp server time2.vyos.net + # set service ntp server time3.vyos.net # vyos@vyos:~$ @@ -640,16 +641,16 @@ Examples # # Before state: # # ------------- # vyos@vyos:~$ show configuration commands | grep ntp - # set system ntp allow-clients address '10.3.3.0/24' - # set system ntp listen-address '10.7.8.1' - # set system ntp server serv - # set system ntp server server1 dynamic - # set system ntp server server1 prefer - # set system ntp server server2 noselect - # set system ntp server server2 preempt - # set system ntp server time1.vyos.net - # set system ntp server time2.vyos.net - # set system ntp server time3.vyos.net + # set service ntp allow-clients address '10.3.3.0/24' + # set service ntp listen-address '10.7.8.1' + # set service ntp server serv + # set service ntp server server1 dynamic + # set service ntp server server1 prefer + # set service ntp server server2 noselect + # set service ntp server server2 preempt + # set service ntp server time1.vyos.net + # set service ntp server time2.vyos.net + # set service ntp server time3.vyos.net # vyos@vyos:~$ # # Task @@ -712,20 +713,20 @@ Examples # }, # "changed": true, # "commands": [ - # "delete system ntp allow-clients", - # "delete system ntp listen-address", - # "delete system ntp server serv", - # "delete system ntp server server1", - # "delete system ntp server server2" + # "delete service ntp allow-clients", + # "delete service ntp listen-address", + # "delete service ntp server serv", + # "delete service ntp server server1", + # "delete service ntp server server2" # # ] # After state: # # ------------- # vyos@vyos:~$ show configuration commands | grep ntp - # set system ntp server time1.vyos.net - # set system ntp server time2.vyos.net - # set system ntp server time3.vyos.net + # set service ntp server time1.vyos.net + # set service ntp server time2.vyos.net + # set service ntp server time3.vyos.net # vyos@vyos:~$ @@ -736,9 +737,9 @@ Examples # # Before state: # # ------------- # vyos@vyos:~$ show configuration commands | grep ntp - # set system ntp server time1.vyos.net - # set system ntp server time2.vyos.net - # set system ntp server time3.vyos.net + # set service ntp server time1.vyos.net + # set service ntp server time2.vyos.net + # set service ntp server time3.vyos.net # vyos@vyos:~$ # Task @@ -766,16 +767,16 @@ Examples # # Task output: # # ------------- # "rendered": [ - # "set system ntp allow-clients address 10.7.7.0/24", - # "set system ntp allow-clients address 10.8.8.0/24", - # "set system ntp listen-address 10.7.9.1", - # "set system ntp server server7", - # "set system ntp server server45 noselect", - # "set system ntp server server45 prefer", - # "set system ntp server server45 pool", - # "set system ntp server time1.vyos.net", - # "set system ntp server time2.vyos.net", - # "set system ntp server time3.vyos.net" + # "set service ntp allow-clients address 10.7.7.0/24", + # "set service ntp allow-clients address 10.8.8.0/24", + # "set service ntp listen-address 10.7.9.1", + # "set service ntp server server7", + # "set service ntp server server45 noselect", + # "set service ntp server server45 prefer", + # "set service ntp server server45 pool", + # "set service ntp server time1.vyos.net", + # "set service ntp server time2.vyos.net", + # "set service ntp server time3.vyos.net" # ] @@ -785,15 +786,15 @@ Examples # # sample_config.cfg: # # ------------- - # "set system ntp allow-clients address 10.7.7.0/24", - # "set system ntp listen-address 10.7.9.1", - # "set system ntp server server45 noselect", - # "set system ntp allow-clients addres 10.8.6.0/24", - # "set system ntp listen-address 10.5.4.1", - # "set system ntp server server45 dynamic", - # "set system ntp server time1.vyos.net", - # "set system ntp server time2.vyos.net", - # "set system ntp server time3.vyos.net" + # "set service ntp allow-clients address 10.7.7.0/24", + # "set service ntp listen-address 10.7.9.1", + # "set service ntp server server45 noselect", + # "set service ntp allow-clients addres 10.8.6.0/24", + # "set service ntp listen-address 10.5.4.1", + # "set service ntp server server45 dynamic", + # "set service ntp server time1.vyos.net", + # "set service ntp server time2.vyos.net", + # "set service ntp server time3.vyos.net" # Task: # ------------- @@ -897,7 +898,7 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late <div>The set of commands pushed to the remote device.</div> <br/> <div style="font-size: smaller"><b>Sample:</b></div> - <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">['set system ntp server server1 dynamic', 'set system ntp server server1 prefer', 'set system ntp server server2 noselect', 'set system ntp server server2 preempt', 'set system ntp server server_add preempt']</div> + <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">['set service ntp server server1 dynamic', 'set service ntp server server1 prefer', 'set service ntp server server2 noselect', 'set service ntp server server2 preempt', 'set service ntp server server_add preempt']</div> </td> </tr> <tr> @@ -948,7 +949,7 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late <div>The provided configuration in the task rendered in device-native format (offline).</div> <br/> <div style="font-size: smaller"><b>Sample:</b></div> - <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">['set system ntp server server1 dynamic', 'set system ntp server server1 prefer', 'set system ntp server server2 noselect', 'set system ntp server server2 preempt', 'set system ntp server server_add preempt']</div> + <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">['set service ntp server server1 dynamic', 'set service ntp server server1 prefer', 'set service ntp server server2 noselect', 'set service ntp server server2 preempt', 'set service ntp server server_add preempt']</div> </td> </tr> </table> 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 106faac..0af1af5 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 @@ -31,6 +31,10 @@ from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.rm_template NtpTemplate, ) +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): """ @@ -120,6 +124,17 @@ class Ntp_global(ResourceModule): 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 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 33d173e..1e011dd 100644 --- a/plugins/module_utils/network/vyos/rm_templates/ntp_global.py +++ b/plugins/module_utils/network/vyos/rm_templates/ntp_global.py @@ -35,11 +35,11 @@ class NtpTemplate(NetworkTemplate): "name": "allow_clients", "getval": re.compile( r""" - ^set\ssystem\sntp\sallow-clients\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": "system ntp allow-clients address {{allow_clients}}", + "setval": "%%path%% ntp %%ac%% address {{allow_clients}}", "result": { "allow_clients": ["{{ipaddress}}"], }, @@ -50,11 +50,11 @@ class NtpTemplate(NetworkTemplate): "name": "allow_clients_delete", "getval": re.compile( r""" - ^set\ssystem\sntp\sallow-clients + ^set\s(?P<path>system|service)?\sntp\s(?P<ac>allow-clients|allow-client)? $""", re.VERBOSE, ), - "setval": "system ntp allow-clients", + "setval": "%%path%% ntp %%ac%%", "result": { }, @@ -66,11 +66,11 @@ class NtpTemplate(NetworkTemplate): "name": "listen_addresses", "getval": re.compile( r""" - ^set\ssystem\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": "system ntp listen-address {{listen_addresses}}", + "setval": "%%path%% ntp listen-address {{listen_addresses}}", "result": { "listen_addresses": ["{{ip_address}}"], }, @@ -81,11 +81,11 @@ class NtpTemplate(NetworkTemplate): "name": "listen_addresses_delete", "getval": re.compile( r""" - ^set\ssystem\sntp\slisten-address + ^set\s(?P<path>system|service)?\sntp\slisten-address $""", re.VERBOSE, ), - "setval": "system ntp listen-address", + "setval": "%%path%% ntp listen-address", "result": { }, }, @@ -95,11 +95,11 @@ class NtpTemplate(NetworkTemplate): "name": "server", "getval": re.compile( r""" - ^set\ssystem\sntp\sserver (\s(?P<name>\S+))? + ^set\s(?P<path>system|service)?\sntp\sserver (\s(?P<name>\S+))? $""", re.VERBOSE, ), - "setval": "system ntp server {{server}}", + "setval": "%%path%% ntp server {{server}}", "result": { "servers": { "{{name}}": { @@ -115,13 +115,13 @@ class NtpTemplate(NetworkTemplate): "name": "options", "getval": re.compile( r""" - ^set\ssystem\sntp\sserver + ^set\s(?P<path>system|service)?\sntp\sserver \s(?P<name>\S+) \s(?P<options>noselect|dynamic|pool|preempt|prefer)? $""", re.VERBOSE, ), - "setval": "system ntp server {{server}} {{options}}", + "setval": "%%path%% ntp server {{server}} {{options}}", "result": { "servers": { "{{name}}": { diff --git a/tests/unit/modules/network/vyos/fixtures/vyos_ntp_config_v14.cfg b/tests/unit/modules/network/vyos/fixtures/vyos_ntp_config_v14.cfg new file mode 100644 index 0000000..8fc8ecd --- /dev/null +++ b/tests/unit/modules/network/vyos/fixtures/vyos_ntp_config_v14.cfg @@ -0,0 +1,10 @@ +set service ntp allow-client address '10.1.1.0/24' +set service ntp allow-client address '10.1.2.0/24' +set service ntp listen-address '10.2.3.1' +set service ntp listen-address '10.4.3.1' +set service ntp server server1 +set service ntp server server3 noselect +set service ntp server server3 pool +set service ntp server time1.vyos.net +set service ntp server time2.vyos.net +set service ntp server time3.vyos.net diff --git a/tests/unit/modules/network/vyos/test_vyos_ntp_global.py b/tests/unit/modules/network/vyos/test_vyos_ntp_global.py index 6609c2f..0bf6107 100644 --- a/tests/unit/modules/network/vyos/test_vyos_ntp_global.py +++ b/tests/unit/modules/network/vyos/test_vyos_ntp_global.py @@ -51,11 +51,18 @@ class TestVyosNTPModule(TestVyosModule): self.execute_show_command = self.mock_execute_show_command.start() + self.mock_get_os_version = patch( + "ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.config.ntp_global.ntp_global.get_os_version", + ) + self.get_os_version = self.mock_get_os_version.start() + self.get_os_version.return_value = "1.2" + def tearDown(self): super(TestVyosNTPModule, self).tearDown() self.mock_get_resource_connection_config.stop() self.mock_get_resource_connection_facts.stop() self.mock_execute_show_command.stop() + self.mock_get_os_version.stop() def load_fixtures(self, commands=None, filename=None): if filename is None: @@ -98,7 +105,7 @@ class TestVyosNTPModule(TestVyosModule): server="server5", options=[ "noselect", - "pool", + "dynamic", "preempt", "prefer", ], @@ -116,7 +123,7 @@ class TestVyosNTPModule(TestVyosModule): "set system ntp listen-address 10.4.5.1", "set system ntp server server4 dynamic", "set system ntp server server4 preempt", - "set system ntp server server5 pool", + "set system ntp server server5 dynamic", "set system ntp server server5 noselect", "set system ntp server server5 preempt", "set system ntp server server5 prefer", @@ -347,3 +354,330 @@ class TestVyosNTPModule(TestVyosModule): "delete system ntp server time3.vyos.net", ] self.execute_module(changed=True, commands=commands) + + +class TestVyosNTPModule14(TestVyosModule): + module = vyos_ntp_global + + def setUp(self): + super(TestVyosNTPModule14, self).setUp() + + self.mock_get_resource_connection_config = patch( + "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.resource_module_base.get_resource_connection", + ) + self.get_resource_connection_config = self.mock_get_resource_connection_config.start() + + self.mock_get_resource_connection_facts = patch( + "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.facts.facts.get_resource_connection", + ) + self.get_resource_connection_facts = self.mock_get_resource_connection_facts.start() + + self.mock_execute_show_command = patch( + "ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.facts.ntp_global.ntp_global.Ntp_globalFacts.get_config", + ) + + self.execute_show_command = self.mock_execute_show_command.start() + + self.mock_get_os_version = patch( + "ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.config.ntp_global.ntp_global.get_os_version", + ) + self.get_os_version = self.mock_get_os_version.start() + self.get_os_version.return_value = "1.4" + + def tearDown(self): + super(TestVyosNTPModule14, self).tearDown() + self.mock_get_resource_connection_config.stop() + self.mock_get_resource_connection_facts.stop() + self.mock_execute_show_command.stop() + self.mock_get_os_version.stop() + + def load_fixtures(self, commands=None, filename=None): + if filename is None: + filename = "vyos_ntp_config_v14.cfg" + + def load_from_file(*args, **kwargs): + output = load_fixture(filename) + return output + + self.execute_show_command.side_effect = load_from_file + + def test_ntp_merged_idempotent(self): + set_module_args( + dict( + config=dict( + allow_clients=["10.1.1.0/24", "10.1.2.0/24"], + listen_addresses=["10.2.3.1", "10.4.3.1"], + servers=[ + dict(server="server1"), + dict(server="server3", options=["noselect", "pool"]), + dict(server="time1.vyos.net"), + dict(server="time2.vyos.net"), + dict(server="time3.vyos.net"), + ], + ), + state="merged", + ), + ) + self.execute_module(changed=False, commands=[]) + + def test_ntp_merged(self): + set_module_args( + dict( + config=dict( + allow_clients=["10.2.2.0/24", "10.3.3.0/24"], + listen_addresses=["10.3.4.1", "10.4.5.1"], + servers=[ + dict(server="server4", options=["pool", "preempt"]), + dict( + server="server5", + options=[ + "noselect", + "pool", + "preempt", + "prefer", + ], + ), + ], + ), + state="merged", + ), + ) + + commands = [ + "set service ntp allow-client address 10.2.2.0/24", + "set service ntp allow-client address 10.3.3.0/24", + "set service ntp listen-address 10.3.4.1", + "set service ntp listen-address 10.4.5.1", + "set service ntp server server4 pool", + "set service ntp server server4 preempt", + "set service ntp server server5 pool", + "set service ntp server server5 noselect", + "set service ntp server server5 preempt", + "set service ntp server server5 prefer", + ] + + self.execute_module(changed=True, commands=commands) + + def test_ntp_replaced(self): + set_module_args( + dict( + config=dict( + allow_clients=["10.3.4.0/24", "10.4.5.0/24"], + listen_addresses=["10.3.3.1", "10.4.4.1"], + servers=[ + dict(server="server4", options=["noselect", "prefer"]), + dict( + server="server6", + options=[ + "noselect", + "pool", + "prefer", + "preempt", + ], + ), + dict(server="time1.vyos.net"), + dict(server="time2.vyos.net"), + dict(server="time3.vyos.net"), + ], + ), + state="replaced", + ), + ) + commands = [ + "delete service ntp allow-client address 10.1.1.0/24", + "delete service ntp allow-client address 10.1.2.0/24", + "delete service ntp listen-address 10.2.3.1", + "delete service ntp listen-address 10.4.3.1", + "delete service ntp server server1", + "delete service ntp server server3", + "set service ntp allow-client address 10.3.4.0/24", + "set service ntp allow-client address 10.4.5.0/24", + "set service ntp listen-address 10.3.3.1", + "set service ntp listen-address 10.4.4.1", + "set service ntp server server4 noselect", + "set service ntp server server4 prefer", + "set service ntp server server6 noselect", + "set service ntp server server6 pool", + "set service ntp server server6 prefer", + "set service ntp server server6 preempt", + ] + self.execute_module(changed=True, commands=commands) + + def test_ntp_replaced_idempotent(self): + set_module_args( + dict( + config=dict( + allow_clients=["10.1.1.0/24", "10.1.2.0/24"], + listen_addresses=["10.2.3.1", "10.4.3.1"], + servers=[ + dict(server="server1"), + dict(server="server3", options=["noselect", "pool"]), + dict(server="time1.vyos.net"), + dict(server="time2.vyos.net"), + dict(server="time3.vyos.net"), + ], + ), + state="replaced", + ), + ) + self.execute_module(changed=False, commands=[]) + + def test_ntp_overridden(self): + set_module_args( + dict( + config=dict( + allow_clients=["10.9.9.0/24"], + listen_addresses=["10.9.9.1"], + servers=[ + dict(server="server9"), + dict(server="server6", options=["noselect", "pool"]), + dict(server="time1.vyos.net"), + dict(server="time2.vyos.net"), + dict(server="time3.vyos.net"), + ], + ), + state="overridden", + ), + ) + commands = [ + "delete service ntp allow-client address 10.1.1.0/24", + "delete service ntp allow-client address 10.1.2.0/24", + "delete service ntp listen-address 10.2.3.1", + "delete service ntp listen-address 10.4.3.1", + "delete service ntp server server1", + "delete service ntp server server3", + "set service ntp allow-client address 10.9.9.0/24", + "set service ntp listen-address 10.9.9.1", + "set service ntp server server9", + "set service ntp server server6 noselect", + "set service ntp server server6 pool", + ] + self.execute_module(changed=True, commands=commands) + + def test_ntp_overridden_idempotent(self): + set_module_args( + dict( + config=dict( + allow_clients=["10.1.1.0/24", "10.1.2.0/24"], + listen_addresses=["10.2.3.1", "10.4.3.1"], + servers=[ + dict(server="server1"), + dict(server="server3", options=["noselect", "pool"]), + dict(server="time1.vyos.net"), + dict(server="time2.vyos.net"), + dict(server="time3.vyos.net"), + ], + ), + state="overridden", + ), + ) + self.execute_module(changed=False, commands=[]) + + def test_ntp_rendered(self): + set_module_args( + dict( + config=dict( + allow_clients=["10.7.7.0/24", "10.8.8.0/24"], + listen_addresses=["10.7.9.1"], + servers=[ + dict(server="server79"), + dict(server="server46", options=["noselect", "pool"]), + dict(server="time1.vyos.net"), + dict(server="time2.vyos.net"), + dict(server="time3.vyos.net"), + ], + ), + state="rendered", + ), + ) + rendered_commands = [ + "set service ntp allow-client address 10.7.7.0/24", + "set service ntp allow-client address 10.8.8.0/24", + "set service ntp listen-address 10.7.9.1", + "set service ntp server server79", + "set service ntp server server46 noselect", + "set service ntp server server46 pool", + "set service ntp server time1.vyos.net", + "set service ntp server time2.vyos.net", + "set service ntp server time3.vyos.net", + ] + result = self.execute_module(changed=False) + self.assertEqual( + sorted(result["rendered"]), + sorted(rendered_commands), + result["rendered"], + ) + + def test_ntp_parsed(self): + commands = ( + "set service ntp allow-client address 10.7.7.0/24", + "set service ntp allow-client address 10.6.7.0/24", + "set service ntp listen-address 10.7.9.1", + "set service ntp listen-address 10.7.7.1", + "set service ntp server check", + "set service ntp server server46 noselect", + "set service ntp server server46 prefer", + "set service ntp server time1.vyos.net", + "set service ntp server time2.vyos.net", + "set service ntp server time3.vyos.net", + ) + parsed_str = "\n".join(commands) + set_module_args(dict(running_config=parsed_str, state="parsed")) + result = self.execute_module(changed=False) + parsed_list = { + "allow_clients": ["10.6.7.0/24", "10.7.7.0/24"], + "listen_addresses": ["10.7.7.1", "10.7.9.1"], + "servers": [ + {"server": "check"}, + {"server": "server46", "options": ["noselect", "prefer"]}, + {"server": "time1.vyos.net"}, + {"server": "time2.vyos.net"}, + {"server": "time3.vyos.net"}, + ], + } + self.assertEqual(parsed_list, result["parsed"]) + + def test_ntp_gathered(self): + set_module_args(dict(state="gathered")) + result = self.execute_module(changed=False) + gathered_list = { + "allow_clients": ["10.1.1.0/24", "10.1.2.0/24"], + "listen_addresses": ["10.2.3.1", "10.4.3.1"], + "servers": [ + {"server": "server1"}, + {"server": "server3", "options": ["noselect", "pool"]}, + {"server": "time1.vyos.net"}, + {"server": "time2.vyos.net"}, + {"server": "time3.vyos.net"}, + ], + } + + self.assertEqual(gathered_list, result["gathered"]) + + def test_ntp_deleted(self): + set_module_args( + dict( + config=dict( + allow_clients=["10.1.1.0/24"], + listen_addresses=["10.2.3.1"], + servers=[ + dict(server="server1"), + dict(server="server3", options=["noselect"]), + dict(server="time1.vyos.net"), + dict(server="time2.vyos.net"), + dict(server="time3.vyos.net"), + ], + ), + state="deleted", + ), + ) + commands = [ + "delete service ntp allow-client", + "delete service ntp listen-address", + "delete service ntp server server1", + "delete service ntp server server3", + "delete service ntp server time1.vyos.net", + "delete service ntp server time2.vyos.net", + "delete service ntp server time3.vyos.net", + ] + self.execute_module(changed=True, commands=commands) |