nxos_vlan, nxos_linkagg fix (#36711)
* fix nxos_vlan aggregate (#36710) * fix nxos_vlan aggregate Signed-off-by: Trishna Guha <trishnaguha17@gmail.com> * Add test Signed-off-by: Trishna Guha <trishnaguha17@gmail.com> (cherry picked from commit44332bda78
) * nxos_linkagg fix (#36706) Signed-off-by: Trishna Guha <trishnaguha17@gmail.com> (cherry picked from commitd6912cf40e
)
This commit is contained in:
parent
d60eac9bc4
commit
b1bdc5dae2
3 changed files with 89 additions and 15 deletions
|
@ -133,19 +133,21 @@ import re
|
|||
from copy import deepcopy
|
||||
|
||||
from ansible.module_utils.network.nxos.nxos import get_config, load_config, run_commands
|
||||
from ansible.module_utils.network.nxos.nxos import nxos_argument_spec
|
||||
from ansible.module_utils.network.nxos.nxos import get_capabilities, nxos_argument_spec
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
from ansible.module_utils.network.common.utils import remove_default_spec
|
||||
|
||||
|
||||
def execute_show_command(command, module):
|
||||
provider = module.params['provider']
|
||||
if provider['transport'] == 'cli':
|
||||
device_info = get_capabilities(module)
|
||||
network_api = device_info.get('network_api', 'nxapi')
|
||||
|
||||
if network_api == 'cliconf':
|
||||
if 'show port-channel summary' in command:
|
||||
command += ' | json'
|
||||
cmds = [command]
|
||||
body = run_commands(module, cmds)
|
||||
elif provider['transport'] == 'nxapi':
|
||||
elif network_api == 'nxapi':
|
||||
cmds = [command]
|
||||
body = run_commands(module, cmds)
|
||||
|
||||
|
|
|
@ -171,17 +171,19 @@ def search_obj_in_list(vlan_id, lst):
|
|||
return o
|
||||
|
||||
|
||||
def get_diff(w, have):
|
||||
def get_diff(w, obj):
|
||||
c = deepcopy(w)
|
||||
del c['interfaces']
|
||||
del c['name']
|
||||
del c['associated_interfaces']
|
||||
for o in have:
|
||||
del o['interfaces']
|
||||
del o['name']
|
||||
if o['vlan_id'] == w['vlan_id']:
|
||||
diff_dict = dict(set(c.items()) - set(o.items()))
|
||||
return diff_dict
|
||||
entries = ('interfaces', 'associated_interfaces', 'name', 'delay', 'vlan_range')
|
||||
for key in entries:
|
||||
if key in c:
|
||||
del c[key]
|
||||
|
||||
o = deepcopy(obj)
|
||||
del o['interfaces']
|
||||
del o['name']
|
||||
if o['vlan_id'] == w['vlan_id']:
|
||||
diff_dict = dict(set(c.items()) - set(o.items()))
|
||||
return diff_dict
|
||||
|
||||
|
||||
def map_obj_to_commands(updates, module, os_platform):
|
||||
|
@ -269,7 +271,7 @@ def map_obj_to_commands(updates, module, os_platform):
|
|||
commands.append('no switchport access vlan {0}'.format(vlan_id))
|
||||
|
||||
else:
|
||||
diff = get_diff(w, have)
|
||||
diff = get_diff(w, obj_in_have)
|
||||
if diff:
|
||||
commands.append('vlan {0}'.format(vlan_id))
|
||||
for key, value in diff.items():
|
||||
|
|
70
test/integration/targets/nxos_vlan/tests/common/agg.yaml
Normal file
70
test/integration/targets/nxos_vlan/tests/common/agg.yaml
Normal file
|
@ -0,0 +1,70 @@
|
|||
---
|
||||
- debug: msg="START connection={{ ansible_connection }}/agg.yaml"
|
||||
- debug: msg="Using provider={{ connection.transport }}"
|
||||
when: ansible_connection == "local"
|
||||
|
||||
- name: setup - remove vlan used in test
|
||||
nxos_config: &rm
|
||||
lines:
|
||||
- no vlan 102
|
||||
- no vlan 103
|
||||
provider: "{{ connection }}"
|
||||
ignore_errors: yes
|
||||
|
||||
|
||||
- name: configure vlan with aggregate
|
||||
nxos_vlan: &conf1
|
||||
aggregate:
|
||||
- { name: app02, vlan_id: 102 }
|
||||
- { name: app03, vlan_id: 103 }
|
||||
vlan_state: active
|
||||
admin_state: up
|
||||
provider: "{{ connection }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- 'result.changed == true'
|
||||
- '"vlan 102" in result.commands'
|
||||
- '"vlan 103" in result.commands'
|
||||
- '"no shutdown" in result.commands'
|
||||
- '"state active" in result.commands'
|
||||
|
||||
- name: conf1 - Idempotence
|
||||
nxos_vlan: *conf1
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- 'result.changed == false'
|
||||
|
||||
- name: change property of existing vlan - admin_state down
|
||||
nxos_vlan: &conf2
|
||||
aggregate:
|
||||
- { name: app02, vlan_id: 102 }
|
||||
- { name: app03, vlan_id: 103 }
|
||||
vlan_state: active
|
||||
admin_state: down
|
||||
provider: "{{ connection }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- 'result.changed == true'
|
||||
- '"vlan 102" in result.commands'
|
||||
- '"vlan 103" in result.commands'
|
||||
- '"shutdown" in result.commands'
|
||||
|
||||
- name: conf2 - Idempotence
|
||||
nxos_vlan: *conf2
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- 'result.changed == false'
|
||||
|
||||
- name: teardown
|
||||
nxos_config: *rm
|
||||
ignore_errors: yes
|
||||
|
||||
- debug: msg="END connection={{ ansible_connection }}/agg.yaml"
|
Loading…
Reference in a new issue