Como criar peças e manuais Ansible - Parte 5

Como criar peças e manuais Ansible - Parte 5

Nisso Parte 5 da série Ansible, explicaremos como criar Jogadas Ansible e Playbooks usando módulos Ansible.

Ansible navios com scripts independentes chamados módulos que são usados ​​em Playbooks Para a execução de tarefas especializadas em nós remotos.

Módulos Venha para automatizar tarefas como gerenciamento de pacotes, arquivar e copiar arquivos para mencionar apenas alguns. Eles permitem que você faça ajustes em arquivos de configuração e gerencie dispositivos como roteadores, interruptores, balanceadores de carga, firewalls e uma série de outros dispositivos.

O objetivo deste subtópico é fornecer uma visão geral de várias tarefas que podem ser realizadas por Módulos Ansible:

Gerenciamento de pacotes no Linux

O gerenciamento de pacotes é uma das tarefas mais essenciais e frequentes transportadas pelos administradores de sistemas. Navios Ansible com módulos que ajudam você a executar tarefas de gerenciamento de pacotes, ambos em Chapéu vermelho e Debian sistemas baseados.

Eles são relativamente fáceis de adivinhar. Existe o módulo apt Para gerenciamento de pacotes APT para o Debian Baseado, o antigo Módulo YUM para gerenciamento de pacotes yum e Módulo DNF associado a distribuições mais recentes do RHEL.

Abaixo estão alguns exemplos de como os módulos podem ser usados ​​em um livro de cantadas:

Exemplo 1: Instalando o servidor da Web Apache no RHEL 8

--- - Nome: Instale os hosts do Apache WebServer: WebServers Tasks: - Nome: Instale HTTPD DNF: Nome: HTTPD Estado: mais recente 

Exemplo 2: Instalando o Apache WebServer no Debian 10

--- - Nome: Instale os hosts do Apache WebServer: Tarefas de banco de dados: - Nome: Instale o Apache WebServer Apt: Nome: Apache2 Estado: mais recente 

Módulo de serviço

O módulo de serviço permite que os administradores do sistema iniciem, parem, atualizem, atualizem e recarreguem os serviços no sistema.

Exemplo 1: Iniciando o Apache WebServer

--- - Nome: Iniciar o serviço httpd, se não for iniciado Serviço: Nome: HTTPD Estado: Iniciado 

Exemplo 2: Parando o Apache WebServer

--- - Nome: Stop Service HTTPD Serviço: Nome: HTTPD Estado: parado 

Exemplo 3: Reiniciando uma interface de rede ENP2S0

--- - Nome: Reinicie o serviço de rede para interface ETH0 Serviço: Nome: Rede Estado: Reiniciado Args: ENP2S0 

Módulo de cópia

Como o nome sugere, copie o módulo copia arquivos de um local na máquina remota para um local diferente na mesma máquina.

Exemplo 1: Copiando arquivos de Linux Local para Remote

--- - Nome: copiar arquivo com proprietário e permissões cópia: src:/etc/arquivos/tecmint.conf dest: /srv /tecmint.CONK PROPRIETÁRIO: TECMINT GRUPO: Modo Tecmint: '0644' 

O manual copia o arquivo de configuração Tecmint.conf de /etc/arquivos/ diretório para /srv/ diretório como Tecmint usuário com 0644 permissões.

As permissões também podem ser representadas usando a representação simbólica, como mostrado na última linha.

Exemplo 2: copiando arquivos de Linux Local para Remote

--- - Nome: copiar arquivo com proprietário e permissões cópia: src:/etc/arquivos/tecmint.conf dest: /srv /tecmint.Conf Proprietário: Tecmint Group: Tecmint Modo: u = rw, g = r, o = r = r 

As permissões no exemplo anterior podem ser representadas como mostrado na última linha, o usuário é atribuído ler e escrever Permissões, o grupo recebe permissões de gravação e o resto do mundo é atribuído permissões de leitura.

Módulo de arquivo

O módulo de arquivo é usado para transportar muitas operações de arquivos, incluindo a criação de arquivos e diretórios, atribuição de permissões de arquivos e definindo symblinks.

Exemplo 1: Execute permissões de arquivo Linux

--- - Nome: Alterar a propriedade, o grupo e as permissões Arquivo: Caminho: /etc /Tecmint.CONK PROPRIETÁRIO: TECMINT GRUPO: Modo Tecmint: '0644' 

A reprodução acima cria um arquivo chamado Tecmint.conf no /etc Permissões de configuração de diretório para 0644.

Exemplo 2: Excluir arquivo Linux

--- - Nome: Remover Arquivo (Arquivo Excluir): Caminho: /etc /Tecmint.Conf State: ausente 

Isso remove ou exclui o arquivo Tecmint.conf.

Exemplo 3: Crie um diretório

--- - Nome: Crie um diretório se não existir arquivo: caminho: /etc /myDirectory State: Modo de diretório: '0777' 

Isso criará um diretório no /etc Permissões de configuração de diretório para 0777.

Exemplo 4: excluir o Recursiverly um diretório

--- - Nome: Excluindo recursivamente um arquivo de diretório: Caminho: /etc /Tecmint.Conf State: ausente 

A peça acima exclui recursivamente um diretório.

Módulo LineInfile

O LineInfile O módulo é útil quando você deseja alterar uma única linha em um arquivo. Pode substituir uma linha existente.

Exemplo 1: manipular arquivos no Linux

--- - Nome: Verifique se o Selinux está definido como aplicação do modo LineInfile: Path:/etc/Selinux/config regexp: '^Selinux =' Linha: Selinux = desativado 

A peça acima dos conjuntos Selinux valor para desabilitado.

Selinux = desativado 

Exemplo 2: Alter arquivos no Linux

--- - Nome: Adicione uma linha a um arquivo se o arquivo não existir, sem passar o regexp lineInfile: caminho: /etc /hosts linha: 10.200.50.51 Tecmint.com criar: sim 

Isso adiciona a entrada 10.200.50.51 Tecmint.com para o /etc/hosts arquivo.

Módulo de arquivo

Um Arquivo O módulo é usado para a criação de um arquivo comprimido de um único ou múltiplo arquivos. Ele pressupõe que a fonte de compressão exista está presente no destino de destino. Após o arquivo, o arquivo de origem pode ser excluído ou removido usando a instrução remover = true.

Exemplo 1: Crie um arquivo de arquivo

- Nome: Compressor Diretório/Path/To/Tecmint_Dir/Into/Path/to/Tecmint.TGZ Archive: Path:/Path/to/tecmint_dir Dest:/Path/to/Tecmint.TGZ Isso comprime o diretório/PATH/TO/TECMINT_DIR para/PATH/TO/TECMINT.TGZ 

Exemplo 2: Crie um arquivo de arquivo e remova

- Nome: compactar arquivo regular/caminho/para/tecmint em/path/to/foo.gz e remova o arquivo: caminho:/caminho/para/tecmint dest:/path/to/tecmint.TGZ Remover: Sim 

Na reprodução acima, o arquivo de origem /PATH/TO/TECMINT é excluído depois que o arquivo estiver completo.

Exemplo 3: Crie um arquivo de arquivo

- Nome: Crie um arquivo BZ2 de/Path/to/Tecmint Archive: Path:/Path/To/Tecmint Formato: BZ2 

Isso cria um arquivo comprimido em BZ2 formato do /PATH/TO/TECMINT arquivo.

Módulo Git

O módulo gerencia os check -out de repositórios de software.

Exemplo 1: Verifique os repositóis do Git

- Git: Repo: 'https: // pebolim.exemplo.org/path/to/repo.Git 'dest: /srv /checkout versão: release-0.22 

Módulo de comando

Um dos módulos mais usados, o comando Módulo pega o nome do comando e posteriormente seguido por uma lista de argumentos. O comando é um passado da mesma maneira que você digitaria em um shell Linux.

Exemplo 1: Execute um comando

- Nome: executando um comando usando o comando comando comando: gat helloworld.TXT 

Exemplo 2: Verifique o tempo de atividade do Linux remoto

--- - Nome: Verifique os hosts de tempo de uptime do host remoto: servidores Tarefas: - Nome: Execute o comando UpTime Command Over Command Module Registro: UpTimeOutput Command: "UpTime" - Debug: var: UpTimeOutputputputputputpod.stdout_lines 

O módulo de comando recupera o tempo de atividade dos servidores remotos.

Variáveis ​​para recuperar os resultados dos comandos em execução

Geralmente, Ansible Os playbooks são usados ​​para executar tarefas em hosts gerenciados sem exibir a saída na linha de comando. Há casos, no entanto, de que você pode ser obrigado a capturar a saída ou os resultados. Nesta seção, orientamos você como você pode capturar a saída de um manual em uma variável e depois exibi -la.

Um registro Ansible é usado para capturar a saída de uma tarefa e salvá -lo uma variável. A variável posteriormente contém o stdout da tarefa.

Por exemplo, vamos supor que você queira verificar o uso do disco de nós gerenciados nos respectivos diretórios raios usando o df -th / comando. Você vai usar o 'comando' módulo para definir o comando e 'registro' Para salvar a saída STD em uma variável.

Para exibir o comando, você usará o 'depurar' módulo ao lado do valor de retorno do stdout.

--- - Hosts: todos se tornam: Sim Tarefas: - Nome: Execute /Uso de inicialização no comando hosts: 'df -th /' Registro: df - Debug: var = df.stdout 

Agora, vamos executar o manual. Nesse caso, nomeamos nosso manual check_disk_space.yml.

# Ansible-playbook check_disk_space.yml 
Verifique o uso do disco de nós gerenciados Ansible

Como você viu, a saída está toda confusa e dificulta o acompanhamento.

Para alinhar a saída e facilitar a leitura, substitua o stdout Valor de retorno com stdout_lines.

--- - Hosts: todos se tornam: Sim Tarefas: - Nome: Execute /Uso de inicialização no comando hosts: 'df -th /' Registro: df - Debug: var = df.stdout_lines 

Use condicionais para controlar a execução da peça

Assim como nas linguagens de programação, Declarações condicionais são usados ​​quando mais de um resultado é possível. Vamos dar uma olhada em algumas das declarações condicionais comumente usadas em manuais de Ansible.

Quando declaração

Às vezes, você pode querer executar tarefas em nós específicos e não em outros. O 'quando' A declaração condicional é muito fácil de usar e implementar em um manual. Ao usar o 'quando' Cláusula simplesmente declare a condição adjacente à cláusula como mostrado:

Quando: condição 

Quando a condição é satisfeita, a tarefa é executada no sistema remoto.

Vamos conferir alguns exemplos:

Exemplo 1: Usando quando o operador

--- - Hosts: todas as tarefas: - Nome: Instale o nginx no Debian Apt: name = nginx state = presente quando: Ansible_os_family == "Debian" 

A peça acima das instalações Nginx SERVER DO WEB em hosts que administram a família Debian of Distros.

Você também pode usar o OU e E operador ao lado da declaração quando a declaração condicional.

Exemplo 2: Usando e operador com quando

--- - Hosts: Todas as tarefas: - Nome: Instale o nginx no Debian Apt: name = nginx state = presente quando: Ansible_os_family == "Debian" e Ansible_distribution_version == "18.04 ” 

Ao usar o E Operador, ambas as declarações devem ser atendidas para que a tarefa seja executada.

A peça acima instala o nginx em nós que executam uma família Debian of OS, que é a versão 18.04. Obviamente, este será o Ubuntu 18.04.

Exemplo 3: Usando ou operador com quando

Com OU operador, a tarefa é executada se qualquer uma das condições for cumprida.

--- - Hosts: Todas as tarefas: - Nome: Instale o nginx no Debian Apt: name = nginx state = presente quando: Ansible_os_family == "Debian" ou Ansible_os_family == "SUSE" 

A peça acima instala Nginx Webs servidores na família Debian ou Suse de OS ou ambos.

OBSERVAÇÃO: Sempre certifique -se de usar o sinal de dupla igualdade == Ao testar uma condição.

Condicionais em loops

Condicionais também podem ser usados ​​em um loop. Digamos, por exemplo, você tem uma lista de vários pacotes que precisam ser instalados em nós remotos.

No manual abaixo, temos uma matriz chamada pacotes contendo uma lista de pacotes que precisam ser instalados. Essas tarefas serão realizadas uma após a outra se o obrigatório Cláusula está definida como Verdadeiro.

--- - Nome: Instale os pacotes de software Hosts: todos os vars: Pacotes: • Nome: nginx Necessário: true • Nome: MySQL Necessário: true • Nome: Apache necessário: False Tarefas: • Nome: Instale “itens.Nome ”no Debian Apt: Nome:“ item.nome ”Estado: presente quando: item.Necessário == True Loop: “Packages” 

Configure o manuseio de erros

Às vezes, as tarefas falham ao executar manuais. Vamos supor que você esteja executando 5 tarefas em 3 servidores, como mostrado no manual abaixo. Se ocorrer um erro na Tarefa 3 (Iniciando MySQL) no servidor 2, Ansible deixará de executar as tarefas restantes no servidor 2 e tentará concluir as tarefas restantes no restante dos servidores.

--- - Nome: Instale os pacotes de software Hosts: Server1, Server2, Server3 Tarefas: - Nome: Instale dependências <> - Nome: Instale o banco de dados MySQL <> - Nome: Inicie o MySQL <> - Nome: instale nginx <> - Nome: Inicie Nginx <> 

Se você deseja consistência na execução do manual, por exemplo, pare a execução de um manual, se um dos servidores falhar, adicione a opção.

--- - Nome: Instale Pacotes de software Hosts: Server1, Server2, Server3 Any_errors_fatal: true tarefas: 

Dessa forma, se uma tarefa falhar em um servidor, Ansible interromperá a execução de todo o manual em todos os servidores e sai.

Se você deseja que o manual ignorasse os erros e prossiga para executar o conjunto restante de tarefas, use o ignore_errors: opção verdadeira.

--- - Nome: Instale os pacotes de software Hosts: Server1, Server2, Server3 Tarefas: - Nome: Instale dependências <>  ignore_errors: true 

Crie playbooks para configurar sistemas para um estado especificado

Nesta seção, analisamos algumas opções adicionais disponíveis ao executar um manual.

Vamos começar com o Verificar modo ou Funcionamento a seco opção. A opção de execução a seco ou modo de verificação é usada ao executar um manual para verificar se algum erro será encontrado e se houver alguma alteração que será feita nos hosts gerenciados. No entanto, não faz alterações nos nós remotos.

Por exemplo, para secar um manual chamado httpd.yml que instala e inicia o Apache WebServer Run:

# Ansible-playbook httpd.YML -Verifique 
Dry Run um manual Ansible

A outra opção que precisamos olhar é o --Start-to-Task opção. Isso é usado ao especificar o nome da tarefa em que o manual deve começar ou começar.

Vamos dar um exemplo: o manual abaixo soletrou 2 tarefas: o primeiro jogo instala o Apache Web Server e o segundo instalações HTOP utilitário.

--- - Nome: Instale hittpd hosts: todas as tarefas: yum: nome: httpd estado: instalado - nome: install htop yum: nome: htop estado: iniciado 

Se você deseja pular a instalação do Apache WebServer e instale o HTOP Utility Run:

# Playbook Ansible-Playbook.YML-Start-Task "Install HTOP" 
Instale pacotes usando o Ansible Playbook

Por fim, você pode marcar suas tarefas ou desempenhos adicionando o Tag opção para o seu manual como mostrado. Isso é útil quando você tem um manual bastante grande e deseja executar tarefas específicas de todo o manual.

--- - Nome: Instale Httpd Tags: instale e inicie Hosts: todas as tarefas: yum: nome: httpd estado: instalado Tags: instale • Serviço: Nome: HTTPD Estado: Iniciado 
# Playbook Ansible-Playbook.yml -tags "install" 

Para omitir as tags, use o --pular as pegadas opções como mostrado.

# Playbook Ansible-Playbook.YML--skip-tags "instalar" 
Conclusão

Neste tópico, levamos você através dos módulos comumente usados ​​em Ansible, Como recuperar o stdout da execução de um manual para análise, usando condicionais no manual e como gerenciar erros que podem ocorrer ao executar tarefas. Por fim, recapitamos a configuração dos playbooks e como você pode usar opções adicionais para decidir quais tarefas executar se você não pretende executar o manual inteiro.