Este repositório contém um conjunto de playbooks do Ansible, proporcionando a facilidade de implantação do meu homelab. O objetivo futuro é desenvolver menus interativos que permitam a instalação personalizada de opções conforme a demanda. Atualmente, os playbooks são identificados o formato "item_playbook", enquanto as pastas dentro da mesma estrutura, sem o sufixo "playbook", indicam arquivos específicos de um item ou aplicação associado a esse playbook.
-
app_playbook
- arquivo do playbook principal de uma determinada aplicação.
-
app/
- Arquivos relacionados ao playbook principal e playbooks secundários corelacionados e necessários para realização da implantação.
-
app_README.md
- Arquivo readme direcionado especificamente ao playbook da aplicação.
O repositório QXDC, está sendo migrado para este conjunto de playbooks, de modo que todas as configurações anteriormente feitas pelo repositório luizfpq/qxdc, agora estarão disponíveis pelo "qxdc_playbook" foi transferido para este ambiente. Essa mudança visa consolidar todos os playbooks relacionados ao ansible em um único repositório, proporcionando uma organização mais eficiente das minhas customizações de ambiente.
Objetivo: ter um
inventory.inilimpo e a senha dosudoencriptada em um arquivo que o Ansible usa automaticamente.
mkdir -p ~/ironqui/ansible
cd ~/ironqui/ansibleCrie inventory.ini com o host e variáveis públicas (sem a senha):
[qxdc]
192.168.1.10 ansible_user=quirino ansible_become=yes ansible_become_method=sudoSalve em ~/ironqui/ansible/inventory.ini.
Nota:
ansible_become=yesindica que o Ansible deve usar elevação; a senha dosudoficará criptografada no próximo passo.
Usando group_vars você mantém variáveis por grupo. Crie a pasta:
mkdir -p group_vars/qxdcVocê pode criar o arquivo já criptografado com ansible-vault create (recomendado) — isso abre o editor para você colocar a variável:
ansible-vault create group_vars/qxdc/vault.ymlNo editor que abrir (normalmente vi ou o que estiver configurado), coloque:
---
# arquivo: group_vars/qxdc/vault.yml
ansible_become_pass: "SuaSenhaDoSudoAqui"Salve e saia. O arquivo ficará criptografado.
Alternativa (se você já tem o arquivo em texto):
# Crie um arquivo plaintext (temporário)
echo -e "---\nansible_become_pass: \"SuaSenhaDoSudoAqui\"" > /tmp/vault_plain.yml
# Encriptar para o destino
ansible-vault encrypt --output=group_vars/qxdc/vault.yml /tmp/vault_plain.yml
# Apague o arquivo plaintext
shred -u /tmp/vault_plain.yml # ou rm -f /tmp/vault_plain.ymlExecute:
ansible-playbook -i inventory.ini qxdc_playbook.yml --ask-vault-passO Ansible pedirá a senha do vault (não a senha do sudo). Ao descriptografar, ele usará ansible_become_pass para comandos sudo.
Crie um arquivo seguro que contenha a senha do vault (apenas leitura pelo seu usuário):
echo "SenhaDoVaultAqui" > ~/.ansible_vault_pass.txt
chmod 600 ~/.ansible_vault_pass.txtEntão rode:
ansible-playbook -i inventory.ini qxdc_playbook.yml --vault-password-file ~/.ansible_vault_pass.txtSe você preferir não passar --vault-password-file toda vez, crie/edite ansible.cfg no diretório do projeto:
ansible.cfg:
[defaults]
inventory = ./inventory.ini
vault_password_file = ~/.ansible_vault_pass.txtAtenção: manter vault_password_file em ansible.cfg facilita automação, mas o arquivo apontado deve ser protegido (chmod 600) e só acessível por quem for autorizado.
Teste se o Ansible consegue executar um sudo whoami no grupo qxdc:
- com
--ask-vault-pass:
ansible -i inventory.ini qxdc -m command -a "sudo whoami" --ask-vault-pass- com
--vault-password-file:
ansible -i inventory.ini qxdc -m command -a "sudo whoami" --vault-password-file ~/.ansible_vault_pass.txtSaída esperada: root (e sem pedir o BECOME password:).
- Nunca comite arquivos com senhas em texto puro no git.
- O arquivo
group_vars/qxdc/vault.ymlestará criptografado — OK para versionar se o repositório tiver controle de acesso. - Proteja
~/.ansible_vault_pass.txtcomchmod 600. - Prefira
ansible-vault createouencryptem vez de gravar senhas em plaintext. - Considere alternativas mais seguras: usar sudo sem senha em hosts confiáveis (NOPASSWD), Vaults corporativos (HashiCorp Vault, AWS Secrets Manager) ou autenticação SSH com chaves e sudoers finos.
Para editar:
ansible-vault edit group_vars/qxdc/vault.ymlIsso descriptografa temporariamente para edição e recriptografa ao salvar.
vim inventory.ini→ adicione host comansible_usereansible_become=yes.mkdir -p group_vars/<grupo>se não existir.ansible-vault create group_vars/<grupo>/vault.yml→ coloqueansible_become_pass: "...".- Execute playbook com
--ask-vault-passou--vault-password-file.
inventory.ini
[qxdc]
192.168.1.10 ansible_user=quirino ansible_become=yes ansible_become_method=sudogroup_vars/qxdc/vault.yml (ENCRIPTADO — conteúdo quando aberto):
---
ansible_become_pass: "SuaSenhaDoSudoAqui"ansible.cfg (opcional):
[defaults]
inventory = ./inventory.ini
vault_password_file = ~/.ansible_vault_pass.txt- Usar Ansible Vault é muito melhor do que deixar
ansible_become_passem texto claro. - Para máxima segurança em ambientes de produção, integre um secret manager (ex.: HashiCorp Vault) ou configure sudoers para reduzir a necessidade de senhas.
- Se você optar por versionar o arquivo
group_vars/.../vault.ymlno git, garanta que o repositório tem controle de acesso e que a senha do Vault (vault password) não está no repositório.