首页 > 解决方案 > 如何在 Ansible 中转换字符串列表中的对象列表?

问题描述

我有一个形式的变量:

vars:
  somelist:
    - abc: 1
      def: 'somestring1'
    - abc: 2
      def: 'somestring2'
    - abc: 3
      def: 'somestring3'

我想将以下列表传递给某个角色的变量:

    - import_role:
        name: somerole
      vars:
        somevar:
          - '/somestring1/1/'
          - '/somestring2/2/'
          - '/somestring3/3/'

如何将对象映射somelist到字符串/{{ def }}/{{ abc }}/并将结果列表传递给somevar

标签: pythonansibleyamljinja2

解决方案


在 Ansible 中,下面的任务完成了这项工作

    - set_fact:
        somevar: "{{ somevar|default([]) +
                     [ '/' ~ item.def ~ '/' ~ item.abc ~ '/'] }}"
      loop: "{{ somelist }}"

下一个选项是选择值,在属性前后添加空字符串,并加入列表的项目。例如
    - set_fact:
        somevar: "{{ somelist|json_query('[].[``,def,abc,``]')|
                              map('join','/')|
                              list }}"

  somevar:
  - /somestring1/1/
  - /somestring2/2/
  - /somestring3/3/

推荐阅读