在Ansible中的失败任务循环中获取项值

时间:2018-01-16 09:11:59

标签: loops ansible

我尝试用Ansible执行一个有趣的事情,但出了点问题。

示例:

  1. 文本文件包含某些主机的IP地址。
  2. 我需要读取文件中的每一行,并检查每个IP地址的SSH端口是否打开。
  3. 如果我在检查主机端口时出现超时,那么我应该知道哪个IP地址似乎有问题,并将此项目传递给变量以执行其他检查。
  4. 文件内容:

    1.1.1.1
    1.1.1.2
    1.1.1.2
    

    Ansible playbook:

    - hosts: localhost
      connection: local
      gather_facts: no
      tasks:
      - name: Get list of IP adresses
        shell: cat /home/file
        register: ip_addrs
      - name: Check SSH port
        wait_for:
          host: "{{ item }}"
          port: 22
          timeout: 5
        with_items: "{{ ip_addrs.stdout_lines }}"
        ignore_errors: true
    

    我的剧本以结果结束:

    ok - 1.1.1.1
    ok - 1.1.1.2
    timeout - 1.1.1.3
    

    循环的结果包括一个回复中每个任务的结果。 我的问题:如何在循环中提取项目的值,导致我的任务失败?

    类似于register: result的循环任务和项目when: result|failed的某些命令。

1 个答案:

答案 0 :(得分:0)

注册循环任务的结果并检查每个项目的子结果,如下所示:

  - name: Check SSH port
    wait_for:
      host: "{{ item }}"
      port: 22
      timeout: 5
    with_items: "{{ ip_addrs.stdout_lines }}"
    ignore_errors: true
    register: loop_res
  - debug:
      msg: bad host
    when: item is failed
    with_items: "{{ loop_res.results }}"