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

nxos_vlan, nxos_linkagg fix #36711

Merged
merged 2 commits into from
Feb 26, 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
10 changes: 6 additions & 4 deletions lib/ansible/modules/network/nxos/nxos_linkagg.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,19 +133,21 @@
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)

Expand Down
24 changes: 13 additions & 11 deletions lib/ansible/modules/network/nxos/nxos_vlan.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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():
Expand Down
70 changes: 70 additions & 0 deletions test/integration/targets/nxos_vlan/tests/common/agg.yaml
Original file line number Diff line number Diff line change
@@ -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"