Ansible (Português)
Do www.ansible.com:
- Ansible é um mecanismo de automação de TI radicalmente simples que automatiza o provisionamento em nuvem, o gerenciamento de configurações, a implantação de aplicativos, a orquestração intrasserviço e muitas outras necessidades de TI.
Instalação
Na máquina de controle (mestre), instale o pacote ansible.
Nas máquinas gerenciadas (nós), nas quais você deseja automatizar tarefas de implantação ou configuração, é necessário ter python e pode ser necessário indicar o #Localização do binário do Python específico em algumas circunstâncias. Uma maneira de se comunicar com o nó também é necessária, isso geralmente é SSH. Observe que uma configuração funcional chave SSH key facilita o uso do Ansible, mas não é necessária.
Uso básico
Configuração
Os parâmetros do Ansible são configurados no arquivo de configuração que pode ser ansible.cfg
no diretório atual, .ansible.cfg
no diretório inicial ou /etc/ansible/ansible.cfg
, o que encontrar primeiro.
Um modelo está disponível no ansible.cfg exemplo no GitHub[link inativo 2023-07-30 ⓘ].
Inventário
A infraestrutura está listada no arquivo de inventário Ansible, cujo padrão é ser salvo no local /etc/ansible/hosts
ou é possível especificar um arquivo de inventário diferente usando a opção de linha de comando -i
. Por exemplo, o inventário a seguir define um cluster com 7 nós organizados em dois grupos:
/etc/ansible/hosts
[control] 192.168.12.1 foo-[a:c].example.org localhost ansible_connection=local [managed] 192.168.12.2 192.168.12.3
Pode-se atribuir atributos específicos para cada nó no arquivo de infraestrutura na linha correspondente ou no arquivo de configuração ansible.cfg
. Por padrão, o Ansible executa playbooks no SSH, o parâmetro ansible_connection
estende a conexão para:
-
local
para implantar o playbook na própria máquina de controle -
docker
implanta o playbook diretamente nos contêineres do Docker
Confira Ansible - intro inventory par detalhes.
Ping
Você pode verificar se todos os nós listados no inventário estão ativos com
$ ansible all -m ping
Playbook
Playbooks são a principal unidade organizacional para configurar e implantar toda a infraestrutura. Consulte a documentação oficial para obter mais detalhes. Aqui está uma demonstração extremamente simples, na qual o administrador do inventário acima deseja executar uma atualização completa do sistema em um conjunto de hosts do Arch Linux. Primeiro, crie um arquivo de playbook, com formatação YAML (sempre com recuo de 2 espaços):
syu.yml
--- - name: All hosts up-to-date hosts: control managed become: yes tasks: - name: full system upgrade pacman: update_cache: yes upgrade: yes
Em seguida, execute o script do playbook:
$ ansible-playbook --ask-become-pass syu.yml
Vault
Um vault ("cofre") pode ser usado para manter dados confidenciais de forma criptografada em playbooks ou funções, em vez de em texto sem formatação. A senha do cofre pode ser armazenada em texto sem formatação em um arquivo, por exemplo, senhavault.txt
contendo senhadovault
, para ser usada posteriormente como parâmetro de comando:
$ ansible-playbook site.yml --vault-id senhavault.txt
Para criptografar o conteúdo o conteúdo da variável
de uma variável chamada nomevar
usando a senha armazenada em senha_vault.txt
, o seguinte comando deve ser usado:
$ ansible-vault encrypt_string --vault-id senhavault.txt 'o conteúdo da variável' --name nomevar
Com mais segurança, para evitar a inserção do conteúdo da variável na linha de comando e ser solicitado, em vez disso, é possível usar:
$ ansible-vault encrypt_string --vault-id senhavault.txt --stdin-name nomevar
Reading plaintext input from stdin. (ctrl-d to end input)
O comando retorna diretamente a variável protegida que pode ser inserida em um manual. Variáveis criptografadas e não criptografadas podem coexistir em um arquivo YAML, conforme ilustrado abaixo:
nãosecreto: meuvalor meusegredo: !vault | $ANSIBLE_VAULT;1.1;AES256 66386439653236336462626566653063336164663966303231363934653561363964363833313662 6431626536303530376336343832656537303632313433360a626438346336353331386135323734 62656361653630373231613662633962316233633936396165386439616533353965373339616234 3430613539666330390a313736323265656432366236633330313963326365653937323833366536 3462 outronãosecreto: outrovalor
Gerenciamento de pacotes
Repositórios oficiais
Ansible possui um módulo do pacman para lidar com a instalação, remoção e atualização do sistema com o pacman.
AUR
Para o Arch User Repository (AUR), é necessário usar o módulo externo ansible-aur, o qual pode ser instalado com ansible-aur-gitAUR.
Enquanto o Ansible espera um acesso ssh como root, os auxiliares do AUR não permitem a execução de operações como root, mas todos falham com "você não pode executar esta operação como root". Para automação Ansible, é recomendável criar um usuário, por exemplo chamado aur_builder, que não precise de senha com pacman em sudoers. Isso pode ser feito no Ansible com as seguintes ações:
task.yml
- user: name=aur_builder - lineinfile: path: /etc/sudoers.d/aur_builder-allow-to-sudo-pacman state: present line: "aur_builder ALL=(ALL) NOPASSWD: /usr/bin/pacman" validate: /usr/sbin/visudo -cf %s create: yes
Em seguida, os auxiliares do AUR ou makepkg podem ser usados associados aos parâmetros become: yes
e become_user: aur_builder
do Ansible.
Dicas e truques
Criação de conta de usuário
O Ansible pode gerenciar contas de usuário e, em particular, é capaz de criar novas. Isso é obtido em playbooks com o módulo de usuário, que utiliza um argumento opcional password
para definir a senha do usuário. É o valor hash da senha que precisa ser fornecido ao módulo.
O hash pode simplesmente ser executado instantaneamente no Ansible usando um de seus filtros internos hash-filter:
- user: name: nome_do_usuário password: "{{ 'senha_do_usuário' | password_hash('sha512', 'saltdasenha') }}" shell: /usr/bin/nologin
Com essa abordagem, é recomendável criptografar senha_do_usuário com vault para que não apareça em texto sem formatação, consulte #Vault. No entanto, uma variável criptografada não pode ser canalizada diretamente e precisará primeiro ser atribuída a outra que será passada com pipe.
Como alternativa, o hash pode ser realizado fora do Ansible. Os comandos a seguir retornam respectivamente os valores MD5 e SHA512 com hash de senha_do_usuário:
$ openssl passwd -1 senha_do_usuário
$ python -c 'import crypt; print(crypt.crypt("senha_do_usuário", crypt.mksalt(crypt.METHOD_SHA512)))'
Localização do binário do Python
O Ansible requer Python na máquina de destino. Por padrão, o Ansible supõe que ele pode encontrar um /usr/bin/python
no sistema remoto que é uma versão 2.X ou 3.X, especificamente 2.6 ou superior.
Se alguns de seus módulos exigirem especificamente o Python2, você precisará informar o Ansible sobre sua localização, configurando a variável ansible_python_interpreter
no arquivo de inventário. Isso pode ser feito usando grupos de hosts no inventário:
/etc/ansible/hosts
[archlinux] servidor1 servidor2 [debian] servidor3 [archlinux:vars] ansible_python_interpreter=/usr/bin/python2
Mais informações sobre o suporte à versão Python no Ansible estão disponíveis em [1], [2] e [3].
Solução de problemas
Unarchive
O módulo unarchive
descompacta um arquivo. No entanto, os arquivos tar não são bem suportados e vários problemas pendentes são relatados em GitHub - unarchive. Em particular, quando o parâmetro keep_newer
é definido como yes
, a idempotência não é observada. Caso encontre um problema com o módulo, você pode usar o formato zip, que é melhor integrado ao Ansible.
Veja também
- https://www.ansible.com/quick-start-video - Conceito do Ansible em 12 minutos
- https://docs.ansible.com/ansible/latest/collections/community/general/pacman_module.html - Documentação oficial do módulo do pacman