Ansible (Português)

From ArchWiki
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[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
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