循环使用ansible任务遍历composer require

循环使用ansible任务遍历composer require,ansible,Ansible,我觉得这应该是非常直截了当的,但我已经在这里倾诉了ansible文档和其他答案,我被卡住了 我要做的是使用ansible composer对象在composer require语句中设置要使用的composer包数组或列表 因此,我有一个这样的事实来定义模块: - name: Define modules to be required set_fact: modules: - vendor1/package1 - vendor2/package2

我觉得这应该是非常直截了当的,但我已经在这里倾诉了ansible文档和其他答案,我被卡住了

我要做的是使用ansible composer对象在composer require语句中设置要使用的composer包数组或列表

因此,我有一个这样的事实来定义模块:

- name: Define modules to be required
  set_fact:
    modules:
      - vendor1/package1
      - vendor2/package2
      - vendorN/packageN
我已经把它放在我的ansible项目的顶部,因此它很容易访问和编辑。如果能想出如何简单地将yaml文件中的包定义为VAR,然后在剧本中使用set_fact,那就太好了,但我会坚持在这里讨论范围

考虑到这一点,我将在项目中扮演一个作曲家任务的角色,其中我需要以下各项:

- name: "Require packages"
  composer:
    command: require
    arguments: {{ modules_to_be_required }}
    working_dir: "{{ app['directory'] }}"
最初,我是使用以下内容来完成此操作的:

这确实有效;但是,它会导致编写器更新与with_项的每次迭代一起运行,这会花费太长的时间。对我来说,获取所需的包列表,将它们转换为以空格分隔的字符串,然后将其作为参数传递更为合理

在我的研究中,我发现我可以使用连接筛选器将列表转换为字符串,因此我尝试了以下方法:

- name: "Require packages"
  composer:
    command: require
    arguments: {{ modules | join(" " ) }}
    working_dir: "{{ app['directory'] }}"
但是,这给了我一个YAML语法错误:

The offending line appears to be:
command: require
arguments: {{ modules | join(" ") }}
            ^ here
我尝试过包装{{modules | join}},但是我因为括号中的引号而被骂


我是否以正确的方式处理这个想法,或者我需要问什么问题才能得到答案?感谢您的指导。

您的加入筛选器可以使用单引号

arguments: "{{ modules | join(' ') }}"
或者你可以跳过双引号

arguments: "{{ modules | join(\" \") }}"
也可以对变量使用单引号,对联接使用双引号

arguments: '{{ modules | join(" ") }}'

这是伟大的,感谢您的详细解释-非常感谢。
arguments: '{{ modules | join(" ") }}'