仅打印清单中的一项

时间:2019-04-23 12:33:07

标签: ansible

我有一个包含列表的变量

- debug:
    var: plugin_versions

输出

ok: [localhost] => {
    "plugin_versions": [
        {
            "name": "ace-editor",
            "version": "1.1"
        },
        {
            "name": "analysis-core",
            "version": "1.95"
        },
        {
            "name": "ant",
            "version": "1.9"
        }
]

现在我只想打印name

我尝试过的是

- debug:
    var: plugin_versions.name

- debug:
    var: plugin_versions[name]

但是在两种情况下我都能得到

TASK [plugins : debug] ***************************************************************************************************************
ok: [localhost] => {
    "plugin_versions.name": "VARIABLE IS NOT DEFINED!"
}

TASK [plugins : debug] ***************************************************************************************************************
ok: [localhost] => {
    "plugin_versions[name]": "VARIABLE IS NOT DEFINED!"
}

我一点也不知道,我还能在这里做什么,仅打印出name

3 个答案:

答案 0 :(得分:2)

您可以通过几种方式来实现。 plugin_versions是词典的列表,您可以使用循环打印每个字典的name属性,这里有两个可以使用的循环示例:

---
- hosts: localhost
  gather_facts: false
  vars:
    plugin_versions:
    - name: ace-editor
      version: '1.1'
    - name: analysis-core
      version: '1.95'
    - name: ant
      version: '1.9'

  tasks:

  - name: print variable - with_items
    debug:
      msg: "{{ item.name }}"
    with_items: 
    - "{{ plugin_versions }}"

  - name: print variable - with map filter
    debug:
      var: item
    with_items:
    - "{{ plugin_versions | map(attribute='name') | list }}"

输出:

[http_offline@greenhat-29 tests]$ ansible-playbook -i hosts test.yml 

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

TASK [print variable - with_items] *************************************************************************************************************************************************************************************
ok: [localhost] => (item={'name': 'ace-editor', 'version': '1.1'}) => {
    "msg": "ace-editor"
}
ok: [localhost] => (item={'name': 'analysis-core', 'version': '1.95'}) => {
    "msg": "analysis-core"
}
ok: [localhost] => (item={'name': 'ant', 'version': '1.9'}) => {
    "msg": "ant"
}

TASK [print variable - with map filter] ********************************************************************************************************************************************************************************
ok: [localhost] => (item=ace-editor) => {
    "item": "ace-editor"
}
ok: [localhost] => (item=analysis-core) => {
    "item": "analysis-core"
}
ok: [localhost] => (item=ant) => {
    "item": "ant"
}

PLAY RECAP *************************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0   

[http_offline@greenhat-29 tests]$ 

希望有帮助

答案 1 :(得分:0)

由于有了列表(plugin_versions),因此需要按索引访问每个元素:

---
- hosts: all

  vars:
    plugin_versions:
    - { name: "ace-editor", version: "1.1"}
    - { name: "analysis-core", version: "1.95"}
    - { name: "ant", version: "1.9"}

  tasks:
  - debug:  var=plugin_versions[0].name

此外,如果您要遍历列表中的所有项目,则可以执行以下操作:

  - debug: "var=item['name']"
    with_items: "{{ plugin_versions }}"

答案 2 :(得分:0)

您可以使用以下方法迭代变量的项:

- debug:
      var: item.name
  with_items: "{{plugin_versions}}"