Tutorial para iniciantes - Ansible Playbooks, Variables e Inventory

Beginner S Tutorial Ansible Playbooks



Os manuais do Ansible são arquivos que contêm tarefas executadas para configurar os hosts com o Ansible. Os manuais do Ansible são escritos no formato YAML. YAML é um formato de arquivo muito simples, assim como JSON. Mostrarei como os manuais do Ansible YAML se parecem em uma seção posterior deste artigo.

Os arquivos do Ansible Inventory mantêm uma lista dos hosts que você deseja configurar ou gerenciar com o Ansible. Você também pode agrupar esses hosts e gerenciá-los por grupos. Você também pode passar variáveis ​​diferentes para cada host ou para um grupo de hosts.







Neste artigo, mostrarei como trabalhar com os manuais, variáveis, arquivos de inventário do Ansible e alguns módulos comuns do Ansible com exemplos práticos. Então, vamos começar!



Pré-requisitos

Se você quiser experimentar os exemplos deste artigo,



1) Você deve ter o Ansible instalado em seu computador.
2) Você deve ter pelo menos um host Ubuntu / Debian e um host CentOS / RHEL 8 configurado para automação Ansible.





Existem muitos artigos no LinuxHint dedicados à instalação do Ansible e à configuração de hosts para automação do Ansible. Você pode verificar esses artigos, se necessário, para obter mais informações.

Criação de um diretório de projeto

Primeiro, crie um diretório de projeto ~ / projeto / com o seguinte comando:

$mkdir -pv~/projeto/playbooks

Navegue até o ~ / projeto / diretório da seguinte forma:

$CD~/projeto

Arquivo de inventário básico:

Crie um arquivo de inventário Ansible hospedeiros no diretório do projeto com o seguinte comando:

$nanohospedeiros

Você pode digitar os endereços IP dos hosts que deseja configurar / automatizar usando Ansible no hospedeiros arquivo de inventário.

192.168.20.167
192.168.20.168
192.168.20.169
192.168.20.170

Depois de concluir esta etapa, salve o arquivo pressionando + X seguido pela E e .

Se desejar usar nomes DNS em vez de endereços IP no arquivo de inventário, você também pode fazer isso.

Se você não tiver um servidor DNS funcionando, pode usar o / etc / hosts arquivo em seu computador para resolução de DNS local.

Para resolução de DNS local, abra o / etc / hosts arquivo com um editor de texto ( nano , no meu caso) da seguinte forma:

$sudo nano /etc/hospedeiros

Digite os endereços IP e os nomes DNS desejados da seguinte maneira:

192.168.20.167 vm1.nodekite.com
192.168.20.168 vm2.nodekite.com
192.168.20.169 vm3.nodekite.com
192.168.20.170 vm4.nodekite.com

Assim que terminar esta etapa, pressione + X seguido pela E e .

Abra o arquivo de inventário Ansible hospedeiros do seguinte modo:

$nanohospedeiros

Agora você pode digitar os nomes DNS dos hosts que deseja configurar / automatizar usando Ansible no hospedeiros arquivo de inventário.

vm1.nodekite.com
vm2.nodekite.com
vm3.nodekite.com
vm4.nodekite.com

Quando terminar, salve o arquivo de inventário de hosts pressionando + X seguido pela E e .

Testando conectividade para todos os hosts

Agora, você pode tentar executar ping em todos os hosts no arquivo de inventário da seguinte maneira:

$ansible-euhospeda todos-vocêansible-m ping

Como você pode ver, todos os hosts no arquivo de inventário são acessíveis. Portanto, estamos prontos para avançar para a próxima seção deste artigo.

Seu primeiro manual de Ansible

Vamos criar um manual simples do Ansible ping_all_hosts.yaml no manuais / diretório. Esta ação fará o ping de todos os hosts no hospedeiros arquivo de inventário, como antes.

$nanoplaybooks/ping_all_hosts.yaml

Digite as seguintes linhas no ping_all_hosts.yaml Arquivo de manual do Ansible:

- hosts: todos
usuário: ansible
tarefas:
- name: Ping todos os hosts
ping:

Aqui,

hosts: todos - seleciona todos os hosts do arquivo de inventário hospedeiros .
usuário: ansible - diz ao Ansible para SSH nos hosts no arquivo de inventário como o ansible do utilizador.
tarefas - todas as tarefas que o Ansible executará nos hosts estão listadas aqui. Cada uma das tarefas geralmente tem um nome e uma ou mais opções específicas do módulo.

O manual ping_all_hosts.yaml tem apenas uma tarefa, o ping de todos os hosts no arquivo de inventário hospedeiros . O nome da tarefa é Ping todos os hosts e usa o ping módulo.

o ping módulo não precisa de nenhuma outra opção. Então, eu o deixei vazio (não há nada depois do cólon, : )

Depois de concluir esta etapa, salve o arquivo pressionando + X seguido pela E e .

Você pode executar o ping_all_hosts.yaml Manual do Ansible da seguinte forma:

$ansible-playbook-euhospeda manuais/ping_all_hosts.yaml

Como você pode ver, a tarefa de ping é bem-sucedida em todos os hosts no arquivo de inventário.

Arquivo de configuração simples Ansible

No exemplo anterior, você teve que usar o -eu opção para informar ao Ansible qual arquivo de inventário usar. No meu caso, é o hospedeiros arquivo de inventário.

$ansible-playbook-euhospeda manuais/ping_all_hosts.yaml

Se você não deseja passar um arquivo de inventário com o -eu Cada vez que você executa um manual do Ansible, tudo o que você precisa fazer é definir um arquivo de inventário padrão para o seu projeto.

Para fazer isso, crie um novo arquivo de configuração Ansible ansible.cfg na raiz do seu projeto da seguinte maneira:

$nanoansible.cfg

Digite as seguintes linhas no ansible.cfg Arquivo:

[padrões]
inventário =./hospedeiros

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Você pode executar o mesmo manual do Ansible da seguinte maneira:

$manuais do ansible-playbook/ping_all_hosts.yaml

Como você pode ver, o manual está usando o hospedeiros arquivo de inventário por padrão. Você ainda pode usar o -eu opção para especificar um arquivo de inventário diferente, se desejar. O Ansible é muito flexível.

Agrupando hosts no arquivo de inventário

Até agora, mostrei como executar um conjunto de tarefas (playbook) em todos os hosts no arquivo de inventário. Mas e se você quiser executar um conjunto de tarefas em alguns dos hosts e outro conjunto de tarefas em outros hosts? Você pode agrupar os hosts no arquivo de inventário e executar diferentes tarefas nos grupos de hosts.

Nesta seção, mostrarei como agrupar hosts no arquivo de inventário e como trabalhar com grupos de hosts.

Primeiro, abra o arquivo de inventário hospedeiros do seguinte modo:

$nanohospedeiros

Digite as seguintes linhas no hospedeiros arquivo de inventário:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[centos8]
vm3.nodekite.com
vm4.nodekite.com

Aqui, criei dois grupos de hosts: debian10 e centos8 .

No debian10 grupo, tenho dois hosts: vm1.nodekite.com e vm2.nodekite.com

No centos8 grupo, tenho dois hosts: vm3.nodekite.com e vm4.nodekite.com

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Agora vamos criar um novo manual ping_debian10_hosts.yaml , que fará o ping dos hosts como antes, mas apenas os hosts do debian10 grupo hospedeiro.

Crie um manual ping_debian10_hosts.yaml no manuais / diretório da seguinte forma:

$nanoplaybooks/ping_debian10_hosts.yaml

Digite as seguintes linhas no ping_debian10_hosts.yaml Manual Ansible:

- hosts: debian10
usuário: ansible
tarefas:
- nome: Faça ping em todo o Debian10hospedeiros
ping:

Ao invés de hosts: todos , Eu adicionei hosts: debian10 aqui. debian10 é o grupo de host. Este manual será executado apenas nos hosts no debian10 grupo hospedeiro.

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Execute o manual da seguinte maneira:

$manuais do ansible-playbook/ping_debian10_hosts.yaml

Como você pode ver, apenas os hosts no debian10 grupo de hosts são pingados.

Usando o mesmo método, crie outro manual ping_centos8_hosts.yaml do seguinte modo:

$nanoplaybooks/ping_centos8_hosts.yaml

Digite as seguintes linhas no ping_centos8_hosts.yaml Manual Ansible:

- hosts: centos8
usuário: ansible
tarefas:
- nome: Ping em todos CentOS8hospedeiros
ping:

Da mesma forma, eu adicionei hosts: centos8 aqui. centos8 é o grupo de host. Este manual será executado apenas nos hosts no centos8 grupo hospedeiro.

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Execute o manual da seguinte maneira:

$manuais do ansible-playbook/ping_centos8_hosts.yaml

Como você pode ver, apenas os hosts no centos8 grupo de hosts são pingados.

Tipos de Variáveis ​​Ansible

Existem diferentes tipos de variáveis ​​no Ansible. Os principais tipos de variáveis ​​são Variáveis ​​de Fatos Ansible e Variáveis ​​definidas pelo usuário .

Variáveis ​​dos Fatos Ansible: Dependendo do host em que o Ansible está trabalhando, o Ansible gera variáveis ​​de fatos do Ansible. As variáveis ​​de fatos Ansible contêm informações sobre o host, como endereços IP, nome do host, nome do domínio, data, hora, variáveis ​​de ambiente do shell e muito mais.

Variáveis ​​definidas pelo usuário: Essas são variáveis ​​personalizadas definidas pelo usuário. Você pode passar variáveis ​​definidas pelo usuário a partir da linha de comando ou usando o arquivo de inventário.

Principalmente as variáveis ​​definidas pelo usuário são de dois tipos: Variáveis ​​de grupo e Variáveis ​​de host .

Precedência de Variável Ansible

A precedência variável de Ansible é : Variáveis ​​de linha de comando > Variáveis ​​hospedeiras > Variáveis ​​de Grupo

Se você definir a mesma variável que a variável do host e a variável do grupo, a variável do host será aplicada.

Da mesma forma, as variáveis ​​definidas na linha de comando durante a execução de um manual substituirão as variáveis ​​do host e do grupo.

Trabalhando com Variáveis ​​de Fatos Ansible

Nesta seção, mostrarei como trabalhar com as variáveis ​​de fatos do Ansible. Então, vamos começar!

Você pode listar todas as variáveis ​​Ansible Facts dos hosts em seu hospedeiros arquivo de inventário da seguinte forma:

$ansible tudo-vocêansible-mconfigurar

Como você pode ver, todas as variáveis ​​do Ansible Facts são listadas no formato JSON. É uma lista muito longa.

Como a lista é bastante longa, você pode abri-la com um programa de pager, como menos do seguinte modo:

$ansible tudo-vocêansible-mconfigurar| menos

Agora, você pode rolar a saída para cima, para baixo, para a esquerda e para a direita, conforme necessário.

Você também pode pesquisar nomes de variáveis ​​no pager. Para fazer isso, pressione o / tecla no seu teclado. Em seguida, digite a string de pesquisa ( nome de anfitrião no meu caso) e pressione .

Como você pode ver, a variável de fatos Ansible que correspondeu à string de pesquisa é ansible_hostname . Você pode pressionar N ir para a próxima partida e P para ir para a partida anterior do pager. É assim que você encontra a variável de fatos do Ansible necessária para o seu projeto do Ansible.

Vamos agora ver como acessar as variáveis ​​de fatos Ansible.

Crie um novo manual print_variable1.yaml do seguinte modo:

$nanoplaybooks/print_variable1.yaml

Digite as seguintes linhas no print_variable1.yaml Arquivo:

- hosts: todos
usuário: ansible
tarefas:
- nome: Imprimirnome de anfitriãode todos os anfitriões
depurar:
msg:'{{ansible_hostname}}'

Aqui, eu adicionei uma tarefa Imprimir o nome do host de todos os hosts . Esta tarefa usa o Ansible depurar módulo para imprimir uma mensagem quando o playbook é executado.

msg é o único parâmetro obrigatório do depurar módulo. o msg O parâmetro aceita uma string entre aspas, que é a mensagem que será impressa no console.

Aqui, {{ nome variável }} formato é usado para acessar uma variável. Nesse caso, {{ansible_hostname}} é usado para imprimir o ansible_hostname variável de cada um dos hosts no arquivo de inventário.

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Você também pode acessar a variável de fatos Ansible como ansible_facts [nome_variável] . Então o ansible_hostname variável se tornará ansible_facts [nome do host] .

Podemos reescrever o print_variable1.yaml manual como este também. Teremos a mesma saída.

- hosts: todos
usuário: ansible
tarefas:
- nome: Imprimirnome de anfitriãode todos os anfitriões
depurar:
msg:'{{ansible_facts [' variable_name ']}}'

Execute o manual print_variable1.yaml do seguinte modo:

$manuais do ansible-playbook/print_variable1.yaml

Como você pode ver, o nome do host de cada um dos hosts no arquivo de inventário está impresso no console.

Vamos agora imprimir o endereço IPv4 padrão de cada host junto com o nome do host. Como você pode ver, o endereço IPv4 padrão do host pode ser acessado usando o Morada propriedade do ansible_default_ipv4 objeto.

Crie um novo manual print_variable2.yaml do seguinte modo:

$nanoplaybooks/print_variable2.yaml

Digite as seguintes linhas no print_variable2.yaml Arquivo:

- hosts: todos
usuário: ansible
tarefas:
- nome: Imprimirnome de anfitriãode todos os anfitriões
depurar:
msg:'{{ansible_hostname}} - {{ansible_default_ipv4.address}}'

Este manual é o mesmo de antes. A única diferença é a nova variável {{ansible_default_ipv4.address}} no msg opção do depurar módulo.

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Execute o print_variable2.yaml manual da seguinte forma:

$manuais do ansible-playbook/print_variable2.yaml

Como você pode ver, o endereço IPv4 padrão e o nome do host dos hosts são impressos no console.

Então, é assim que você trabalha com as variáveis ​​do Ansible Facts.

Configurando variáveis ​​definidas pelo usuário a partir da linha de comando:

Nesta seção, mostrarei como definir variáveis ​​definidas pelo usuário a partir da linha de comando enquanto executa os manuais do Ansible.

Primeiro, crie um novo manual print_variable3.yaml do seguinte modo:

$nanoplaybooks/print_variable3.yaml

Digite as seguintes linhas no print_variable3.yaml Arquivo:

- hosts: todos
usuário: ansible
tarefas:
- nome: Imprimircomandovariável de linha
depurar:
msg:'Bem-vindo, {{username}}'

Aqui, eu usei o depurar módulo para imprimir a mensagem Bem-vindo, {{username}} . nome do usuário é uma variável que será substituída quando executarmos o manual.

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Execute o manual print_variable3.yaml do seguinte modo:

$ansible-playbook-E 'username = Bob'playbooks/print_variable3.yaml

NOTA: Aqui, -E opção é usada para passar um nome do usuário variável com o valor Prumo para o manual print_variable3.yaml a partir da linha de comando.

Como você pode ver, a mensagem Bem-vindo Bob está impresso no console.

Vamos agora descobrir como passar várias variáveis ​​da linha de comando.

Crie um novo manual print_variable4.yaml do seguinte modo:

$nanoplaybooks/print_variable4.yaml

Digite as seguintes linhas no print_variable4.yaml Arquivo:

- hosts: todos
usuário: ansible
tarefas:
- nome: Imprimir variáveis ​​definidas pelo usuário
depurar:
msg:'username = {{username}} http_port = {{http_port}}'

O manual deve ser muito familiar para você agora. Tudo o que faz é imprimir as 2 variáveis nome do usuário e http_port no console.

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Agora você pode passar o nome do usuário e http_port variável para o manual usando dois diferentes -E opção da seguinte forma:

$ ansible-playbook-E 'username = Bob' -E 'http_port = 8080'
playbooks/print_variable4.yaml

Ou você pode simplesmente separar as variáveis ​​com um espaço em branco, da seguinte maneira:

$ ansible-playbook-E 'username = Bob http_port = 8080'
playbooks/print_variable4.yaml

Como você pode ver, o nome do usuário e http_port as variáveis ​​são impressas no console.

Trabalho com variáveis ​​de grupo definidas pelo usuário

Digamos que você queira adicionar algumas variáveis ​​a um grupo de hosts. Essa ação é muito fácil de fazer no Ansible.

Primeiro, abra o seu hospedeiros arquivo de inventário da seguinte forma:

$nanohospedeiros

Digite as seguintes linhas em seu hospedeiros arquivo de inventário:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[debian10: vars]
nome de usuário = Lily
http_port =4343
[centos8]
vm3.nodekite.com
vm4.nodekite.com
[centos8: vars]
nome de usuário = Bob
http_port =7878

Como você pode ver, criei uma nova seção [debian10: vars] para debian10 grupo de hosts e adicionou as variáveis ​​( nome do usuário e http_port ) para debian10 grupo de acolhimento lá.

Da mesma forma, criei uma nova seção [centos8: vars] para centos8 grupo de hosts e adicionou as variáveis ​​( nome do usuário e http_port ) para centos8 grupo de acolhimento lá.

Assim que terminar, salve o hospedeiros arquivo de inventário pressionando + X seguido pela E e .

Execute o print_variable4.yaml manuais da seguinte forma:

$manuais do ansible-playbook/print_variable4.yaml

Como você pode ver, as variáveis ​​corretas são passadas para cada um dos hosts dependendo de seu grupo de hosts.

Trabalho com variáveis ​​de host definidas pelo usuário

Nesta seção, mostrarei como definir variáveis ​​para hosts específicos no arquivo de inventário.

Primeiro, abra o hospedeiros arquivo de inventário da seguinte forma:

$nanohospedeiros

Para adicionar variáveis ​​a um host específico (digamos, vm1.nodekite.com ), basta adicionar um espaço / guia após o nome do IP / DNS do host e digitar suas variáveis, conforme mostrado na imagem abaixo.

Você também pode adicionar várias variáveis. Simplesmente separe cada variável com um espaço.

Quando terminar, salve o arquivo de inventário pressionando + X seguido pela E e .

Execute o print_variable4.yaml manuais da seguinte forma:

$manuais do ansible-playbook/print_variable4.yaml

Como você pode ver, as variáveis ​​são definidas apenas para o vm1.nodekite.com hospedeiro. Os outros hosts têm variáveis ​​de grupo aplicadas a eles.

Gerando arquivos de inventário rapidamente com intervalos

Você pode usar intervalos para gerar rapidamente arquivos de inventário Ansible se seus endereços IP de host ou nomes DNS forem consistentes (ou seja, se tiverem um formato específico).

Nos exemplos anteriores, usei os hosts vm1.nodekite.com , vm2.nodekite.com , vm3.nodekite.com e vm4.nodekite.com . Em vez de digitar 4 linhas, eu poderia simplesmente digitar vm[1:4].nodekite.com no arquivo de inventário.

Para experimentar intervalos, abra o hospedeiros arquivo de inventário da seguinte forma:

$nanohospedeiros

Remova todos os hosts e variáveis ​​dos arquivos de inventário.

Podemos agora substituir vm1.nodekite.com e vm2.nodekite.com com vm[1:2].nodekite.com para debian10 grupo de hosts da seguinte forma.

Da mesma forma, podemos substituir vm3.nodekite.com e vm4.nodekite.com com vm[3:4].nodekite.com para centos8 grupo hospedeiro.

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Execute o ping_all_hosts.yaml do seguinte modo:

$manuais do ansible-playbook/ping_all_hosts.yaml

Como você pode ver, os intervalos de host foram expandidos quando executei o manual.

Armazenando Variáveis ​​em Arquivos Diferentes

Armazenar as variáveis ​​de grupo e variáveis ​​de host no mesmo arquivo de inventário é muito fácil. Porém, você pode estar procurando por mais flexibilidade. Especialmente quando você deseja usar intervalos em seu arquivo de inventário, pois você não pode mais definir variáveis ​​de host se usar intervalos. Bem, você pode armazenar variáveis ​​de grupo e variáveis ​​de host em arquivos diferentes. Nesta seção, vou mostrar como isso é feito.

Por padrão, o Ansible procura variáveis ​​de grupo no group_vars / diretório e variáveis ​​de host no host_vars / diretório.

Então, crie o group_vars / e host_vars / diretório da seguinte forma:

$mkdir -pv {anfitrião, grupo}_de quem

Para definir variáveis ​​de grupo para o debian10 grupo de host, crie um arquivo debian10 (igual ao nome do grupo) no group_vars / diretório da seguinte forma:

$nanogroup_vars/debian10

Digite suas variáveis ​​da seguinte maneira:

nome de usuário: Lily
http_port: 4343

Quando terminar, salve o arquivo pressionando + X seguido por Y e .

Da mesma forma, para definir variáveis ​​de grupo para o centos8 grupo de host, crie um arquivo centos8 (igual ao nome do grupo) no group_vars / diretório da seguinte forma:

$nanogroup_vars/centos8

Digite suas variáveis ​​da seguinte maneira:

nome de usuário: Bob
http_port: 7878

Quando terminar, salve o arquivo pressionando + X seguido por Y e .

Execute o print_variable4.yaml manual da seguinte forma:

$manuais do ansible-playbook/print_variable4.yaml

Como você pode ver, as variáveis ​​de grupo estão definidas corretamente para cada grupo de hosts.

Para definir variáveis ​​de host para o host vm1.nodekite.com , crie um arquivo vm1.nodekite.com (igual ao nome do host ou endereço IP) no host_vars / diretório da seguinte forma:

$nanovm1.nodekite.com

Digite suas variáveis ​​de host da seguinte maneira:

nome de usuário: Alex
http_port: 7788

Quando terminar, salve o arquivo pressionando + X seguido por Y e .

Execute o print_variable4.yaml manual da seguinte forma:

$ ansible-playbook playbooks/print_variable4.yaml
[

Como você pode ver, as variáveis ​​do host estão definidas corretamente para o host vm1.nodekite.com .

Trabalhando com Loops no Ansible

Nesta seção, mostrarei como usar loops no Ansible.

Primeiro, crie um novo manual loop1.yaml no manuais / diretório da seguinte forma:

$nanoplaybooks/loop1.yaml

Digite as seguintes linhas no loop1.yaml livro de cantadas:

- hosts: todos
usuário: ansible
tarefas:
- nome: Imprimir lista de usuários
depurar:
msg:'Usuário: {{item}}'
with_items:
- Alex
- Bob
- Lily

Aqui, tenho 1 tarefa que imprime uma lista de usuários usando loop.

Para definir os valores de iteração para a tarefa, você usa o with_items módulo. Em seguida, você adiciona os valores um por um.

with_items:
- Alex
- Bob
- Lily

Você acessa o valor da iteração atual usando o item variável.

depurar:
msg:'Usuário: {{item}}'

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Execute o loop1.yaml manual da seguinte forma:

$manuais do ansible-playbook/loop1.yaml

Como você pode ver, a mesma tarefa foi executada para cada item em cada host. Então, o loop está funcionando.

Trabalhando com Condições no Ansible

Se você deseja executar tarefas com base em certas condições, esta seção é para você.

Para executar tarefas com base na condição, você pode usar o quando módulo de Ansible. Vejamos um exemplo deste módulo. Primeiro, crie um novo manual condição1.yaml do seguinte modo:

$nanoplaybooks/condição1.yaml

Digite as seguintes linhas no condição1.yaml livro de cantadas:

- hosts: todos
usuário: ansible
tarefas:
- name: Execute esta tarefa apenas no Debian
depurar:
msg:'esta tarefa está sendo executada no Debian'
quando: ansible_facts['distribuição']=='Debian'

Aqui,

ansible_facts [‘distribuição’] == ‘Debian’ é usado para verificar se o distribuição é Debian . A tarefa será executada apenas se a distribuição for Debian.

o ansible_facts [‘distribuição’] é usado para acessar a variável Ansible Facts ansible_distribution . Você também pode verificar a versão de distribuição usando o ansible_distribution_major_version variável.

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Execute o condição1.yaml manual da seguinte forma:

$manuais do ansible-playbook/condição1.yaml

Como você pode ver, a tarefa foi executada apenas nos hosts Debian. A tarefa não foi executada nos hosts CentOS.

Você também pode verificar várias condições ao mesmo tempo e executar a tarefa apenas se todas as condições forem verdadeiras. Vejamos um exemplo.

Crie um novo manual condição2.yaml do seguinte modo:

$nanoplaybooks/condição2.yaml

Digite as seguintes linhas no condição2.yaml Arquivo:

- hosts: todos
usuário: ansible
tarefas:
- name: Execute esta tarefa apenas no Debian10
depurar:
msg:'esta tarefa está sendo executada no Debian 10'
quando: ansible_facts['distribuição']=='Debian'
e ansible_facts['Distribution_major_version']=='10'

Aqui, a tarefa só será executada se a distribuição for Debian ( ansible_facts [‘distribuição’] == ‘Debian’ ) e a versão é 10 ( ansible_facts [‘distribution_major_version’] == ’10’ ) Se ambas as condições forem verdadeiras, a tarefa será executada. Caso contrário, a tarefa não será executada.

Eu usei o e palavra-chave para verificar se ambas as condições são verdadeiras aqui. Se você quiser verificar se alguma das condições é verdadeira, você pode usar o ou palavra-chave em vez disso.

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Execute o manual condição2.yaml do seguinte modo:

$manuais do ansible-playbook/condição2.yaml

Como você pode ver, a tarefa foi executada apenas nos hosts Debian 10.

Vamos mudar o manual condição2.yaml para executar a tarefa apenas em hosts Debian 8 como segue.

Como você pode ver, todos os hosts foram ignorados, pois não tenho nenhum host Debian 8 no arquivo de inventário.

Trabalhando com o Módulo Ansible apt

o apto módulo de Ansible é usado para instalar um pacote de software específico em hosts Ubuntu / Debian. Vamos ver como usar este módulo.

Primeiro, crie um novo manual apt1.yaml no manuais / diretório da seguinte forma:

$nanoplaybooks/apt1.yaml

Digite as seguintes linhas no apt1.yaml livro de cantadas:

- hosts: debian10
usuário: ansible
tornar verdade
tarefas:
- name: Instale o apache2
apt:
nome: apache2
estado: mais recente

o apto módulo requer apenas o nome do pacote que você deseja instalar / atualizar / remover e o Estado do pacote.

Aqui, estou tentando instalar o apache2 pacote ( nome: apache2 ) em meus hosts Debian 10. Como estou tentando instalar um pacote e também atualizá-lo se uma nova versão estiver disponível, o Estado deveria estar Mais recentes .

Estado também aceita as seguintes opções:

- ausente - O pacote será removido se já estiver instalado.
- Mais recentes - O pacote será atualizado se houver uma atualização disponível. Se o pacote ainda não estiver instalado, ele será instalado.
- presente - O pacote será instalado se ainda não estiver instalado. Mas o pacote não será atualizado se houver uma atualização disponível.

Observe que eu adicionei tornar verdade no manual. Isso vai dar o ansible privilégios de usuário sudo para modificar a estrutura do sistema de arquivos (ou seja, instalar / atualizar / remover pacotes). Sem tornar verdade , a apto módulo não será capaz de instalar o apache2 pacote.

Quando terminar, salve o manual pressionando + X seguido pela E e .

Execute o apt1.yaml manual da seguinte forma:

$manuais do ansible-playbook/apt1.yaml

Como você pode ver, o manual foi executado com sucesso nos hosts Debian 10.

Como você pode ver, o apache2 pacote está instalado em meus hosts Debian 10.

Trabalhando com o Módulo Ansible dnf / yum

o dnf e yum módulo de Ansible é usado para instalar um pacote de software específico em hosts CentOS / RHEL. Você pode usar este módulo da mesma forma que fez apto módulo na seção anterior deste artigo.

Tanto o dnf e yum módulos aceitam os mesmos parâmetros. Você pode usar o dnf módulo em hosts CentOS / RHEL 8, e yum no CentOS / RHEL 7 ou mais antigo.

Vejamos agora um exemplo deste módulo.

Primeiro, crie um novo manual dnf1.yaml no manuais / diretório da seguinte forma:

$nanoplaybooks/dnf1.yaml

Digite as seguintes linhas no dnf1.yaml livro de cantadas:

- hosts: centos8
usuário: ansible
tornar verdade
tarefas:
- nome: Instale o pacote httpd
dnf:
nome: httpd
estado: mais recente

o dnf e yum módulo requer apenas o nome do pacote que você deseja instalar / atualizar / remover e o Estado do pacote.

Aqui, estou tentando instalar o httpd pacote ( nome: httpd ) em meus hosts CentOS 8. Como estou tentando instalar um pacote e também gostaria de atualizá-lo se uma nova versão estiver disponível, o Estado deveria estar Mais recentes .

Estado aceita as seguintes opções:

- ausente - O pacote será removido se já estiver instalado.
- Mais recentes - O pacote será atualizado se houver uma atualização disponível. Se o pacote ainda não estiver instalado, ele será instalado.
- presente - O pacote será instalado se ainda não estiver instalado. Mas o pacote não será atualizado se houver uma atualização disponível.

Observe que eu adicionei tornar verdade no manual. Isso dá a ansible privilégios de usuário sudo para modificar a estrutura do sistema de arquivos (ou seja, instalar / atualizar / remover pacotes). Sem tornar verdade , a apto módulo não será capaz de instalar o httpd pacote.

Quando terminar, salve o manual pressionando + X seguido pela E e .

Execute o dnf1.yaml manual da seguinte forma:

$manuais do ansible-playbook/dnf1.yaml

Como você pode ver, o manual foi executado com sucesso no host CentOS 8.

Trabalhando com o Módulo de serviço Ansible

o serviço O módulo do Ansible é usado para iniciar, parar, reiniciar, habilitar (adicionar serviço à inicialização) e desabilitar (remover serviço da inicialização) serviços em seus hosts.

Nas seções anteriores, mostrei como instalar o pacote do servidor Apache HTTP usando o Ansible apto , dnf e yum módulos. Vamos agora garantir que o serviço do servidor Apache HTTP está em execução e foi adicionado à inicialização do sistema.

Vou trabalhar com meus hosts Debian 10. Mas, você pode trabalhar com hosts CentOS 8, se desejar. Basta ajustar o manual de acordo.

Primeiro, crie um novo manual do Ansible apt2.yaml do seguinte modo:

$nanoplaybooks/apt2.yaml

Digite as seguintes linhas no apt2.yaml livro de cantadas:

- hosts: debian10
usuário: ansible
tornar verdade
tarefas:
- name: Instale o apache2
apt:
nome: apache2
estado: mais recente
- name: Inicia o serviço apache2
serviço:
nome: apache2
estado: iniciado
habilitado: Verdadeiro

Aqui, adicionei uma nova tarefa, Inicie o serviço apache2 .

nome: apache2 - o serviço no qual estou trabalhando é apache2 .

estado: iniciado - o serviço deve estar em execução.

habilitado: Verdadeiro - o serviço deve ser adicionado à inicialização do sistema.

o Estado parâmetro aceita outros valores.

- recarregado - O serviço deve recarregar os arquivos de configuração.
- reiniciado - O serviço deve ser reiniciado.
- iniciado - O serviço deve estar em execução. Se o serviço não estiver em execução, inicie-o.
- parado - O serviço deve ser interrompido. Se o serviço estiver em execução, pare o serviço.

Execute o manual apt2.yaml do seguinte modo:

$manuais do ansible-playbook/apt2.yaml

Como você pode ver, o manual foi executado com sucesso.

Como você pode ver, o apache2 serviço está sendo executado em meus hosts Debian 10.

Trabalhando com o Módulo de cópia Ansible

The Ansible cópia de O módulo é usado principalmente para copiar arquivos de seu computador para hosts remotos.

Na seção anterior, instalei o servidor da web Apache 2 em meus hosts Debian 10. Vamos agora copiar um index.html arquivo para o webroot dos hosts Debian 10.

Primeiro, crie um novo diretório arquivos/ do seguinte modo:

$mkdir -varquivos

Crie um novo arquivo index.html no arquivos/ diretório da seguinte forma:

$nanoarquivos/index.html

Digite as seguintes linhas no index.html Arquivo:


< html >
< cabeça >
< título >Servidor Web por Ansible</ título >
</ cabeça >
< corpo >
< h1 >Bem-vindo ao LinuxHint</ h1 >
< p >Este servidor web foi implantado com o Ansible.</ p >
</ corpo >
</ html >

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Crie um novo manual do Ansible apt3.yaml do seguinte modo:

$nanoplaybooks/apt3.yaml

Digite as seguintes linhas no apt3.yaml Arquivo:

- hosts: debian10
usuário: ansible
tornar verdade
tarefas:
- name: Instale o apache2
apt:
nome: apache2
estado: mais recente
- name: Copia index.html para o servidor
cópia de:
src: ../arquivos/index.html
dest:/Onde/www/html/index.html
modo: 0644
proprietário: www-data
grupo: www-data
- name: Inicia o serviço apache2
serviço:
nome: apache2
estado: iniciado
habilitado: Verdadeiro

Aqui, a tarefa Copie index.html para o servidor copia o index.html de arquivos/ diretório para o / var / www / html / diretório dos hosts Debian 10.

src: ../files/index.html - O caminho do arquivo de origem.
dest: /var/www/html/index.html - O caminho do arquivo de destino.
modo: 0644 - As permissões para o usuário do arquivo (6 - leitura e gravação), grupo (4 - leitura) e outros (4 - leitura).
proprietário: www-data - Defina o proprietário do arquivo para www-data .
grupo: www-data - Defina o grupo do arquivo para www-data .

Quando terminar, salve o arquivo pressionando + X seguido pela E e .

Execute o apt3.yaml manual da seguinte forma:

$manuais do ansible-playbook/apt3.yaml

Como você pode ver, a tarefa Copie index.html para o servidor é bem sucedido.

Como você pode ver, o index.html arquivo foi copiado para os hosts Debian 10.

Como você pode ver, o servidor web Debian 10 atende a index.html página que acabei de copiar para os hosts Debian 10.

Então, esses são os princípios básicos do Ansible. Você pode aprender mais sobre o Ansible lendo a documentação oficial do Ansible. Obrigado por ler este artigo.