如何在Ansible中将对象列表转换为字符串列表?

3

I have a variable in the form:

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

2个回答

3
在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/

0

你可以使用列表推导式。

somevar.extend([f'/{l.def}/{l.abc}/' for l in somelist])


那是Python的语法吗?我不确定它能在Ansible和jinja2中工作。 - Shoe Diamente
是的。这是Python。不。它不能在Ansible和Jinja2中运行。我已经在另一个答案中添加了Ansible版本。 - Vladimir Botka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接