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 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
推荐阅读
- ios - iPhone本地文档目录中广播完成时如何存储来自RPBroadcastSampleHandler的广播数据?
- bash - 每次音量为零时,如何使用 ffmpeg 分割 mp4 视频?
- c# - 为什么我的 Razor、ASP.NET、C# HTTPRequests 不返回响应的正文?
- ios - 创建 nXn 矩阵,其值递增 Swift
- sql - 释放 SAP HANA 表变量内存
- python-3.x - factorplot 主标题与 seaborn 中的子标题重叠
- javascript - 如何使用 fetch API 填充 DIV?
- python - 我收到 ModuleNotFoundError: No module named _socket on ubuntu 18.04
- java - 如何通过单击第二个按钮显示第二个壁纸?
- sql - Regex_replace 仅检查 1 个实例