1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

fix nxos_system issues (#40347)

This commit is contained in:
saichint 2018-05-22 01:49:34 -07:00 committed by Trishna Guha
parent 7eb98660a4
commit 97070c9688
5 changed files with 208 additions and 59 deletions

View file

@ -36,14 +36,15 @@ description:
options:
hostname:
description:
- Configure the device hostname parameter. This option takes an ASCII string value.
- Configure the device hostname parameter. This option takes an ASCII string value
or keyword 'default'
domain_name:
description:
- Configures the default domain
name suffix to be used when referencing this node by its
FQDN. This argument accepts either a list of domain names or
a list of dicts that configure the domain name and VRF name. See
examples.
a list of dicts that configure the domain name and VRF name or
keyword 'default'. See examples.
domain_lookup:
description:
- Enables or disables the DNS
@ -55,17 +56,17 @@ options:
- Configures a list of domain
name suffixes to search when performing DNS name resolution.
This argument accepts either a list of domain names or
a list of dicts that configure the domain name and VRF name. See
examples.
a list of dicts that configure the domain name and VRF name or
keyword 'default'. See examples.
name_servers:
description:
- List of DNS name servers by IP address to use to perform name resolution
lookups. This argument accepts either a list of DNS servers or
a list of hashes that configure the name server and VRF name. See
examples.
a list of hashes that configure the name server and VRF name or
keyword 'default'. See examples.
system_mtu:
description:
- Specifies the mtu, must be an integer.
- Specifies the mtu, must be an integer or keyword 'default'.
state:
description:
- State of the configuration
@ -174,40 +175,67 @@ def map_obj_to_commands(want, have, module):
if state == 'present':
if needs_update('hostname'):
commands.append('hostname %s' % want['hostname'])
if want['hostname'] == 'default':
if have['hostname']:
commands.append('no hostname')
else:
commands.append('hostname %s' % want['hostname'])
if needs_update('domain_lookup'):
cmd = 'ip domain-lookup'
if want['domain_lookup'] is False:
cmd = 'no %s' % cmd
commands.append(cmd)
if want.get('domain_lookup') is not None:
if have.get('domain_lookup') != want.get('domain_lookup'):
cmd = 'ip domain-lookup'
if want['domain_lookup'] is False:
cmd = 'no %s' % cmd
commands.append(cmd)
if want['domain_name']:
for item in difference(have, want, 'domain_name'):
cmd = 'no ip domain-name %s' % item['name']
remove(cmd, commands, item['vrf'])
for item in difference(want, have, 'domain_name'):
cmd = 'ip domain-name %s' % item['name']
add(cmd, commands, item['vrf'])
if want.get('domain_name')[0]['name'] == 'default':
if have['domain_name']:
for item in have['domain_name']:
cmd = 'no ip domain-name %s' % item['name']
remove(cmd, commands, item['vrf'])
else:
for item in difference(have, want, 'domain_name'):
cmd = 'no ip domain-name %s' % item['name']
remove(cmd, commands, item['vrf'])
for item in difference(want, have, 'domain_name'):
cmd = 'ip domain-name %s' % item['name']
add(cmd, commands, item['vrf'])
if want['domain_search']:
for item in difference(have, want, 'domain_search'):
cmd = 'no ip domain-list %s' % item['name']
remove(cmd, commands, item['vrf'])
for item in difference(want, have, 'domain_search'):
cmd = 'ip domain-list %s' % item['name']
add(cmd, commands, item['vrf'])
if want.get('domain_search')[0]['name'] == 'default':
if have['domain_search']:
for item in have['domain_search']:
cmd = 'no ip domain-list %s' % item['name']
remove(cmd, commands, item['vrf'])
else:
for item in difference(have, want, 'domain_search'):
cmd = 'no ip domain-list %s' % item['name']
remove(cmd, commands, item['vrf'])
for item in difference(want, have, 'domain_search'):
cmd = 'ip domain-list %s' % item['name']
add(cmd, commands, item['vrf'])
if want['name_servers']:
for item in difference(have, want, 'name_servers'):
cmd = 'no ip name-server %s' % item['server']
remove(cmd, commands, item['vrf'])
for item in difference(want, have, 'name_servers'):
cmd = 'ip name-server %s' % item['server']
add(cmd, commands, item['vrf'])
if want.get('name_servers')[0]['server'] == 'default':
if have['name_servers']:
for item in have['name_servers']:
cmd = 'no ip name-server %s' % item['server']
remove(cmd, commands, item['vrf'])
else:
for item in difference(have, want, 'name_servers'):
cmd = 'no ip name-server %s' % item['server']
remove(cmd, commands, item['vrf'])
for item in difference(want, have, 'name_servers'):
cmd = 'ip name-server %s' % item['server']
add(cmd, commands, item['vrf'])
if needs_update('system_mtu'):
commands.append('system jumbomtu %s' % want['system_mtu'])
if want['system_mtu'] == 'default':
if have['system_mtu']:
commands.append('no system jumbomtu')
else:
commands.append('system jumbomtu %s' % want['system_mtu'])
return commands
@ -269,7 +297,7 @@ def parse_name_servers(config, vrf_config, vrfs):
def parse_system_mtu(config):
match = re.search(r'^system jumbomtu (\d+)', config, re.M)
if match:
return int(match.group(1))
return match.group(1)
def map_config_to_obj(module):
@ -293,11 +321,6 @@ def map_config_to_obj(module):
}
def validate_system_mtu(value, module):
if not 1500 <= value <= 9216:
module.fail_json(msg='system_mtu must be between 1500 and 9216')
def map_params_to_obj(module):
obj = {
'hostname': module.params['hostname'],
@ -346,7 +369,7 @@ def main():
# { server: <str>; vrf: <str> }
name_servers=dict(type='list'),
system_mtu=dict(type='int'),
system_mtu=dict(type='str'),
state=dict(default='present', choices=['present', 'absent'])
)

View file

@ -2,7 +2,7 @@
- debug: msg="START cli/set_name_servers.yaml"
- name: setup
nxos_config:
nxos_config: &reset
lines:
- no ip name-server 1.1.1.1
- no ip name-server 2.2.2.2
@ -76,12 +76,25 @@
- result.commands|length == 1
- "'no ip name-server 3.3.3.3' in result.commands"
- name: default name server
nxos_system: &defns
name_servers: default
register: result
- assert:
that:
- result.changed == true
- name: Idempotent check
nxos_system: *defns
register: result
- assert:
that:
- result.changed == false
- name: teardown
nxos_config:
lines:
- no ip lookup source-interface
match: none
nxos_config: *reset
ignore_errors: yes
# FIXME Copied from iosxr, not sure what we need here
- debug: msg="END cli/set_name_servers.yaml"

View file

@ -4,28 +4,124 @@
when: ansible_connection == "local"
- block:
- name: remove configuration
nxos_system: &remove
state: absent
register: result
ignore_errors: yes
- name: configure domain lookup
nxos_system: &dlo
domain_lookup: true
state: present
register: result
- name: configure hostname and domain-name
nxos_system: &hostname
hostname: switch
domain_name: test.example.com
register: result
- name: remove configuration
nxos_system:
state: absent
- assert: &true
that:
- "result.changed == true"
- name: Idempotence check
nxos_system: *hostname
register: result
- assert: &false
that:
- "result.changed == false"
- name: configure name servers
nxos_system:
nxos_system: &ns
name_servers:
- 8.8.8.8
- 8.8.4.4
register: result
- assert: *true
- name: Idempotence check
nxos_system: *ns
register: result
- assert: *false
- name: configure name servers with VRF support
nxos_system:
nxos_system: &nsv
name_servers:
- { server: 8.8.8.8, vrf: management }
- { server: 8.8.4.4, vrf: management }
register: result
- assert: *true
- name: Idempotence check
nxos_system: *nsv
register: result
- assert: *false
- name: configure domain lookup1
nxos_system: &ndlo
domain_lookup: false
register: result
- assert: *true
- name: Idempotence check
nxos_system: *ndlo
register: result
- assert: *false
- name: configure domain lookup2
nxos_system: *dlo
register: result
- assert: *true
- name: Idempotence check
nxos_system: *dlo
register: result
- assert: *false
- name: configure system mtu
nxos_system: &sysmtu
system_mtu: 3000
register: result
- assert: *true
- name: Idempotence check
nxos_system: *sysmtu
register: result
- assert: *false
- name: default configuration
nxos_system: &default
hostname: default
domain_name: default
name_servers: default
system_mtu: default
register: result
- assert: *true
- name: Idempotence check
nxos_system: *default
register: result
- assert: *false
always:
- name: remove configuration
nxos_system: *remove
- name: Re-configure hostname
nxos_system: *hostname

View file

@ -6,7 +6,7 @@
- block:
- name: setup
nxos_config:
lines: hostname switch
lines: "hostname {{ inventory_hostname }}"
match: none
- name: configure hostname
@ -30,7 +30,7 @@
always:
- name: teardown
nxos_config:
lines: hostname switch
lines: "hostname {{ inventory_hostname }}"
match: none

View file

@ -5,7 +5,7 @@
# nxapi will error if you try and remove a non-existent entry,
# Therefore we do this as a with_items loop with ignore_errors
- name: setup
nxos_config:
nxos_config: &reset
lines:
- no ip name-server {{ item }}
match: none
@ -82,12 +82,29 @@
- result.commands|length == 1
- "'no ip name-server 3.3.3.3' in result.commands"
- name: default name server
nxos_system: &defns
name_servers: default
register: result
- assert:
that:
- result.changed == true
- name: Idempotent check
nxos_system: *defns
register: result
- assert:
that:
- result.changed == false
- name: teardown
nxos_config:
lines:
- no ip lookup source-interface
match: none
nxos_config: *reset
with_items:
- 1.1.1.1
- 2.2.2.2
- 3.3.3.3
ignore_errors: yes
# FIXME Copied from iosxr, not sure what we need here
- debug: msg="END nxapi/set_name_servers.yaml"