[TUTORIAL] Ansible no Fedora 31

Danniel
editado April 2020 em Tutoriais

Ansible permitem a automação de infraestrutura, automação cloud, gerenciamento de conformidade e segurança, fluxo automático para integração e deploy contínuo (CI/CD).

Mas porque Ansible e não outra ferramenta?

  • All-in-One ( tudo em uma unica ferramenta )
  • Curva de Aprendizado (simples ,rápido, poderoso B) )
  • Infra Mutável ( se adapta bem para ambientes mistos )
  • Sem Agentes ( isso mesmo não precisa de um client )

O Ansible possui inúmeros módulo , para amazon , google , openstack , docker , kubernetes , windows , vmware ,etc..

Lista completa

https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html

Com Ansible podemos fazer coisas simples como trocar senha de vários servidores , ajustar o timezone , até subir uma infraestrutura local ou na nuvem .

No caso em Linux, GNU/Linux, SystemD/Linux , ele utiliza a conexão via ssh
essa conexão pode ser por chaves ou passando a senha de acesso , eu prefiro por chaves que é mais seguro
A imagem abaixo mostra que podemos utilizar o Ansible para várias distros

No Windows a conexão do Ansible é feita via winrm ( Windows Remote Management) permitindo o gerenciamento .

Instalação do Ansible é bem simples

# dnf install ansible -y

No diretório do Ansible temos 2 arquivos e um diretório
o arquivo de conf do ansible , arquivos onde vamos colocar os hosts , e o diretório onde vamos colocar as playbooks

Para demostração vou usar 3 hosts , minha maquina física e 2 máquinas
virtuais

Vamos criar as chaves ssh (Publica e Privada )para acesso sem senhas

Execute o comando

# ssh-keygen -t rsa

Após execute o comando para enviar a chave publica para os hosts

E copia para todos os hosts como no exemplo
# ssh-copy-id 192.168.122.1
# ssh-copy-id 192.168.122.41
# ssh-copy-id 192.168.122.132

Depois só acessa via ssh cada um pra ver se ficou ok

Vamos adicionar os hosts no arquivo de hosts

*eu uso o vim , mas é só usar o seu editor de preferência

# vim /etc/ansible/hosts

e add os servers

[server]
192.168.122.1
192.168.122.41
192.168.122.132

No hosts , tu podes trabalhar com grupo , pode usar nome no lugar de IP

Vamos fazer um pequeno teste mostrando a distro que estamos usando , utilizando o Ansible ad-hoc

ansible-br.org/primeiros-passos/guia-rapido/passo-3/

# ansible -i /etc/ansible/hosts all -m setup -a 'filter=ansible_distribution*'

Agora vamos fazer uma simples playbook instalando e iniciando
o serviço do Apache

Vamos criar um arquivo de .html com um pequeno texto
A finalidade é mostrar que a instalação foi um sucesso .

# vim /etc/ansible/index.html

e Adicione o texto (pode mudar se quiser )

Instalando Apache via Ansible

Apache Web Server instalado via Ansible

Parabéns, consegui instalar o Apache via Ansible

Agora vamos criar o nosso primeiro playbook

vim /etc/ansible/role/apacheinstall.yml

- hosts: server
  user: root
  tasks:
    - name: Instala a ultima versão do apache
      dnf:
         name: httpd
         state: latest

    - name: Copia o arquivo para o diretorio root do apache
      template:
         src: /etc/ansible/index.html 
         dest: /var/www/html
         owner: apache 
         group: apache 
         mode: 0644

    - name: Inicia e Ativa na inicialização
         systemd: 
            name: httpd
            state: started
            enabled: yes


    - name: Libera acesso a porta 80
       firewalld:
         service: http
         permanent: true
         state: enabled

     -  name: Reinicia o FirewallD
         service:
         name: firewalld
         state: restarted

Explicando ao poucos

  • hosts: server
    user: root

Ele vai rodar no grupo server , somente nos hosts que estão no grupo server
caso tenha vários grupo que queira rodar em todos só colocar
-hosts: all

E ira rodar como root nos hosts

Em tasks: é o que vai ser executado .
bom , é auto explicativo

- name: Instala a ultima versão do apache
      dnf:
         name: httpd
         state: latest

Agora é a parte que copiamos o nosso arquivo que criamos para o direório root do apache e ajusta a permissão do arquivo

template: 
    src: /etc/ansible/index.html 
    dest: /var/www/html
    owner: apache 
    group: apache 
    mode: 0644

E por ultimo é bem simples ele ativa na inicialização do S.O
e também inicia o serviço

     - name: Inicia e Ativa na inicialização
       systemd: 
           name: httpd
           state: started
           enabled: yes

E por ultimo claro a liberação no firewall

       - name: Libera acesso a porta 80
      firewalld:
       service: http
       permanent: true
       state: enabled
     - name: Reinicia o FirewallD
       service:
        name: firewalld
        state: restarted

Bom então vamos lá rodar a playbook

# ansible-playbook -i /etc/ansible/hosts /etc/ansible/roles/apacheinstall.yaml

só verificar o resultado

Espero que ajude

Links que podem ajudar

ansible-br.org/

https://docs.ansible.com/ansible/latest/index.html