Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Ansible中的产品列表生成字符串_Ansible - Fatal编程技术网

从Ansible中的产品列表生成字符串

从Ansible中的产品列表生成字符串,ansible,Ansible,我需要为许多已定义的php版本安装php扩展列表 基本上,我有一个包含php版本的列表,还有一个包含一组扩展: php_defaults_modules: - curl - mbstring - gd - json - imap - readline - xml - zip - mysql - pgsql php_version: - 7.4 - 7.2 我为数据包安装编写了以下任务: - name: "Install base modu

我需要为许多已定义的php版本安装php扩展列表

基本上,我有一个包含php版本的列表,还有一个包含一组扩展:

php_defaults_modules:
  - curl
  - mbstring
  - gd
  - json
  - imap
  - readline
  - xml
  - zip
  - mysql
  - pgsql

php_version:
 - 7.4
 - 7.2
我为数据包安装编写了以下任务:

- name: "Install base modules"
  apt:
    name: "php{{ item[0] }}-{{ item[1] }}"
    state: present
  notify:
    - Reload FPM
  loop: "{{  php_version |product( php_defaults_modules)|list }}"
但是它需要太多的时间,因为检查操作是针对每个数据包进行的。 这就是为什么我更愿意生成一条传输到apt的线路。等效于:

apt install php7.2-curl php7.2-mb [...] php7.4-mysql php 7.4-pgsql
我试过类似的东西

- name: Define base modules
  set_fact:
    php_extensions: "{{ php_extensions }} + '[ php{{ item[0] }}-{{ item[1] }} ] '"
  loop: "{{  php_version |product( php_defaults_modules) | list }}"
但显然这不是解决办法

有没有办法使安装和检查更快


谢谢

这是我的解决方案,不是建立一个列表,而是一个字符串,然后拆分它。也许不是最好的解决方案,但它是有效的:

- name: Define base modules
  set_fact:
    php_extensions: ""

- name: Define base modules
  set_fact:
    php_extensions: "{{ php_extensions }} php{{ item[0] }}-{{ item[1] }}"
  loop: "{{ php_version |product( php_defaults_modules ) | list }}"

- name: Install php packages
  apt:
    name: "{{ php_extensions.split() }}"
  notify:
    - Reload FPM

这是我的解决方案,不是建立一个列表,而是一个字符串,然后拆分它。也许不是最好的解决方案,但它是有效的:

- name: Define base modules
  set_fact:
    php_extensions: ""

- name: Define base modules
  set_fact:
    php_extensions: "{{ php_extensions }} php{{ item[0] }}-{{ item[1] }}"
  loop: "{{ php_version |product( php_defaults_modules ) | list }}"

- name: Install php packages
  apt:
    name: "{{ php_extensions.split() }}"
  notify:
    - Reload FPM

但显然这不是解决方案。
=>你能解释一下原因吗?因为这显然是解决办法。正如
apt
模块文档中明确规定的那样,您不应该在包名称上使用循环,而应该将包名称列表直接发送到
name
属性。我的意思是,构建列表是解决方案,但我这样做是行不通的。它给我以下字符串“[]+'[php7.4-curl]'+'[php7.4-mbstring]…`
但显然它不是解决方案。
=>您能解释一下原因吗?因为它显然是解决方案。正如
apt
模块文档中明确规定的,您不应该使用包名循环,而应该将包名列表直接发送到
name
属性。我的意思是,构建列表是解决方案,但我这样做不起作用。它给我以下字符串“[]+'[php7.4-curl]+'[php7.4-mbstring]…”
php_扩展:“{{{php_扩展}默认([])+['php'+item.0+'-'+item.1]}
。对于未来的问题,你应该考虑禁止你在Q&A网站上的词汇“不起作用”,至少当它自己使用时。代码>php_扩展:“{{php_扩展|默认([])+['php'+item.0+'-'+item.1]}”。对于未来的问题,你应该考虑禁止你在Q&A网站上的词汇“不起作用”,至少当它自己使用的时候。