diff --git a/ansible/library/show_interface.py b/ansible/library/show_interface.py index ccd06e0b715..3006302d424 100644 --- a/ansible/library/show_interface.py +++ b/ansible/library/show_interface.py @@ -67,6 +67,7 @@ def __init__(self): argument_spec=dict( command=dict(required=True, type='str'), interfaces=dict(required=False, type='list', default=None), + up_ports=dict(type='raw', default={}), ), supports_check_mode=False) self.m_args = self.module.params @@ -150,6 +151,17 @@ def collect_interface_status(self): if rc != 0: self.module.fail_json(msg="Command failed rc = %d, out = %s, err = %s" % (rc, self.out, err)) + if 'up_ports' in self.m_args: + down_ports = [] + up_ports = self.m_args['up_ports'] + for name in up_ports: + try: + if self.int_status[name]['oper_state'] != 'up': + down_ports += [name] + except: + down_ports += [name] + self.facts['ansible_interface_link_down_ports'] = down_ports + return def collect_interface_counter(self): diff --git a/ansible/roles/test/tasks/port_toggle.yml b/ansible/roles/test/tasks/port_toggle.yml index 7bfdec72024..187b96158c4 100644 --- a/ansible/roles/test/tasks/port_toggle.yml +++ b/ansible/roles/test/tasks/port_toggle.yml @@ -5,12 +5,21 @@ shell: PORTS="{{minigraph_ports.keys() | join(' ')}}"; for port in $PORTS; do config interface shutdown $port; done become: yes +- name: wait 20 seconds for ports to down + pause: seconds=20 + - name: Get interface facts interface_facts: up_ports={{minigraph_ports}} - name: Verify interfaces are all down assert: { that: "{{ ansible_interface_link_down_ports | length }} == {{ minigraph_ports | length }}" } +- name: Get interface status from show interface status + show_interface: up_ports={{minigraph_ports}} command=status + +- name: Verify interfaces with command output + assert: { that: "{{ ansible_interface_link_down_ports | length }} == {{ minigraph_ports | length }}" } + - block: - name: build shell command string debug: msg="PORTS={{minigraph_ports.keys() | join(' ')}}; for port in $PORTS; do config interface startup $port; done"