====== Ansible - Ola mundo ====== Para conceituar o Ansible irei utilizar as próprias palavras do site oficial Ansible delivers simple IT automation that ends repetitive tasks and frees up DevOps teams for more strategic work. Traduzindo Ansible entrega automação de TI para tarefas repetitivas e libera o time de DevOps para trabalhem de forma estrategicas. O Ansible é um automatizador de tarefas repetitivas. Imaginemos que você é responsavel pela administração de 300 servidores e precisa criar um novo usuário nesses 300 servidores. O Ansible torna essa tarefa fácil. Vou montar uma topologia bem simples faremos com um servidor Ansible é um servidor Web apenas para exemplificar a diferença seria aumentar a quantidade de servidores. {{ :devops:ansible:ansibleolamundo.png?direct&600 |}} Não vou entrar nos detalhes de instalação que considero uma tarefa simples. ===== Entendendo o Ansible ===== ===== Criando a chave SSH para conectar no servidor Web ===== Uma coisa que apanhei no começo você precisa gerar a chave para o usuário que irá utilizar. A grande maioria utiliza o usuário root, mas e no ubuntu que não temos o usuário root ativado, utilizamos o comando "sudo -s" para se tornar root, Neste caso iremos escolher um usuário e geraremos as chaves do ssh para ele, e depois configuraremos a parte do "sudo -s" no servidor que iremos logar e realizar a tarefa administrativa. Para a geração de senha utilize o comando ssh-keygen e depois o ssh-copy-id. ricardobarbosa@devops:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/ricardobarbosa/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ricardobarbosa/.ssh/id_rsa. Your public key has been saved in /home/ricardobarbosa/.ssh/id_rsa.pub. The key fingerprint is: SHA256:PbRi4yD4HceaVKonIDm3STqCrHt+gAY9AzTbaxarFp0 ricardobarbosa@devops The key's randomart image is: +---[RSA 2048]----+ |.o | |. + | | + o . . | |..=.= + o . | |=o=E. = S + | |+B*= = O o . | |*+o.+ = . | |+.. .o | |o+.. | +----[SHA256]-----+ ricardobarbosa@devops:~$ ricardobarbosa@devops:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ricardobarbosa@192.168.10.11 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ricardobarbosa/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys ricardobarbosa@192.168.10.188's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'ricardobarbosa@192.168.10.11'" and check to make sure that only the key(s) you wanted were added. ricardobarbosa@devops:~$ Se você tentar fazer um deploy solto você se confrontara com uma mensagem de "access denied". Para isso precisamos alterar o arquivo /etc/ansible/ansible.cfg [privilege_escalation] become=True become_method=sudo become_ask_pass=True ===== Testando comunicação do Ansible com servidor Web ===== Para testar a comunicação do Ansible com o servidor utilizamos o módulo ping. ricardobarbosa@devops:~$ ansible -m ping all SUDO password: 192.168.10.11 | SUCCESS => { "changed": false, "ping": "pong" } ricardobarbosa@devops:~$ ===== Criando playbook para instalar o apache e softwares phpn e afins ===== Vamos criar um playbook para instalar os seguintes pacotes * php * apache2 * mysql-server * mysql-client * php-mysql Depois ativamos os módulos do apache rewrite e vhost_alias e reiniciamos o servidor apache. Abaixo segue o arquivo do playbook. --- - hosts: all user: ricardobarbosa become_user: root tasks: - name: Geral | Instalando pacotes necessarios. action: apt pkg={{ item }} state=present with_items: - php - apache2 - mysql-server - mysql-client - php-mysql - name: Apache2 habilitando modulos action: command a2enmod rewrite vhost_alias - name: Reiniciando Apache action: service name=apache2 state=restarted Executando o playbook ricardobarbosa@devops:~$ ansible-playbook apacheLamp.yml SUDO password: PLAY [all] ******************************************************************************************************************************** TASK [Gathering Facts] ******************************************************************************************************************** ok: [192.168.10.11] TASK [Geral - Instalando pacotes necessarios.] ******************************************************************************************** ok: [192.168.10.11] => (item=[u'php', u'apache2', u'mysql-server', u'mysql-client', u'php-mysql']) TASK [Apache2 - habilitando modulos] ****************************************************************************************************** changed: [192.168.10.11] TASK [Servicos - Reiniciando Apache] ****************************************************************************************************** changed: [192.168.10.11] PLAY RECAP ******************************************************************************************************************************** 192.168.10.11 : ok=4 changed=2 unreachable=0 failed=0 ricardobarbosa@devops:~$