Ansible:如何在循环时打印var名称?

问题描述 投票:1回答:1

我在setup/tasks/apps.yml里面有这个:

- name: Mac App Store | Install apps.
  shell: mas list | grep {{ item.id }} || mas install {{ item.id }}
  with_items: "{{ mac_store_apps }}"
  register: result
  changed_when: result.stdout.find('Installed') != -1  

我知道我可以用:

      loop_control:
        label: '{{ item.name }}'

但是我想打印一些类似的东西:

试图安装{{ item.name }}

在每次执行之前。怎么办?

ansible
1个回答
1
投票

在循环的每次迭代之前无法生成输出; Ansible仅在任务(或循环任务的迭代)完成时生成输出。如果您担心软件包安装可能需要一段时间而且您想提供一些反馈,您可以提前打印一份通知,如:

- debug:
    msg: "Note: package installation may take several minutes to complete"

您可以通过将安装任务放在单独的文件中,然后在循环中调用include_tasks来获得所需的内容。例如,如果我们有以下剧本:

---
- hosts: localhost
  gather_facts: false
  vars:
    mac_store_apps:
      - name: foo
      - name: bar
      - name: baz
      - name: qux
  tasks:
    - name: "Mac App Store | Install apps."
      include_tasks: ./install.yml
      with_items: "{{ mac_store_apps }}"

    - debug:
        var: all_results

以及install.yml中的以下任务:

---
- name: "Mac App Store | Install {{ item.name }}"
  shell: "true"
  register: result

- name: Store result
  set_fact:
    all_results: "{{ all_results|default([]) + [{'item': item, 'result': result}] }}"

我们将看作输出:

PLAY [localhost] ******************************************************************************

TASK [Mac App Store | Install apps.] **********************************************************
included: /home/lars/tmp/ansible/install.yml for localhost => (item={u'name': u'foo'})
included: /home/lars/tmp/ansible/install.yml for localhost => (item={u'name': u'bar'})
included: /home/lars/tmp/ansible/install.yml for localhost => (item={u'name': u'baz'})
included: /home/lars/tmp/ansible/install.yml for localhost => (item={u'name': u'qux'})

TASK [Mac App Store | Install foo] ************************************************************
changed: [localhost]

TASK [Store result] ***************************************************************************
ok: [localhost]

TASK [Mac App Store | Install bar] ************************************************************
changed: [localhost]

TASK [Store result] ***************************************************************************
ok: [localhost]

TASK [Mac App Store | Install baz] ************************************************************
changed: [localhost]

TASK [Store result] ***************************************************************************
ok: [localhost]

TASK [Mac App Store | Install qux] ************************************************************
changed: [localhost]

TASK [Store result] ***************************************************************************
ok: [localhost]

TASK [debug] **********************************************************************************
ok: [localhost] => {
    "all_results": [
        {
            "item": {
                "name": "foo"
            }, 
            "result": {
                "changed": true, 
                "cmd": "true", 
                "delta": "0:00:00.002398", 
                "end": "2019-04-23 11:19:25.146497", 
                "failed": false, 
                "rc": 0, 
                "start": "2019-04-23 11:19:25.144099", 
                "stderr": "", 
                "stderr_lines": [], 
                "stdout": "", 
                "stdout_lines": []
            }
        }, 
        {
            "item": {
                "name": "bar"
            }, 
            "result": {
                "changed": true, 
                "cmd": "true", 
                "delta": "0:00:00.002245", 
                "end": "2019-04-23 11:19:25.285859", 
                "failed": false, 
                "rc": 0, 
                "start": "2019-04-23 11:19:25.283614", 
                "stderr": "", 
                "stderr_lines": [], 
                "stdout": "", 
                "stdout_lines": []
            }
        }, 
        {
            "item": {
                "name": "baz"
            }, 
            "result": {
                "changed": true, 
                "cmd": "true", 
                "delta": "0:00:00.002406", 
                "end": "2019-04-23 11:19:25.426909", 
                "failed": false, 
                "rc": 0, 
                "start": "2019-04-23 11:19:25.424503", 
                "stderr": "", 
                "stderr_lines": [], 
                "stdout": "", 
                "stdout_lines": []
            }
        }, 
        {
            "item": {
                "name": "qux"
            }, 
            "result": {
                "changed": true, 
                "cmd": "true", 
                "delta": "0:00:00.002232", 
                "end": "2019-04-23 11:19:25.574214", 
                "failed": false, 
                "rc": 0, 
                "start": "2019-04-23 11:19:25.571982", 
                "stderr": "", 
                "stderr_lines": [], 
                "stdout": "", 
                "stdout_lines": []
            }
        }
    ]
}

PLAY RECAP ************************************************************************************
localhost                  : ok=13   changed=4    unreachable=0    failed=0   
© www.soinside.com 2019 - 2024. All rights reserved.