Ansible (Português) - ArchWiki

Jump to content
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.

### 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

- 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

Category:

- System administration (Português)