我正在编写我的第一个ansible playbook并尝试使用已有的角色配置php 7。我找到了两个几乎符合我需求的角色,但是它们都没有提供我想要创建php.ini
文件的灵活性。
此角色使用名为php-fpm.yml
的任务来使用
php.ini
文件中的行
- name: Ensure timezone is set in fpm php.ini
lineinfile: dest=/etc/php/7.1/fpm/php.ini
regexp='date.timezone ='
line='date.timezone = {{ php_timezone }}'
此角色使用模板生成php.ini
并插入某些预定义变量以使其可配置。
date.timezone = {{ php_date_timezone }}
问题:
是否可以添加新的配置指令(让我们说设置mysqli.max_persistent=XYZ
)而不覆盖上述角色的文件?或者我是否必须坚持角色提供的配置选项?
我应该如何在不篡改角色的文件库的情况下扩展现有角色?
我目前的playbook.yml就像这样简单:
- name: Install PHP 7
hosts: all
become: yes
roles:
- ansible-role-php7
答案 0 :(得分:3)
您可以在实施中使用include_role。
例如/roles/myphp/tasks/main.yml
:
- include_role:
name: ansible-role-php7
- lineinfile:
dest: /etc/php/7.1/fpm/php.ini
regexp: 'mysqli.max_persistent ='
line: 'mysqli.max_persistent = {{ mysqli_max_persistent }}'
notify: restart php7-fpm
答案 1 :(得分:1)
我遇到了同样的问题,我还通过在自定义php角色中使用include_role
解决了这个问题。主要的php角色是使用ansible-galaxy
安装的,因此我的剧本结构如下所示:
roles/
php/
defaults/
main.yml
templates/
xdebug_config.ini.j2
tasks:
main.yml
requirements.yml
site.yml
在requirements.yml
文件中,指定要安装的所有星系角色:
- src: geerlingguy.php
然后我通过执行以下操作来安装所需的角色:
ansible-galaxy install -r requirements.yml
然后在我的site.yml
中,使用自己的角色扩展geerlingguy.php
的角色:
---
# Sample playbook
- name: "Development playbook"
hosts: all
become: yes
roles:
- role: php
tags: php
然后在roles/php/tasks/main.yml
中使用include_role
并为此角色设置扩展任务:
---
# Extends the geerlingguy.php role.
- name: Include base php role.
include_role:
name: geerlingguy.php
- name: Setup xdebug configuration.
template:
src: xdebug_config.ini.j2
dest: /etc/php/7.0/fpm/conf.d/xdebug_config.ini
mode: 0777
您可以使用ansible.cfg
文件来确保ansible可以找到使用ansible-galaxy
安装的角色,例如:
[defaults]
roles_path=/etc/ansible/roles