Como usar o módulo de registro Ansible

Como usar o módulo de registro Ansible
Em Ansible, você pode executar qualquer comando Shell em seus anfitriões Ansible, os hosts que você estará configurando com Ansible. Esses comandos do shell podem ter saídas. Por padrão, a saída é ignorada. Se você deseja armazenar a saída em uma variável e usá -la mais tarde, pode usar o Ansible registro módulo. Este artigo mostrará como usar o Ansible registro Módulo para armazenar a saída de comando em uma variável e acessá -la mais tarde no seu manual Ansible.

Pré -requisitos

Se você quiser experimentar os exemplos deste artigo, você deve:

1) Tenha Ansible instalado no seu computador.

2) Tenha um host do Ubuntu configurado para Ansible Automation.

Existem muitos artigos sobre Linuxhint dedicados à instalação do Ansible e configurando hosts para Ansible Automation. Você pode verificar esses artigos, se necessário.

Configurando um diretório de projeto

Antes de seguir em frente, configure um novo diretório de projeto Ansible, apenas para manter as coisas um pouco organizadas.

Para criar o diretório do projeto registro-deem// E todos os subdiretos necessários (em seu diretório de trabalho atual), execute o seguinte comando:

$ mkdir -pv registr -deemo/playbooks

Depois que o diretório do projeto for criado, navegue até o diretório do projeto, como segue:

$ cd registro-democonamente/

Criar uma anfitriões Arquivo de inventário, como segue:

$ nano hosts

Adicione o nome IP do host ou DNS do seu host ubuntu no arquivo de inventário (um host por linha), como mostrado na captura de tela abaixo.

Aqui, eu adicionei meu Ubuntu 20.04 Host LTS VM3.NodeKite.com no Ubuntu20 grupo.

Depois de terminar, salve o arquivo pressionando + X, seguido pela Y e .

Crie um arquivo de configuração Ansible Ansible.cfg No seu diretório de projeto, como segue:

$ Nano Ansible.cfg

Em seguida, digite as seguintes linhas no Ansible.cfg arquivo:

[Padrões]
inventário = hosts
host_key_checking = false

Depois de terminar, salve o Ansible.cfg arquivo pressionando + X, seguido pela Y e .

Agora, tente fazer ping no seu host Ubuntu, como segue:

$ Ansible ubuntu20 -u Ansible -M ping

Como você pode ver, meu Ubuntu 20.04 HOST VM3.NodeKite.com é acessível.

Exemplo 1: O básico

Neste exemplo, mostrarei alguns dos básicos do Ansible registro módulo. Vou usar Ansible para gerar uma senha aleatória no meu Ubuntu 20.04 Host usando o pwgen comando, armazene a senha em uma variável usando o registro módulo e imprima a senha na tela.

Primeiro, crie o novo manual generate_pass.Yaml no Playbooks/ Diretório, como segue:

$ nano Playbooks/generate_pass.Yaml

Digite as seguintes linhas no generate_pass.Yaml arquivo:

- Hosts: Ubuntu20
Usuário: Ansible
tornar verdade
tarefas:
- Nome: verifique se o pwgen está instalado
APT:
Nome: pwgen
Estado: presente
update_cache: true
- Nome: Gere senha
Shell: pwgen -n 1 -s 30
Registro: MyPass
- Nome: Imprima a senha gerada
depurar:
msg: "A senha é mypass"

Depois de terminar, pressione + X, seguido pela Y e , Para salvar o generate_pass.Yaml arquivo.

A linha a seguir diz a Ansible para executar o manual generate_pass.Yaml Em todos os anfitriões no Ubuntu20 grupo. No meu caso, o manual será executado no host VM3.NodeKite.com.

Neste manual, vou definir três tarefas.

A primeira tarefa irá criar que o pwgen o pacote está instalado.

A segunda tarefa gerará uma senha aleatória de 30 caracteres usando o pwgen comando. Vou usar o registro módulo para armazenar a senha gerada no MyPass variável.

A terceira tarefa imprimirá o MyPass variável usando o Ansible depurar módulo.

Execute o manual generate_pass.Yaml Usando o seguinte comando:

$ Ansible-Playbook Playbooks/Generate_pass.Yaml

Como você pode ver, o manual correu com sucesso. Uma senha também foi gerada.

Mas, por que a variável MyPass Imprima tantos itens?

Bem, a variável MyPass é um objeto que contém algumas propriedades importantes.

As propriedades mais importantes de cada um dos registro As variáveis ​​são as seguintes:

cmd - O comando que correu para gerar a saída.

stdout - A saída do comando.

stderr - A saída de erro do comando.

começar - A data e hora em que o comando começou a executar.

fim - A data e a hora em que o comando terminou de executar.

delta - O tempo necessário para executar o comando. Esta é a diferença entre o fim e a começar propriedades.

stdout_lines - Uma matriz contendo cada linha de saída do comando. Igual a stdout, mas stdout separa as linhas usando um novo (\ n) caracteres em vez de matrizes.

stderr_lines - Uma matriz contendo cada linha de saída de erro do comando. Igual a stderr, mas stderr Separa as linhas usando caracteres newlines (\ n) em vez de matrizes.

Se você deseja apenas imprimir/acessar a sequência de senha (que é muito provável), você pode imprimir/acessar o stdout propriedade do MyPass variável em seu manual, conforme marcado na captura de tela abaixo.

$ nano Playbooks/generate_pass.Yaml

Depois de terminar, execute o manual generate_pass.Yaml de novo. Somente a sequência de senha será impressa, como você pode ver na captura de tela abaixo.

Que cobre o básico do Ansible registro módulo.

Exemplo 2: Conteúdo do diretório da loja

Neste exemplo, mostrarei como armazenar o conteúdo de um diretório em uma variável usando o Ansible registro módulo, bem como como iterar sobre eles.

Primeiro, crie o novo manual get_dir_contents.Yaml no Playbooks/ diretório.

$ Nano Playbooks/get_dir_contents.Yaml

Em seguida, digite as seguintes linhas no get_dir_contents.Yaml livro de cantadas:

- Hosts: Ubuntu20
Usuário: Ansible
tornar verdade
tarefas:
- Nome: Liste todos os arquivos e diretórios em /home /Ansible
Shell: LS /Home /Ansible
Registro: DIR_CONTENTS
- Nome: Conteúdo do diretório de impressão usando loops
depurar:
msg: "item"
Loop: "dir_contents.stdout_lines "

Depois de terminar, pressione + X, seguido pela Y e , Para salvar o generate_pass.Yaml arquivo.

Neste manual, vou definir duas tarefas.

A primeira tarefa lista todo o conteúdo do /Home/Ansible diretório e os armazena no DIR_CONTENTES variável.

A segunda tarefa imprime o DIR_CONTENTES variável.

Execute o get_dir_contents.Yaml Playbook, como segue.

$ Ansible-Playbook Playbooks/get_dir_contents.Yaml

Como você pode ver, o stdout_lines A propriedade armazenou o conteúdo do diretório como uma matriz. O stdout A propriedade também é armazenada no conteúdo do diretório. Essas propriedades são separadas por caracteres newline (\ n). Neste exemplo, o stdout_lines A propriedade é fácil de trabalhar com.

Em seguida, itera sobre o conteúdo do diretório usando um loop.

Para fazer isso, abra o get_dir_contents.Yaml Playbook e mude a segunda tarefa, conforme marcado na captura de tela abaixo.

$ Nano Playbooks/get_dir_contents.Yaml

Aqui, estou iterando sobre o DIR_CONTENTES.stdout_lines Array usando um loop e imprimindo os itens da matriz usando o Ansible depurar módulo. Nesta tarefa, o item A variável é uma variável de loop usada para iterar sobre os elementos da matriz.

Execute o get_dir_contents.Yaml Manual, como segue:

$ Ansible-Playbook Playbooks/get_dir_contents.Yaml

Como você pode ver, o conteúdo do /Home/Ansible O diretório é impresso na tela.

Exemplo 3: Diretório de backup

Neste exemplo, mostrarei como fazer backup de um diretório usando o Ansible registro, arquivo, e cópia de módulos.

Primeiro, crie o novo manual backup_home_dir.Yaml no Playbooks/ Diretório, como segue:

$ nano Playbooks/backup_home_dir.Yaml

Em seguida, digite as seguintes linhas no backup_home_dir.Yaml arquivo.

- Hosts: Ubuntu20
Usuário: Ansible
tornar verdade
tarefas:
- Nome: Get Home Directory /Home /Ansible Contents
Shell: LS /Home /Ansible
Registro: DIR_CONTENTS
- Nome: Crie um novo diretório /tmp /Ansible
arquivo:
caminho: /tmp /Ansible
Estado: Diretório
- Nome: Backup Home Directory /Home /Ansible para /TMP /Ansible
cópia de:
src:/home/Ansible/item
dest:/tmp/Ansible/
Remote_src: true
Loop: "dir_contents.stdout_lines

Depois de terminar, pressione + X, seguido pela Y e , Para salvar o backup_home_dir.Yaml arquivo.

Neste manual, vou definir três tarefas.

A primeira tarefa armazena o conteúdo do /Home/Ansible diretório (o diretório que vou fazer backup) no DIR_CONTENTES variável usando o Ansible registro módulo.

A segunda tarefa cria um novo diretório /TMP/ANSIBLE usando o Ansible arquivo módulo. Este é o diretório onde o backup será armazenado.

A terceira tarefa faz um loop através do DIR_CONTENTES.stdout_lines Array e usa o Ansible cópia de módulo para copiar cada diretório para o /TMP/ANSIBLE/ diretório.

Execute o backup_home_dir.Yaml Manual, como segue:

$ Ansible-Playbook Playbooks/backup_home_dir.Yaml

Como você pode ver, no meu Ubuntu 20.04 Host LTS, o backup foi bem -sucedido.

Exemplo 4: Executar ou pular tarefas

Neste exemplo, mostrarei como executar ou pular tarefas, dependendo da variável que você registrou, usando o registro módulo.

Primeiro, crie o novo manual Register_conditions.Yaml no Playbooks/ diretório da seguinte maneira:

$ Nano Playbooks/Register_conditions.Yaml

Em seguida, digite as seguintes linhas no Register_conditions.Yaml arquivo.

- Hosts: Ubuntu20
Usuário: Ansible
tornar verdade
tarefas:
- Nome: conteúdo do diretório da lista
Shell: LS/Home/Ansible/Test3
Registro: DIR_CONTENTS
- Nome: Verifique se o diretório está vazio
depurar:
msg: "Diretório está vazio."
Quando: dir_contents.stdout == ""

Depois de terminar, pressione + X, seguido pela Y e , Para salvar o Register_conditions.Yaml arquivo.

Neste manual, eu defini duas tarefas.

A primeira tarefa armazena o conteúdo do /Home/Ansible/Test3 diretório no DIR_CONTENTES variável.

A segunda tarefa verifica se DIR_CONTENTES.stdout é uma corda vazia ou se o diretório /Home/Ansible/Test3 está vazia. Se o diretório estiver vazio, a mensagem Diretório está vazio irá imprimir.

Execute o Register_conditions.Yaml Manual, como segue:

$ Ansible-Playbook Playbooks/Register_conditions.Yaml

Como você pode ver, o manual correu com sucesso.

Desde o diretório /Home/Ansible/Test3 está vazio, o manual imprimiu a mensagem Diretório está vazio.

Em seguida, crie um novo arquivo no /Home/Ansible/Test3 diretório.

$ touch test3/myfile

Desde o /Home/Ansible/Test3 O diretório não está mais vazio, a tarefa Verifique se o diretório está vazio é ignorado, como você pode ver na captura de tela abaixo.

$ Ansible-Playbook Playbooks/Register_conditions.Yaml

Conclusão

O Ansible registro O módulo é muito útil para automação do servidor. Este artigo mostrou o básico do registro módulo, incluindo exemplos de uso do Ansible registro Módulo para armazenamento e backup de diretórios e tarefas de diretório em execução.