Comment spécifier des pré-tâches possibles pour un rôle?
comment définir un pretask pour les dépendances de rôle.
J'ai actuellement un apache
rôle d'une variable utilisateur, donc dans mon propre rôle dans <role>/meta/main.yml
je fais quelque chose comme:
---
dependencies:
- { role: apache, user: proxy }
Le problème maintenant est que je n'ai toujours pas l'utilisateur-je spécifier et quand le rôle essaie de démarrer apache
serveur sous un utilisateur inexistant, je reçois une erreur.
j'ai essayé de créer une tâche dans <role>/tasks/main.yml
comme:
---
- user: name=proxy
Mais l'utilisateur est créé uniquement après l'exécution de l' apache
tâche dans les dépendances (ce qui est à prévoir). Donc, est-il possible de créer une tâche de créer un utilisateur avant d'exécuter les rôles dans les dépendances?
6 réponses
j'utilise pre_tasks pour certaines tâches avant de rôles, merci pour l' 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 :
brève réponse: Je ne pense pas que la langue permette de spécifier pre_tasks
pour les rôles.
vous pourriez tricher / contourner en déplaçant la création de l'utilisateur à un playbook séparé et include
ing le playbook au lieu de role
. Quelque chose comme ceci:
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]
* le code n'a pas été testé.
HTH
vous pouvez simplement résoudre cela avec une autre dépendance soit dans votre unnamed <role>
ou apache
rôle.
Tout le contenu d'un nouveau proxy-rôle de l'utilisateur:
---
- user: name=proxy
...
Puis roles/apache/meta/main.yml
ajouter une dépendance.
---
dependencies:
- proxy-user
...
Ou le mettre dans roles/<role>/meta/main.yml
:
---
dependencies:
- proxy-user
- { role: apache, user: proxy }
...
Juste eu à traiter le problème, le vrai problème est que la pré-tâche est très probablement un peu plus spécifique que la le rôle. Faire une post-tâche est facile, parce que vous feriez tout simplement un nouveau rôle dépendant, cela est connu comme un "wrapper"... ou du moins c'est ce qu'ils appellent l'idée dans chef, pour quand vous essayez de prolonger quelque chose.
pour une pré-tâche, vous devez modifier un peu la hiérarchie, en utilisant un "rôle d'enveloppeur" et ce que j'appelle un "rôle de frère". Donc la dépendance la logique apparaîtrait comme,
- rôle d'emballage
- rôle de la fratrie
- rôle original
le wrapper a deux dépendances, mais assurez-vous d'ajouter le "rôle de frère" en premier dans la liste de dépendances. Puisque L'Ansible ira de haut en bas.
enfin, vous devriez placer vos vars dans le rôle de wrapper, de sorte que vous puissiez les écraser du playbook. Vous voulez que les variables suivent la hiérarchie, autant que possible, et ne pas sauter à travers les frères et sœurs.
à partir de Ansible 2.2, vous pouvez utiliser include_role
.
https://docs.ansible.com/ansible/include_role_module.html
- user: name=proxy
- include_role:
name: apache
vars:
user: proxy
j'ai un besoin similaire, et je l'ai résolu en définissant la variable dans le rôle de vars. Qui est, la création d'un <role>/vars/main.yml
---
user: proxy
qui devrait remplacer le user
variable définie dans le module apache, en l'écrivant dans votre module defaults
répertoire ne fonctionne pas.
j'utilise ansible 1.9, Je ne sais pas depuis combien de temps ce comportement est présent.