2015-03-25 4 views
22

Как определить определение предзаказа для зависимостей ролей. я в настоящее время имею apache роль, которая имеет пользовательскую переменную так в моей собственной роли в <role>/meta/main.yml я что-то вроде:Как указать допустимые предзадания для роли?

--- 
dependencies: 
    - { role: apache, user: proxy } 

Проблемы на данный момент является то, что я до сих пор не имеет пользователя указанный мной и когда роль пытается запустить apache сервер под несуществующим пользователем, я получаю сообщение об ошибке.

Я попытался создать задачу в <role>/tasks/main.yml как:

--- 
- user: name=proxy 

Но пользователь получает создается только после запуска apache задачи в зависимости (что и следовало ожидать). Итак, есть ли способ создать задачу, которая создавала бы пользователя перед запуском ролей в зависимостях?

+0

Можете ли вы опубликовать полный сборник пьес, а также пользовательскую роль? – Kashyap

+0

Также вы положили '- user: name = proxy' как' pre_tasks: 'или' tasks' в '/tasks/main.yml'? – Kashyap

+0

На самом деле, за исключением '---' часть строки над '- user: name = proxy', это весь файл, который у меня есть. Я редактировал содержимое, чтобы было более ясно, как выглядят мои файлы, но это все, что у меня есть сейчас, за исключением роли apache. –

ответ

9

Короткий ответ: Я не думаю, что язык позволяет указывать pre_tasks для ролей.

Вы можете обманывать/обходить, перемещая создание пользователя в отдельный плей-лист и include В игровой книге вместо role. Что-то вроде этого:

my_fake_role_playbooks/user_and_apache.yml:

- hosts: "{{p_hosts}}" 
    pre_tasks: 
    user: name=proxy 
    roles: [ apache ] 

actual_playbook.yml:

- include: my_fake_role_playbooks/user_and_apache.yml p_hosts=[host1, host2] 

* код не тестировался.

НТН

+0

Спасибо, «pre_tasks» работает! –

8

Вы могли бы просто решить эту проблему с другой зависимостью либо в вашем безымянном <role> или в apache роли.

Всего содержание новой роли прокси-пользователя:

--- 
- user: name=proxy 
... 

Затем в roles/apache/meta/main.yml добавить зависимость к нему.

--- 
dependencies: 
    - proxy-user 
... 

Или установить его в roles/<role>/meta/main.yml:

--- 
dependencies: 
    - proxy-user 
    - { role: apache, user: proxy } 
... 
1

У меня аналогичная потребность, и я решил ее, определив переменную в роли вары. То есть, создавая <role>/vars/main.yml с

--- 
user: proxy 

, который должен переопределить user переменную, определенную в апача модуле, при записи его в директории модуля defaults нет.

Я использую unsible 1.9, не уверен, как долго это поведение присутствует.

6

Просто пришлось иметь дело с проблемой, реальная проблема заключается в том, что предварительная задача очень вероятна в некоторой степени конкретнее, чем роль.Выполнение пост-задачи очень просто, потому что вы просто создадите новую зависимую от роли, это называется «роль обертки» ... или, по крайней мере, это то, что они называют этой идеей у шеф-повара, поскольку, когда вы пытаетесь расширить что-то ,

Для предварительной задачи вам нужно немного изменить иерархию, используя «роль обертки» и то, что я называю «ролью братьев». Таким образом, логика зависимость будет выглядеть как,

  • обертку роль
    • родственный роль
    • оригинальная роль

Оболочка имеет две зависимости, но убедитесь, чтобы добавить " роль сестры "сначала в списке зависимостей. Поскольку Ansible будет идти сверху вниз.

Наконец, вы должны поместить свои вары в роль обертки, чтобы вы могли перезаписать их из учебника. Вы хотите, чтобы переменные следовали за иерархией, насколько это возможно, и не перепрыгивали через братьев и сестер.

12

Я использую pre_tasks, чтобы выполнить некоторые задачи перед ролями, спасибо за Kashyap.

#!/usr/bin/env ansible-playbook 

--- 
- hosts: all 
    become: true 
    pre_tasks: 
    - name: start tasks and sent notifiaction to HipChat 
     hipchat: 
     color: purple 
     token: "{{ hipchat_token }}" 
     room: "{{ hipchat_room }}" 
     msg: "[Start] Run 'foo/setup.yml' playbook on {{ ansible_nodename }}." 

    roles: 
    - chusiang.vim-and-vi-mode 

    vars: 
    ... 

    tasks: 
    - name: include main task 
     include: tasks/main.yml 

    post_tasks: 
    - name: finish tasks and sent notifiaction to HipChat 
     hipchat: 
     color: green 
     token: "{{ hipchat_token }}" 
     room: "{{ hipchat_room }}" 
     msg: "[Finish] Run 'foo/setup.yml' playbook on {{ ansible_nodename }}." 

# vim:ft=ansible : 
+0

Прямо сейчас, мне нравится использовать 'pre_tasks' и' post_tasks' что-то делать. –

 Смежные вопросы

  • Нет связанных вопросов^_^