fix nxos_ntp_options (#38695)

This commit is contained in:
saichint 2018-04-13 03:17:32 -07:00 committed by Trishna Guha
parent efa7ebb8a5
commit 1d975bdc93
3 changed files with 72 additions and 54 deletions

View file

@ -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

View file

@ -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

View file

@ -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