fix nxos_ntp_options (#38695)
This commit is contained in:
parent
efa7ebb8a5
commit
1d975bdc93
3 changed files with 72 additions and 54 deletions
|
@ -34,12 +34,8 @@ author:
|
|||
- Jason Edelman (@jedelman8)
|
||||
notes:
|
||||
- Tested against NXOSv 7.3.(0)D1(1) on VIRL
|
||||
- At least one of C(master) or C(logging) params must be supplied.
|
||||
- When C(state=absent), boolean parameters are flipped,
|
||||
e.g. C(master=true) will disable the authoritative server.
|
||||
- When C(state=absent) and C(master=true), the stratum will be removed as well.
|
||||
- When C(state=absent) and C(master=false), the stratum will be configured
|
||||
to its default value, 8.
|
||||
- When C(state=absent), master and logging will be set to False and
|
||||
stratum will be removed as well
|
||||
options:
|
||||
master:
|
||||
description:
|
||||
|
@ -75,7 +71,7 @@ updates:
|
|||
description: command sent to the device
|
||||
returned: always
|
||||
type: list
|
||||
sample: ["no ntp logging", "ntp master 11"]
|
||||
sample: ["no ntp logging", "ntp master 12"]
|
||||
'''
|
||||
import re
|
||||
|
||||
|
@ -85,20 +81,20 @@ from ansible.module_utils.basic import AnsibleModule
|
|||
|
||||
|
||||
def get_current(module):
|
||||
cmd = ('show running-config', 'show ntp logging')
|
||||
cmd = ('show running-config | inc ntp')
|
||||
|
||||
output = run_commands(module, ({'command': cmd[0], 'output': 'text'},
|
||||
{'command': cmd[1], 'output': 'text'}))
|
||||
master = False
|
||||
logging = False
|
||||
stratum = None
|
||||
|
||||
match = re.search(r"^ntp master(?: (\d+))", output[0], re.M)
|
||||
if match:
|
||||
master = True
|
||||
stratum = match.group(1)
|
||||
else:
|
||||
master = False
|
||||
stratum = None
|
||||
output = run_commands(module, ({'command': cmd, 'output': 'text'}))[0]
|
||||
|
||||
logging = 'enabled' in output[1].lower()
|
||||
if output:
|
||||
match = re.search(r"^ntp master(?: (\d+))", output, re.M)
|
||||
if match:
|
||||
master = True
|
||||
stratum = match.group(1)
|
||||
logging = 'ntp logging' in output.lower()
|
||||
|
||||
return {'master': master, 'stratum': stratum, 'logging': logging}
|
||||
|
||||
|
@ -106,7 +102,7 @@ def get_current(module):
|
|||
def main():
|
||||
argument_spec = dict(
|
||||
master=dict(required=False, type='bool'),
|
||||
stratum=dict(required=False, type='str', default='8'),
|
||||
stratum=dict(required=False, type='str'),
|
||||
logging=dict(required=False, type='bool'),
|
||||
state=dict(choices=['absent', 'present'], default='present'),
|
||||
)
|
||||
|
@ -124,15 +120,10 @@ def main():
|
|||
logging = module.params['logging']
|
||||
state = module.params['state']
|
||||
|
||||
if stratum:
|
||||
try:
|
||||
stratum_int = int(stratum)
|
||||
if stratum_int < 1 or stratum_int > 15:
|
||||
raise ValueError
|
||||
except ValueError:
|
||||
module.fail_json(msg='stratum must be an integer between 1 and 15')
|
||||
if stratum and master is False:
|
||||
if stratum != 8:
|
||||
module.fail_json(msg='master MUST be True when stratum is changed')
|
||||
|
||||
desired = {'master': master, 'stratum': stratum, 'logging': logging}
|
||||
current = get_current(module)
|
||||
|
||||
result = {'changed': False}
|
||||
|
@ -146,19 +137,17 @@ def main():
|
|||
commands.append('no ntp logging')
|
||||
|
||||
elif state == 'present':
|
||||
if desired['master'] and desired['master'] != current['master']:
|
||||
if desired['stratum']:
|
||||
commands.append('ntp master %s' % stratum)
|
||||
else:
|
||||
commands.append('ntp master')
|
||||
elif desired['stratum'] and desired['stratum'] != current['stratum']:
|
||||
if master and not current['master']:
|
||||
commands.append('ntp master')
|
||||
elif master is False and current['master']:
|
||||
commands.append('no ntp master')
|
||||
if stratum and stratum != current['stratum']:
|
||||
commands.append('ntp master %s' % stratum)
|
||||
|
||||
if desired['logging'] and desired['logging'] != current['logging']:
|
||||
if desired['logging']:
|
||||
commands.append('ntp logging')
|
||||
else:
|
||||
commands.append('no ntp logging')
|
||||
if logging and not current['logging']:
|
||||
commands.append('ntp logging')
|
||||
elif logging is False and current['logging']:
|
||||
commands.append('no ntp logging')
|
||||
|
||||
result['commands'] = commands
|
||||
result['updates'] = commands
|
||||
|
|
|
@ -31,20 +31,9 @@
|
|||
that:
|
||||
- "result.changed == false"
|
||||
|
||||
- name: Remove ntp with master and default stratum
|
||||
nxos_ntp_options: &remove_master_default_stratum
|
||||
logging: true
|
||||
master: true
|
||||
state: absent
|
||||
provider: "{{ connection }}"
|
||||
register: result
|
||||
|
||||
- assert: *true
|
||||
|
||||
- name: Configure ntp with master and non-default stratum
|
||||
nxos_ntp_options: &configure_master_non_default_stratum
|
||||
master: true
|
||||
logging: true
|
||||
stratum: 10
|
||||
state: present
|
||||
provider: "{{ connection }}"
|
||||
|
@ -58,16 +47,57 @@
|
|||
|
||||
- assert: *false
|
||||
|
||||
- name: Remove ntp with master and non-default stratum
|
||||
nxos_ntp_options: &remove_master_non_default_stratum
|
||||
logging: true
|
||||
- name: Configure ntp with master and no logging
|
||||
nxos_ntp_options: &configure_no_log
|
||||
master: true
|
||||
state: absent
|
||||
stratum: 10
|
||||
logging: false
|
||||
state: present
|
||||
provider: "{{ connection }}"
|
||||
register: result
|
||||
|
||||
- assert: *true
|
||||
|
||||
- name: "Check Idempotence - Configure ntp with master and no logging"
|
||||
nxos_ntp_options: *configure_no_log
|
||||
register: result
|
||||
|
||||
- assert: *false
|
||||
|
||||
- name: Configure ntp with logging and no master
|
||||
nxos_ntp_options: &configure_no_master
|
||||
master: false
|
||||
logging: true
|
||||
state: present
|
||||
provider: "{{ connection }}"
|
||||
register: result
|
||||
|
||||
- assert: *true
|
||||
|
||||
- name: "Check Idempotence - Configure ntp with logging and no master"
|
||||
nxos_ntp_options: *configure_no_master
|
||||
register: result
|
||||
|
||||
- assert: *false
|
||||
|
||||
- name: "Configure ntp with master and non-default stratum again"
|
||||
nxos_ntp_options: *configure_master_non_default_stratum
|
||||
register: result
|
||||
|
||||
- assert: *true
|
||||
|
||||
- name: Remove ntp options
|
||||
nxos_ntp_options: *default
|
||||
register: result
|
||||
|
||||
- assert: *true
|
||||
|
||||
- name: "Check Idempotence - Remove"
|
||||
nxos_ntp_options: *default
|
||||
register: result
|
||||
|
||||
- assert: *false
|
||||
|
||||
always:
|
||||
- name: Cleanup ntp config
|
||||
nxos_ntp_options: *default
|
||||
|
|
|
@ -1347,7 +1347,6 @@ lib/ansible/modules/network/nxos/nxos_igmp_interface.py E326
|
|||
lib/ansible/modules/network/nxos/nxos_interface.py E324
|
||||
lib/ansible/modules/network/nxos/nxos_lldp.py E326
|
||||
lib/ansible/modules/network/nxos/nxos_logging.py E325
|
||||
lib/ansible/modules/network/nxos/nxos_ntp_options.py E324
|
||||
lib/ansible/modules/network/nxos/nxos_nxapi.py E324
|
||||
lib/ansible/modules/network/nxos/nxos_nxapi.py E325
|
||||
lib/ansible/modules/network/nxos/nxos_nxapi.py E326
|
||||
|
|
Loading…
Reference in a new issue