Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix nxos_ntp_options issues #38695

Merged
merged 1 commit into from
Apr 13, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
65 changes: 27 additions & 38 deletions lib/ansible/modules/network/nxos/nxos_ntp_options.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,8 @@
- 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:
Expand Down Expand Up @@ -75,7 +71,7 @@
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

Expand All @@ -85,28 +81,28 @@


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}


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'),
)
Expand All @@ -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}
Expand All @@ -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
Expand Down
58 changes: 44 additions & 14 deletions test/integration/targets/nxos_ntp_options/tests/common/sanity.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,43 +31,73 @@
that:
- "result.changed == false"

- name: Remove ntp with master and default stratum
nxos_ntp_options: &remove_master_default_stratum
logging: true
- name: Configure ntp with master and non-default stratum
nxos_ntp_options: &configure_master_non_default_stratum
master: true
state: absent
stratum: 10
state: present
provider: "{{ connection }}"
register: result

- assert: *true

- name: Configure ntp with master and non-default stratum
nxos_ntp_options: &configure_master_non_default_stratum
- name: "Check Idempotence - Configure ntp with master and non-default stratum"
nxos_ntp_options: *configure_master_non_default_stratum
register: result

- assert: *false

- name: Configure ntp with master and no logging
nxos_ntp_options: &configure_no_log
master: true
logging: true
stratum: 10
logging: false
state: present
provider: "{{ connection }}"
provider: "{{ connection }}"
register: result

- assert: *true

- name: "Check Idempotence - Configure ntp with master and non-default stratum"
nxos_ntp_options: *configure_master_non_default_stratum
- name: "Check Idempotence - Configure ntp with master and no logging"
nxos_ntp_options: *configure_no_log
register: result

- assert: *false

- name: Remove ntp with master and non-default stratum
nxos_ntp_options: &remove_master_non_default_stratum
- name: Configure ntp with logging and no master
nxos_ntp_options: &configure_no_master
master: false
logging: true
master: true
state: absent
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
Expand Down
1 change: 0 additions & 1 deletion test/sanity/validate-modules/ignore.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down