Как сохранить только успех в качестве вывода в переменной при использовании with_item? - PullRequest
0 голосов
/ 01 августа 2020

Есть список портов, которые я хочу запросить на двух разных коммутаторах, но из списка несколько портов доступны на первом коммутаторе, а несколько портов доступны на втором коммутаторе.

и когда я запускаю playbook несколько порты становятся успешными, и несколько портов игнорируются, и все, что было успешным, должно быть сохранено в переменной ... как мне это сделать, вот моя задача playbook.

- set_fact:
    fact1: "{{ maclist1 | json_query('json.facts_hash') }}"

- set_fact:
    swport_list: "{{ my_keys| map('extract', fact1)| list }}"
  vars:
      my_keys: "{{ fact1.keys()| select('match', '^lldp_neighbor_portid_(.*)$') | list }}"

- name: Query the port on the switch
  ios_command:
    commands: show lldp neighbors {{ item }} | in fdi
  with_items: "{{ swport_list }}"
  ignore_errors: yes
  register: port_array_result

Выход в режиме отладки Playbook ---

ok: [10.10.10.177] => (item=Gi1/0/21) => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "ansible_loop_var": "item",
    "changed": false,
    "invocation": {
        "module_args": {
            "auth_pass": null,
            "authorize": null,
            "commands": [
                "show lldp neighbors Gi1/0/21 | in fdi"
            ],
            "host": null,
            "interval": 1,
            "match": "all",
            "password": null,
            "port": null,
            "provider": null,
            "retries": 10,
            "ssh_keyfile": null,
            "timeout": null,
            "username": null,
            "wait_for": null
        }
    },
    "item": "Gi1/0/21",
    "stdout": [
        "fdi                 Gi1/0/21       106        S               ac1f.6bc8.e8ce"
    ],
    "stdout_lines": [
        [
            "fdi                 Gi1/0/21       106        S               ac1f.6bc8.e8ce"
        ]
    ]
}


The full traceback is:
WARNING: The below traceback may *not* be related to the actual failure.
  File "/tmp/ansible_ios_command_payload_jsyA3V/ansible_ios_command_payload.zip/ansible/module_utils/network/ios/ios.py", line 135, in run_commands
    return connection.run_commands(commands=commands, check_rc=check_rc)
  File "/tmp/ansible_ios_command_payload_jsyA3V/ansible_ios_command_payload.zip/ansible/module_utils/connection.py", line 185, in __rpc__
    raise ConnectionError(to_text(msg, errors='surrogate_then_replace'), code=code)
failed: [10.10.10.177] (item=4) => {
    "ansible_loop_var": "item",
    "changed": false,
    "invocation": {
        "module_args": {
            "auth_pass": null,
            "authorize": null,
            "commands": [
                "show lldp neighbors 4 | in fdi"
            ],
            "host": null,
            "interval": 1,
            "match": "all",
            "password": null,
            "port": null,
            "provider": null,
            "retries": 10,
            "ssh_keyfile": null,
            "timeout": null,
            "username": null,
            "wait_for": null
        }
    },
    "item": "4",
    "msg": "show lldp neighbors 4 | in fdi\r\nshow lldp neighbors 4 | in fdi\r\n                    ^\r\n% Invalid input detected at '^' marker.\r\n\r\nbmass-mgmt#"
}
...ignoring

Примечание: в приведенном выше игнорировании элемента вывода не удалось, потому что порт номер 4 отсутствует на этом коммутаторе.

1 Ответ

0 голосов
/ 03 августа 2020

Это то, что я сделал, чтобы сохранить единственный успех -

- set_fact:
    fact1: "{{ maclist1 | json_query('json.facts_hash') }}"

- set_fact:
    swport_list: "{{ my_keys| map('extract', fact1)| list }}"
  vars:
      my_keys: "{{ fact1.keys()| select('match', '^lldp_neighbor_portid_(.*)$') | list }}"

- name: Query the port on the switch
  ios_command:
    commands: show lldp neighbors {{ item }} | in fdi
  with_items: "{{ swport_list }}"
  ignore_errors: yes
  register: port_array_result


    - name: output print
      debug:
        msg: "{{ item }}"
      with_items: "{{ port_array_result.results }}"
      when: item.stdout is defined
      register: comout

    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...