Eu sou muito novo no ansible, então posso estar configurando as coisas erradas. Minha ideia é que tenho certas classes de servidores. (monitor,web,db por exemplo)
Eu quero rodar um ansible local neles, então meu play for monitor se parece com algo como
---
# plays/monitor.yaml
- hosts: mongo
connection: local
hosts: localhost
become: yes
become_user: root
roles:
- ../roles/users
- ../roles/monitor
vars:
sensu_install_client: true
sensu_install_server: true
minha roles/monitor/tasks/main.yml
aparência
---
# roles/monitor/tasks/main.yaml
- include: common.yml
- include: server.yml
when: sensu_install_server
- include: client.yml
when: sensu_install_client
Eu quero poder passar em vars para que as inclusões aconteçam na função. Então, quando configuro minhas instâncias de API, posso fazer algo como
vars:
sensu_install_client: true
No jogo e incluirá apenas o client.yml da função de monitor.
Não está claro para mim por que isso não está funcionando. Eu não consigo ver um problema. Mas deixe-me dar algumas recomendações gerais, talvez isso ajude você também.
A melhor prática é ter seus playbooks no nível raiz. Dê uma olhada nesta estrutura . Com essa configuração, você não precisa especificar o caminho para as funções, pois o Ansible espera funções automaticamente no
roles
diretório relativo ao playbook. Então sua seção de papéis no manual é muito mais limpa:Em vez de definir variáveis globais para acionar ações dentro de funções, você pode usar duas outras abordagens.
1. parâmetros de função
As funções podem ter parâmetros. Se você deseja passar parâmetros, basta convertê-lo em um dicionário:
As variáveis
sensu_install_client
esensu_install_server
then estão disponíveis apenas na funçãomonitor
. Isso é um pouco mais limpo e também deixa claro para todos que essas variáveis serão usadas nesta função, não nausers
função.2. etiquetas
Na verdade, as tags são a maneira de acionar partes específicas de um playbook/funções. As tags, porém, são passadas da linha de comando e não por variáveis codificadas no playbook. Imagine que seu papel
main.yml
se parece com isso:A tag
always
é especial e executará as tarefas marcadas... bem, você adivinhou... sempre.Agora você chamaria seu playbook assim:
ou
Ou se você quiser executar os dois, você pode fazer:
Se você usar isso, não se esqueça de marcar a função do usuário de acordo, ou não será executado.
Se você não especificar nenhuma
--tags
, todas as tarefas serão executadas, se desejar filtrar tags específicas, você pode usar a--skip-tags
opçãoVocê pode até filtrar a tag always.