Eu já tinha um monte de playbooks, então comecei a organizá-los no diretório de playbooks . Isso causa que deve haver caminhos relativos aos arquivos vars.
Manual real:
---
- hosts: aws_instance.jenkins-agents
user: ec2-user
vars_files:
- ../../../vars/main.yaml
- ../../../vars/vault.yaml
...
Existe alguma maneira de manter a estrutura de diretórios, mas evite a família de loceness ( ../../../
)?
Conheço as funções Você pode especificar o caminho para elas, mas não encontrei nada semelhante para vars_files
Condições do projeto:
- Precisamos executar os playbooks a partir da raiz do projeto
- Os diretórios vars e playbooks estão na raiz do projeto
- Este projeto não possui inventário / hosts estáticos, mas é gerado rapidamente quando você executa algum manual
../../../vars
?Respostas:
Você notará que as recomendações oficiais para o layout do diretório colocam todos os manuais no nível raiz. Isso é intencional, pois o Ansible não lida bem com outros esquemas.
Você pode colocar playbooks em um subdiretório, como você começou a fazer, mas isso exigirá (como você já encontrou) o uso de caminhos relativos dos playbooks para quaisquer outros recursos que eles usarem; O Ansible usa o caminho do playbook para iniciar sua pesquisa, é assim que está escrito. Na maioria das vezes, é exatamente com isso que você lida quando decide mudar para onde os playbooks vivem.
No entanto, você parece ter mais aninhamento do que deveria:
Por que você está navegando em três diretórios? Eu esperaria um layout que seja como o oficial, mas com uma subpasta para playbooks; então você acabaria com apenas
o que é uma mudança muito mais pequena.
Em segundo lugar, é muito raro que você realmente queira usar
vars_files
. A maioria das variáveis usadas no Ansible varia de acordo com o host (e, portanto, deve estar nagroup_vars
/host_vars
na raiz do projeto) ou é específica da função (e, portanto, deve estar novars
/defaults
no diretório da função). Alguns links de documentação:Pessoalmente, acho que é melhor ter o mínimo possível em suas cartilhas, mas delegar tudo para as funções. Aqui está um exemplo de manual completo em sua configuração:
Isso oferece muito mais flexibilidade para reutilização.
E se você não desejar usar caminhos relativos para funções, poderá substituí
roles_path
-loansible.cfg
no diretório raiz de onde executa os comandos Ansible.fonte
Como ainda não posso comentar a resposta de 030 (acabei de abrir uma conta), responderei aqui.
Os diretórios vars do grupo são relativos ao caminho Ansible.
Você não precisa executar o Ansible em / etc / ansible. Você pode executá-lo em ~ / .hidden / directory / stuff, se desejar. Apenas certifique-se de manter uma estrutura de diretórios. Ou seja:
Então você pode executar algo como
O qual lerá os vars do grupo na pasta pipeline / group_vars. É melhor fazer o cd para sua pasta raiz ansible primeiro, pois ela procura caminhos da pasta atual em que você está, se ela não puder encontrá-los no local padrão (/ etc / ansible), para que você possa colocar seu ansible.cfg em / pipeline sem precisar especificar outros argumentos de linha de comando. Você também pode definir opcionalmente caminhos específicos dentro do ansible.cfg.
Você pode dar um passo adiante e configurar vars de grupo separados para cada ambiente / local / etc:
E execute da seguinte maneira usando include-vars.
ansible-playbook deploy_app.yml -i prod
fonte
Para evitar esses problemas, é por isso que existem Anfitriões e Grupos .
fonte
/etc
variante não funcionaria para nós. Espero que seja capaz de buscá-las no projeto.