扩大安全角色?

时间:2018-01-17 13:38:57

标签: ansible ansible-2.x ansible-template

我正在编写我的第一个ansible playbook并尝试使用已有的角色配置php 7。我找到了两个几乎符合我需求的角色,但是它们都没有提供我想要创建php.ini文件的灵活性。

  1. https://github.com/itcraftsmanpl/ansible-role-php7
  2. 此角色使用名为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 }}'
    
    1. https://github.com/geerlingguy/ansible-role-php/
    2. 此角色使用模板生成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
      

2 个答案:

答案 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