簡體   English   中英

在Ansible劇本中循環注冊變量

[英]Register Variables in Loop in an Ansible Playbook

我有以下兩項艱巨的任務

  tasks:
 - shell: ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d'
   register: var1
 - debug: var=var1

 - shell: ethtool -i {{ item }} | grep bus-info | cut -b 16-22
   with_items: var1.stdout_lines
   register: var2
 - debug: var=var2

用於獲取計算機(Linux)中的接口列表並獲取每個接口的總線地址。 我在同一本劇本中還有另外一項任務,如下

 - name: Binding the interfaces
   shell: echo {{ item.item }}
   with_flattened: var2.results
   register: var3

我希望對var2的值進行迭代,然后打印總線號。

var2.results如下

"var2": {
    "changed": true,
    "msg": "All items completed",
    "results": [
        {
            "changed": true,
            "cmd": "ethtool -i br0: | grep bus-info | cut -b 16-22",
            "delta": "0:00:00.005778",
            "end": "2015-04-14 20:29:47.122203",
            "invocation": {
                "module_args": "ethtool -i br0: | grep bus-info | cut -b 16-22",
                "module_name": "shell"
            },
            "item": "br0:",
            "rc": 0,
            "start": "2015-04-14 20:29:47.116425",
            "stderr": "",
            "stdout": "",
            "warnings": []
        },
        {
            "changed": true,
            "cmd": "ethtool -i enp13s0: | grep bus-info | cut -b 16-22",
            "delta": "0:00:00.005862",
            "end": "2015-04-14 20:29:47.359749",
            "invocation": {
                "module_args": "ethtool -i enp13s0: | grep bus-info | cut -b 16-22",
                "module_name": "shell"
            },
            "item": "enp13s0:",
            "rc": 0,
            "start": "2015-04-14 20:29:47.353887",
            "stderr": "",
            "stdout": "0d:00.0",
            "warnings": []
        },
        {
            "changed": true,
            "cmd": "ethtool -i enp14s0: | grep bus-info | cut -b 16-22",
            "delta": "0:00:00.005805",
            "end": "2015-04-14 20:29:47.576674",
            "invocation": {
                "module_args": "ethtool -i enp14s0: | grep bus-info | cut -b 16-22",
                "module_name": "shell"
            },
            "item": "enp14s0:",
            "rc": 0,
            "start": "2015-04-14 20:29:47.570869",
            "stderr": "",
            "stdout": "0e:00.0",
            "warnings": []
        },
        {
            "changed": true,
            "cmd": "ethtool -i enp15s0: | grep bus-info | cut -b 16-22",
            "delta": "0:00:00.005873",
            "end": "2015-04-14 20:29:47.875058",
            "invocation": {
                "module_args": "ethtool -i enp15s0: | grep bus-info | cut -b 16-22",
                "module_name": "shell"
            },
            "item": "enp15s0:",
            "rc": 0,
            "start": "2015-04-14 20:29:47.869185",
            "stderr": "",
            "stdout": "0f:00.0",
            "warnings": []
        },
        {
            "changed": true,
            "cmd": "ethtool -i enp5s0f1: | grep bus-info | cut -b 16-22",
            "delta": "0:00:00.005870",
            "end": "2015-04-14 20:29:48.112027",
            "invocation": {
                "module_args": "ethtool -i enp5s0f1: | grep bus-info | cut -b 16-22",
                "module_name": "shell"
            },
            "item": "enp5s0f1:",
            "rc": 0,
            "start": "2015-04-14 20:29:48.106157",
            "stderr": "",
            "stdout": "05:00.1",
            "warnings": []
        },
        {
            "changed": true,
            "cmd": "ethtool -i enp5s0f2: | grep bus-info | cut -b 16-22",
            "delta": "0:00:00.005863",
            "end": "2015-04-14 20:29:48.355733",
            "invocation": {
                "module_args": "ethtool -i enp5s0f2: | grep bus-info | cut -b 16-22",
                "module_name": "shell"
            },
            "item": "enp5s0f2:",
            "rc": 0,
            "start": "2015-04-14 20:29:48.349870",
            "stderr": "",
            "stdout": "05:00.2",
            "warnings": []
        },
        {
            "changed": true,
            "cmd": "ethtool -i enp5s0f3: | grep bus-info | cut -b 16-22",
            "delta": "0:00:00.005829",
            "end": "2015-04-14 20:29:48.591244",
            "invocation": {
                "module_args": "ethtool -i enp5s0f3: | grep bus-info | cut -b 16-22",
                "module_name": "shell"
            },
            "item": "enp5s0f3:",
            "rc": 0,
            "start": "2015-04-14 20:29:48.585415",
            "stderr": "",
            "stdout": "05:00.3",
            "warnings": []
        },
        {
            "changed": true,
            "cmd": "ethtool -i enp9s0f0: | grep bus-info | cut -b 16-22",
            "delta": "0:00:00.005943",
            "end": "2015-04-14 20:29:48.910992",
            "invocation": {
                "module_args": "ethtool -i enp9s0f0: | grep bus-info | cut -b 16-22",
                "module_name": "shell"
            },
            "item": "enp9s0f0:",
            "rc": 0,
            "start": "2015-04-14 20:29:48.905049",
            "stderr": "",
            "stdout": "09:00.0",
            "warnings": []
        },
        {
            "changed": true,
            "cmd": "ethtool -i enp9s0f1: | grep bus-info | cut -b 16-22",
            "delta": "0:00:00.005863",
            "end": "2015-04-14 20:29:49.143706",
            "invocation": {
                "module_args": "ethtool -i enp9s0f1: | grep bus-info | cut -b 16-22",
                "module_name": "shell"
            },
            "item": "enp9s0f1:",
            "rc": 0,
            "start": "2015-04-14 20:29:49.137843",
            "stderr": "",
            "stdout": "09:00.1",
            "warnings": []
        },
        {
            "changed": true,
            "cmd": "ethtool -i lo: | grep bus-info | cut -b 16-22",
            "delta": "0:00:00.005856",
            "end": "2015-04-14 20:29:49.386044",
            "invocation": {
                "module_args": "ethtool -i lo: | grep bus-info | cut -b 16-22",
                "module_name": "shell"
            },
            "item": "lo:",
            "rc": 0,
            "start": "2015-04-14 20:29:49.380188",
            "stderr": "Cannot get driver information: Operation not supported",
            "stdout": "",
            "warnings": []
        },
        {
            "changed": true,
            "cmd": "ethtool -i virbr0: | grep bus-info | cut -b 16-22",
            "delta": "0:00:00.005859",
            "end": "2015-04-14 20:29:49.632356",
            "invocation": {
                "module_args": "ethtool -i virbr0: | grep bus-info | cut -b 16-22",
                "module_name": "shell"
            },
            "item": "virbr0:",
            "rc": 0,
            "start": "2015-04-14 20:29:49.626497",
            "stderr": "",
            "stdout": "",
            "warnings": []
        },
        {
            "changed": true,
            "cmd": "ethtool -i virbr0-nic: | grep bus-info | cut -b 16-22",
            "delta": "0:00:00.024850",
            "end": "2015-04-14 20:29:49.901539",
            "invocation": {
                "module_args": "ethtool -i virbr0-nic: | grep bus-info | cut -b 16-22",
                "module_name": "shell"
            },
            "item": "virbr0-nic:",
            "rc": 0,
            "start": "2015-04-14 20:29:49.876689",
            "stderr": "",
            "stdout": "",
            "warnings": []
        }
    ]

我的目標是獲取上述每個項目中stdout的值,例如(“ stdout”:“ 09:00.0”)。 我試圖給像

     - name: Binding the interfaces
       shell: echo {{ item.item.stdout}}
       with_flattened: var2.results
#       with_indexed_items: var2.results
       register: var3

但這不能正確提供標准輸出中的總線值。 當第二個變量是and indexed list時,如下面給出的那樣,在列出任務中變量值的變量方面提供了幫助。 我試圖避免像item [0]這樣的直接索引編號,因為接口的數量是動態的,並且直接索引可能會導致意外的結果。

謝謝

這是您要找的東西嗎?

- hosts: localhost
  tags: s21
  gather_facts: no
  vars:
    images:
      - foo
      - bar
  tasks:
    - shell: "echo result-{{item}}"
      register: "r"
      with_items: "{{images}}"

    - debug: var=r

    - debug: msg="item.item={{item.item}}, item.stdout={{item.stdout}}, item.changed={{item.changed}}"
      with_items: "{{r.results}}"

    - debug: msg="Gets printed only if this item changed - {{item}}"
      when: "{{item.changed == true}}"
      with_items: "{{r.results}}"

來源: 在Ansible劇本的with_items循環中注冊變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM