Ansible (Português)

Status de tradução:
Esse artigo é uma tradução de
Ansible
. Data da última tradução: 2020-04-11. Você pode ajudar a sincronizar a tradução, se houver
alterações
na versão em inglê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
.
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-git
AUR
.
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
Dica
O salt deve ser corrigido e fornecido explicitamente como um segundo parâmetro da função hash para que a operação seja idempotente (pode ser repetida sem alterar o estado do sistema).
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