task automation using ansible playbooks
Aprenda a automação de tarefas usando manuais e cofres da Ansible para proteger dados confidenciais:
Em nosso tutorial anterior do Ansible nº 1 , aprendemos sobre os diferentes componentes do Ansible e como instalar e configurar essa ferramenta com vários módulos. Também vimos como os módulos são usados para executar uma função ou tarefa.
Nesta parte, veremos a automação de tarefas usando manuais e cofres Ansible para proteger dados confidenciais.
Leitura sugerida => Guia de aprendizagem sobre DevOps
qual é o melhor serviço de email para usar
O que você aprenderá:
Manuais Ansible
Vimos como executar tarefas únicas ou únicas usando Módulos, mas e se você precisar executar várias tarefas? Os manuais ajudam a executá-los de uma forma com script.
Os manuais definem variáveis, configurações, etapas de implantação, atribuem funções e realizam várias tarefas. Para Por exemplo. COPIAR / EXCLUIR arquivos e pastas, instalar pacotes, iniciar serviços. Portanto, basicamente os manuais são definidos para orquestrar as etapas para várias máquinas ou servidores e levá-los a um determinado estado desejado.
Manual é escrito em Formato YAML com uma extensão de arquivo .yml. É preciso ter muito cuidado com o formato e o alinhamento, o que o torna muito sensível.
Ele contém as seguintes seções:
- Cada manual começa com 3 hífens ‘-‘
- Seção de host - Define as máquinas-alvo nas quais o manual deve ser executado. Isso se baseia no arquivo de inventário Ansible.
- Seção variável - Isso é opcional e pode declarar todas as variáveis necessárias no manual. Veremos alguns exemplos também.
- Seção de tarefas - Esta seção lista todas as tarefas que devem ser executadas na máquina de destino. Ele especifica o uso de Módulos. Cada tarefa tem um nome que é uma pequena descrição do que a tarefa fará e será listado enquanto o manual é executado.
Por exemplo,
Se precisarmos instalar e configurar o Tomcat, ele consistirá nas seguintes tarefas:
- Baixe e instale o Tomcat
- Configurar o Tomcat
- Inicie o Tomcat
Da mesma forma, outroExemplopara o uso do Tomcat usado na entrega contínua de DevOps, as tarefas podem ser as seguintes:
- Parar o aplicativo
- Desinstalar aplicativo
- Instale uma nova versão do arquivo WAR.
- Iniciar aplicação
Formato de amostra do manual
--- Playbook start - hosts: webservers Specify the group or servers as per inventory to execute tasks become: true tasks: - name: Copy Tomcat ZIP file to install location Short description of the task copy: src=/home/ansible/niranjan/apache-tomcat-8.5.31.tar.gz dest=/opt/niranjan/tomcatNo script acima, observe o alinhamento começando do topo e ele deve ser mantido, caso contrário, você obterá erros de sintaxe.
Para executar qualquer manual use o seguinte comando
$ ansible-playbook Para verificar se há erros de sintaxe no manual
$ ansible-playbook --syntax-check Para ver a lista de hosts
$ ansible-playbook --list-hosts Criação de manuais com exemplos
Nesta seção, veremos vários exemplos de como criar manuais que você pode precisar executar regularmente. Esses manuais precisarão ser criados e executados na máquina de controle.
Salve todos os manuais abaixo em um arquivo .yml e execute conforme mostrado abaixo.
$ ansible-playbook filename.yml Exemplo 1: Crie o arquivo nas máquinas ou servidores de destino conforme mencionado no arquivo de inventário e no grupo do servidor da web, salve o código abaixo com a extensão .yml e execute o manual.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touchNo exemplo acima, usamos o Arquivo módulo para criar o arquivo.
Exemplo 2: Crie um diretório com o modo como 775 e proprietário / grupo como Ansible.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansibleExemplo 3: Crie vários diretórios. Para criar vários diretórios com uma única tarefa, você pode usar o loop with_items demonstração. Portanto, quando você executa o manual abaixo, ele é interpretado como 3 tarefas diferentes.
--- - hosts: webservers become: true tasks: - name: Create multiple directories file: path={{item}} state=directory with_items: - '/home/ansible/vn1' - '/home/ansible/vn2' - '/home/ansible/vn3'Exemplo 4: Crie um usuário. Vamos dar uma olhada no do utilizador módulo para criar e excluir usuários no manual.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bashExemplo 5: Remover usuário. Remover um usuário é muito fácil e vai precisar do Estado para ser definido para ausente . Isso é equivalente ao userdel comando no Linux.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yesNo manual acima, remover = sim irá remover o diretório home e força = sim irá remover os arquivos do diretório.
Exemplo 6: Copie o conteúdo para um arquivo usando o módulo de cópia.
Se você precisar copiar um arquivo para as máquinas ou servidores de destino, use o src e dest no módulo de cópia.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txtPor exemplo,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txtExemplo 7: Substitua todas as instâncias de uma string.
Usando substituir módulo podemos substituir uma palavra por outra palavra. O módulo de substituição precisará de 3 parâmetros, ou seja, ‘caminho’, ‘regexp’ (para encontrar a palavra específica) e ‘substituir’ (fornecendo outra palavra para substituição).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'Exemplo 8: Arquivar ou arquivos ZIP e pastas
Usando o Ansible arquivo módulo você pode compactar arquivos ou pastas no formato ‘zip’, ‘.gz’ ou ‘bz2’.
Observação : Os arquivos ou pastas a serem compactados devem estar disponíveis nos servidores de destino e devem ter os pacotes de arquivo tar, bzip2, gzip, zip instalados neles. Você pode ter uma tarefa separada do manual para instalar esses pacotes.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zipO manual acima irá compactar o arquivo niranjan.txt para o arquivo niranjan.zip
--- - hosts: all tasks: - name: Ansible zip multiple files example archive: path: - /home/ansible/niranjan1.txt - /home/ansible/niranjan2.txt dest: /home/ansible/niranjan.zip format: zipO manual acima irá compactar vários arquivos para o arquivo niranjan.zip.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zipO manual acima irá compactar todos os arquivos no diretório / home / ansible.
Exemplo 9: Trabalhando com data e carimbo de hora
Usar a data e o carimbo de hora do sistema ajuda em certos status ou propósitos de registro. Os fatos da Ansible fornecem acesso a data e hora de servidores remotos ou de destino. Então podemos usar o módulo de depuração para imprimir a saída junto com o Onde atributo conforme mostrado abaixo.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.dateO manual acima exibe a data.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.timeO manual acima exibe a hora.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.logO manual acima irá criar um arquivo dinâmico baseado na data atual para Por exemplo . niranjan2018-07-15.log
Exemplo 10: Exemplo de Variáveis
Variáveis são usadas para armazenar valores. No exemplo abaixo, estou declarando a variável nome com valor niranjan . A saída será niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'Também podemos ter uma matriz ou uma lista de variáveis, como mostrado a seguir Exemplo .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'A indexação da matriz começa em ZERO (0). Portanto, a saída no exemplo acima será Niranjan.
Exemplo 11: Registrar Variáveis
Também podemos capturar a saída de qualquer tarefa para uma variável de registro.
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_outputNota: Para exibir - use o atributo msg e para capturar qualquer valor use o atributo var no módulo - debug
Exemplo 12: Manual para instalar o editor vim e GIT nos servidores ou máquinas de destino.
Neste manual, usamos o yum módulo para instalar a versão mais recente dos pacotes de software.
como abrir arquivo .eps
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latestExemplo 13: Instale o servidor Apache. Salve o código abaixo e execute o manual conforme mostrado abaixo.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=startedApesar de yum módulo, o serviço O módulo também é usado para iniciar o serviço httpd. As tarefas são executadas de cima para baixo de forma síncrona.
Exemplo 14: Instale JDK
O manual a seguir será automatizado para instalar o JDK 8 em todas as máquinas ou servidores de destino. JDK é um pré-requisito para a maioria dos outros pacotes de software como Maven ou Tomcat.
--- - hosts: webservers become: true vars: download_url: http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.rpm tasks: - name: Download JDK 8 RPM file command: 'wget --no-check-certificate --no-cookies --header 'Cookie: oraclelicense=accept-securebackup-cookie' {{download_url}} ' - name: Install JDK 8 command: 'rpm -ivh jdk-8u171-linux-x64.rpm'Exemplo 15: Instale o Maven
As tarefas realizadas são para baixar o arquivo maven da URL usando o get_url , extraia o arquivo baixado, mova-o para um diretório menor, atualize e execute o perfil onde o maven é adicionado ao caminho.
--- - hosts: webservers become: true tasks: - name: Download Maven get_url: url=http://www-us.apache.org/dist/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz dest=/opt/niranjan/apache-maven-3.5.3-bin.tar.gz - name: Extract Maven command: tar xvf /opt/niranjan/apache-maven-3.5.3-bin.tar.gz -C /opt/niranjan - name: Move to a smaller directory command: mv /opt/niranjan/apache-maven-3.5.3 /opt/niranjan/maven - name: Update Profile copy: content='export M2_HOME=/opt/niranjan/maven
' dest=/etc/profile.d/maven.sh # lineinfile is used to add additional or append lines to existing files. - lineinfile: path: /etc/profile.d/maven.sh line: 'export PATH=${M2_HOME}/bin:${PATH}' - name: Source profile shell: source /etc/profile.d/maven.sh Exemplo 16: Instale o Tomcat 8
O manual abaixo ajuda a instalar e iniciar o Tomcat 8 nas máquinas ou servidores de destino.
Você pode clicar aqui para copiar o local do link da versão mais recente do Tomcat 8. Clique aqui para a URL que contém o arquivo tar do Tomcat 8 que usei neste manual.
--- - hosts: webservers become: true gather_facts: no tasks: - name: Download Tomcat get_url: url=http://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz dest=/home/ansible - name: Extract the file downloaded tomcat file command: tar xvf apache-tomcat-8.5.32.tar.gz - name: Move the Tomcat directory to a smaller one command: mv apache-tomcat-8.5.32 tomcat - name: Change Ownership and group of the Tomcat directory file: path=/home/ansible/tomcat owner=ansible group=ansible mode=775 state=directory recurse=yes - name: Start Tomcat command: nohup /home/ansible/tomcat/bin/startup.sh # Execute command even after you have exited from the shell prompt become: true become_user: ansible Exemplo 17: pre_tasks, post_tasks e tags
Você pode usar pre_tasks e post_tasks para executar certas tarefas antes ou depois de executar a tarefa principal.
Normalmente, em um manual, você tem muitas tarefas executadas. E se você precisar executar apenas uma determinada tarefa? Tags são a resposta para isso. Vejamos a opção abaixo, que possui todas as 3 opções. Tem 2 tarefas, ou seja, uma com um TAG e outra sem um TAG.
--- - name: Pre , Post tasks and Tags example hosts: localhost become: true tags: - niranjan pre_tasks: - debug: msg='Started task with tag - niranjan. tasks: - name: Going to execute the main task debug: msg='Currently in the target server' post_tasks: - debug: msg='Completed task with tag - niranjan. - name: Play without tags hosts: localhost become: true tasks: - name: Command to list files shell: ls -lrt > niranjan.txtVamos ver o que acontece durante a execução do manual com a opção –list-tags
$ ansible-playbook preposttagseg.yml --list-tags 
A saída acima parece melhor e clara. A peça # 1 tem uma tag niranjan, mas a peça # 2 não tem nenhuma tag.
Se você precisar executar as tarefas com a tag niranjan, o comando a ser executado será:
$ ansible-playbook preposttagseg.yml --tags niranjan A segunda reprodução não é executada e o arquivo não é criado.

Exemplo 18: Handlers
Qualquer pacote de software terá arquivos de configuração e todas as alterações nele terão efeito apenas quando o serviço for reiniciado. Portanto, você precisa ter o serviço configurado para reiniciar. Para Por exemplo. No manual abaixo, se você executá-lo várias vezes, o serviço será reiniciado de qualquer maneira, independentemente das alterações feitas ou não, o que não é correto.
--- - hosts: webservers tasks: - name: Install the apache Package yum: name=httpd state=latest - name: Copy httpd configuration file copy: src=/home/ansible/httpd.final dest=/etc/httpd/conf/httpd.conf - name: Copy index.html file copy: src=/home/ansible/index.html dest=/var/www/html # This service below is executed irrespective of changes done or not to any config files - name: Start and Enable httpd service service: name=httpd state= restarted enabled=yesPortanto, precisamos reiniciar o serviço apenas se as alterações forem feitas nos arquivos de configuração. Handlers fornecer esse recurso.
Portanto, o fluxo adequado com os manipuladores seria ter um avisar opção.
--- - hosts: webservers become: true tasks: - name: Install httpd package yum: name=httpd state=latest - name: Copy the httpd configuration file copy: src=/home/ansible/httpd.final dest=/etc/httpd/conf/httpd.conf - name: Copy index.html file copy: src=/home/ansible/index.html dest=/var/www/html notify: - restart httpd - name: Start httpd service service: name=httpd state=started enabled=yes handlers: - name: restart httpd service: name=httpd state=restartedPortanto, pela primeira vez, o servidor Apache será instalado e iniciado. Mesmo se você executar novamente o manual sem fazer nenhuma alteração, o serviço httpd não será reiniciado, pois já foi iniciado.
Se houver alguma alteração nos arquivos de configuração ou se os arquivos HTML forem alterados, assim que o manual for executado, o manipulador será notificado para reiniciar o serviço. O nome na seção de notificação e nos manipuladores deve ser o mesmo. O manipulador é escrito como qualquer outra tarefa, mas é chamado apenas se houver alterações.
Cofre Ansible
Na maioria das vezes, quando dados sensíveis ou confidenciais precisam ser protegidos no manual, eles podem ser criptografados em vez de apenas mantê-los em um arquivo de texto que pode ser lido por todos. O Ansible Vault permite que você criptografe o manual para proteger os dados confidenciais.
Por exemplo, considere a seguinte tarefa em que um contrato de trabalho confidencial está sendo copiado.
Nesses casos, você precisaria de um Cofre Ansible.
--- - hosts: webservers become: true tasks: - name: Copying Confidential Job Agreement copy: content='This is a Confidential Job Agreement' dest=/home/ansible/jobagreement.txtA seguir estão as etapas que você precisa seguir para criptografar os arquivos do manual acima.
# 1) Criação de novos arquivos criptografados
Para criar novos arquivos criptografados com o vault, use o ansible-vault criar comando.
$ ansible-vault create jobagreement.yml 
Depois de confirmar a senha, uma janela de edição será aberta para adicionar conteúdo ao arquivo.

O Ansible criptografará o conteúdo quando você fechar o arquivo. Em vez de ver o conteúdo real, você verá blocos criptografados.

# 2) Para criptografar um arquivo yml existente, use o seguinte
$ ansible-vault encrypt existingfile.yml A senha será solicitada novamente para criptografia.
# 3) Visualização de arquivo criptografado
Use o comando vista da abóbada ansible para ver o conteúdo real do arquivo.
$ ansible-vault view jobagreement.yml Será solicitada a senha novamente para examinar o conteúdo do arquivo.
# 4) Editar arquivos criptografados
Se precisar editar o arquivo use o comando edição do ansible-vault
$ ansible-vault edit users.yml Digite a senha para editar o arquivo.
# 5) Alterar a senha dos arquivos criptografados
Use o comando rekey do ansible-vault para alterar a senha do arquivo.
$ ansible-vault rekey jobagreement.yml # 6) Execute um arquivo criptografado do manual Ansible
Use a opção –ask-vault-pass com o comando ansible-playbook.
$ ansible-playbook users.yml --ask-vault-pass # 7) Descriptografar manualmente os arquivos criptografados
Use o comando ansible-vault decrypt command.
$ ansible-vault decrypt jobagreement.yml Resumo
Bem, neste tutorial, vimos os dois aspectos mais importantes do gerenciamento de configuração que são Ansible Playbooks e proteção de dados confidenciais usando Ansible Vaults.
Os exemplos acima do manual teriam dado a você uma ideia de como automatizar várias tarefas em diferentes cenários durante a entrega do software.
Em nosso próximo tutorial, veremos como modularizar o Playbook usando funções Ansible, integrar com Jenkins e o aspecto mais importante para trabalhar com módulos Ansible S3 e EC2 para gerenciar as instâncias AWS (criar e encerrar instâncias EC2).
ferramentas de análise de big data mais populares
PREV Tutorial | PRÓXIMO Tutorial
Leitura recomendada
- Tutorial Ansible: Instalação e uso com módulos Ansible
- Comandos de automação SeeTest: uma explicação detalhada com exemplos
- Funções Ansible, integração com Jenkins no DevOps e módulos EC2
- Como desenvolver scripts de teste usando as 5 estruturas de automação de teste mais populares (exemplos)
- Estrutura de automação de teste sem script: ferramentas e exemplos
- Tutorial Python DateTime com exemplos
- Cortar comando no Unix com exemplos
- Automação de teste - é uma carreira especializada? Os testadores normais também podem fazer automação?