From 16845be9b1874bbeaf9f95ef1f544cedd5de1115 Mon Sep 17 00:00:00 2001 From: Trishna Guha Date: Wed, 21 Feb 2018 20:15:09 +0530 Subject: [PATCH] nxos fixes (#36514) * fix nxos_pim module doc (#36505) * fix nxos_pim module doc Signed-off-by: Trishna Guha * address review (cherry picked from commit 9598978e12fd5f4760c7045379988a400a225cd9) * nxos_vrf fix (#36494) * nxos_vrf fix Signed-off-by: Trishna Guha * Address review Signed-off-by: Trishna Guha (cherry picked from commit 713828804dccabbe1076eb983e75ae189e719e8a) --- lib/ansible/modules/network/nxos/nxos_pim.py | 22 +++++++--- lib/ansible/modules/network/nxos/nxos_vrf.py | 43 +++++++++++++------- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/lib/ansible/modules/network/nxos/nxos_pim.py b/lib/ansible/modules/network/nxos/nxos_pim.py index edf7f8eb2ae..625dbfeaeb9 100644 --- a/lib/ansible/modules/network/nxos/nxos_pim.py +++ b/lib/ansible/modules/network/nxos/nxos_pim.py @@ -34,13 +34,25 @@ options: ssm_range: description: - Configure group ranges for Source Specific Multicast (SSM). - Valid values are multicast addresses or the keyword 'none' - or keyword 'default' + Valid values are multicast addresses or the keyword C(none) + or keyword C(default). C(none) removes all SSM group ranges. + C(default) will set ssm_range to the default multicast address. + If you set multicast address, please ensure that it is not the + same as the C(default), otherwise use the C(default) option. required: true ''' EXAMPLES = ''' -- nxos_pim: - ssm_range: "232.0.0.0/8" +- name: Configure ssm_range + nxos_pim: + ssm_range: "224.0.0.0/8" + +- name: Set to default + nxos_pim: + ssm_range: default + +- name: Remove all ssm group ranges + nxos_pim: + ssm_range: none ''' RETURN = ''' @@ -48,7 +60,7 @@ commands: description: commands sent to the device returned: always type: list - sample: ["ip pim ssm range 232.0.0.0/8"] + sample: ["ip pim ssm range 224.0.0.0/8"] ''' diff --git a/lib/ansible/modules/network/nxos/nxos_vrf.py b/lib/ansible/modules/network/nxos/nxos_vrf.py index 291819453b6..59a458e2e64 100644 --- a/lib/ansible/modules/network/nxos/nxos_vrf.py +++ b/lib/ansible/modules/network/nxos/nxos_vrf.py @@ -224,12 +224,12 @@ def map_obj_to_commands(updates, module): state = module.params['state'] purge = module.params['purge'] + args = ('rd', 'description', 'vni') + for w in want: name = w['name'] - description = w['description'] - vni = w['vni'] - rd = w['rd'] admin_state = w['admin_state'] + vni = w['vni'] interfaces = w.get('interfaces') or [] state = w['state'] del w['state'] @@ -242,22 +242,17 @@ def map_obj_to_commands(updates, module): elif state == 'present': if not obj_in_have: commands.append('vrf context {0}'.format(name)) - if rd and rd != '': - commands.append('rd {0}'.format(rd)) - if description: - commands.append('description {0}'.format(description)) - if vni and vni != '': - commands.append('vni {0}'.format(vni)) + for item in args: + candidate = w.get(item) + if candidate: + cmd = item + ' ' + str(candidate) + commands.append(cmd) if admin_state == 'up': commands.append('no shutdown') elif admin_state == 'down': commands.append('shutdown') - - if commands: - if vni: - if have.get('vni') and have.get('vni') != '': - commands.insert(1, 'no vni {0}'.format(have['vni'])) commands.append('exit') + if interfaces: for i in interfaces: commands.append('interface {0}'.format(i)) @@ -265,6 +260,26 @@ def map_obj_to_commands(updates, module): commands.append('vrf member {0}'.format(name)) else: + # If vni is already configured on vrf, unconfigure it first. + if vni: + if obj_in_have.get('vni') and vni != obj_in_have.get('vni'): + commands.append('no vni {0}'.format(obj_in_have.get('vni'))) + + for item in args: + candidate = w.get(item) + if candidate and candidate != obj_in_have.get(item): + cmd = item + ' ' + str(candidate) + commands.append(cmd) + if admin_state and admin_state != obj_in_have.get('admin_state'): + if admin_state == 'up': + commands.append('no shutdown') + elif admin_state == 'down': + commands.append('shutdown') + + if commands: + commands.insert(0, 'vrf context {0}'.format(name)) + commands.append('exit') + if interfaces: if not obj_in_have['interfaces']: for i in interfaces: