扩展ansible角色?
Extend ansible role?
我正在编写我的第一个 ansible 剧本,并尝试使用现有角色配置 php 7。我找到了 2 个几乎满足我需求的角色,但它们都没有提供创建 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
您可以在实施中使用 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
我遇到了同样的问题,我也通过在我的自定义 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
文件中,我指定要安装的所有 galaxy 角色:
- 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
我正在编写我的第一个 ansible 剧本,并尝试使用现有角色配置 php 7。我找到了 2 个几乎满足我需求的角色,但它们都没有提供创建 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
您可以在实施中使用 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
我遇到了同样的问题,我也通过在我的自定义 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
文件中,我指定要安装的所有 galaxy 角色:
- 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