Todos os meus playbooks / papéis Ansible são verificados no meu repositório git.
No entanto, para as funções do Ansible Galaxy, eu sempre preciso baixá-las explicitamente, uma a uma, em todas as máquinas das quais quero executar o Ansible.
É até difícil saber com antecedência exatamente quais funções do Ansible Galaxy são necessárias até que o Ansible se queixe de um papel ausente no tempo de execução.
Como se deve gerenciar as dependências da função Ansible Galaxy? Eu gostaria que eles fossem verificados no meu repositório git junto com o restante do meu código ansible ou que fossem identificados e baixados automaticamente quando eu executasse o Ansible em uma nova máquina.
Respostas:
Você deve usar um
requirements.yml
arquivo para este caso de uso. Descreva as funções necessárias, usando qualquer um dos vários métodos de instalação:Em seguida, instale-os:
Aqui está um exemplo de trabalho (instalando o OpenDaylight usando o Ansible como um provisionador do Vagrant). Consulte os documentos Ansible relevantes para obter mais informações.
fonte
Como sugerido, você pode usar a galáxia ansible para essa necessidade.
O Ansible possui um recurso no qual você pode criar um
requirements.yml
arquivo que lista todas as suas funções. Você pode descobrir isso aqui: http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-filePor exemplo (requirements.yml):
Em seguida, você executa
ansible-galaxy install -r requirements.yml
esse arquivo para baixar todas as funções listadas lá.Se você deseja automatizá-lo ainda mais, é possível criar um script de shell simples que executará os dois comandos.
Por exemplo (ansible.sh):
./ansible.sh
fonte
2.2.1
Costumo me encontrar instalando um Java JDK. O uso de uma função facilita esse toque. Eu tentei de duas maneiras diferentes (incluindo muitos módulos .git e submódulo ... Eu tenho que usar vários sistemas git para trabalhar e tudo fica feio). Meu maior requisito é que eu não verifique o código da função no meu projeto do playbook, principalmente para manter tudo em um só lugar.
O conteúdo do meu arquivo 'requirements.yml':
Eu corro um manual separado, install-functions.yml:
Eu executo esse primeiro manual, depois executo minhas funções em qualquer manual normalmente. Para mim, o segredo é garantir que seja ignorado pelo git, para não verificar os papéis por engano. Além disso, como sempre limpo a pasta, garanto que não preciso forçar ou ignorar erros.
fonte
Outra solução é usar sub-módulos git. Afinal, o Ansible Galaxy é apenas um diretório de repositórios do github ...
Eu uso este comando para adicionar automaticamente qualquer função do Galaxy como um submódulo:
Confirme as alterações no seu repositório git. Quando você clonar seu repositório no futuro, certifique-se de cloná-lo com submódulos, por exemplo
git clone ... --recursive
Uma vantagem disso é que um submódulo git sempre faz referência a uma versão específica (git commit-hash). Isso impedirá que você execute atualizações não testadas em seu ambiente produtivo. Uma nova versão da função Galaxy pode ter erros ou funcionar completamente diferente do que antes. Com um submódulo git, você decide se e quando atualiza uma função para a nova versão.
Além disso, você não precisará cuidar adicionalmente das funções da galáxia na lista negra
.gitignore
para evitar comprometer o código deles no seu repositório.fonte
--force
sinalizador não documentado, ele não mostrará se ou o que realmente mudou. É uma caixa preta que você só pode controlar se mantiver as funções de galáxia baixadas no SCM. Por outras razões, é uma boa ideia, de qualquer maneira. Ao puxar submódulos, você vê pelo menos quais funções foram alteradas.Você pode usar uma função Ansible para instalar as funções necessárias usando o módulo de comando .
Aqui está um exemplo muito básico que é executado
ansible-galaxy install
:O
ansible_roles_list
pode ser fornecido como uma variável ou como um parâmetro de função.Se você fizer isso em uma função, ela deverá ser aplicada antes de outras funções que você deseja instalar usando-a, em um manual separado. Isso ocorre porque o Ansible verifica se todas as funções estão disponíveis antes de executar o manual em que você as referencia.
fonte
Até o momento, até onde eu sei, não há uma maneira automática de baixar funções em tempo de execução. Sua melhor aposta é comprometê-los em seu próprio repositório ou ter uma documentação adequada listando todos os requisitos. Você pode até criar um manual de instruções antes do voo que instale suas funções. :)
fonte
Aqui, meus requisitos estão na função e são usados no install.yml
main.yml
fonte