从Ansible中的产品列表生成字符串
我需要为许多已定义的php版本安装php扩展列表 基本上,我有一个包含php版本的列表,还有一个包含一组扩展:从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_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网站上的词汇“不起作用”,至少当它自己使用的时候。