Ansible

Como usar o módulo Ansible Register

Como usar o módulo Ansible Register
No Ansible, você pode executar qualquer comando shell em seus hosts Ansible, os hosts que você configurará com Ansible. Esses comandos de 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, você pode usar o Ansible registro módulo. Este artigo mostrará como usar o Ansible registro módulo para armazenar a saída do comando em uma variável e acessá-la mais tarde em seu manual do Ansible.

Pré-requisitos

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

1) Tenha o Ansible instalado em seu computador.

2) Ter um host Ubuntu 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.

Configurando um Diretório de Projeto

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

Para criar o diretório do projeto register-demo / e todos os subdiretórios necessários (em seu diretório de trabalho atual), execute o seguinte comando:

$ mkdir -pv register-demo / playbooks

Depois que o diretório do projeto for criado, navegue até o diretório do projeto, da seguinte maneira:

$ cd register-demo /

Criar uma hospedeiros arquivo de inventário, como segue:

hosts $ nano

Adicione o IP do host ou o nome DNS do seu host Ubuntu no arquivo de inventário (um host por linha), conforme mostrado na imagem abaixo.

Aqui, adicionei meu Ubuntu 20.04 LTS host vm3.nodekite.com no ubuntu20 grupo.

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

Crie um arquivo de configuração Ansible ansible.cfg no diretório do seu projeto, da seguinte maneira:

$ nano ansible.cfg

Em seguida, digite as seguintes linhas no ansible.cfg Arquivo:

[padrões]
inventário = hosts
host_key_checking = False

Quando terminar, salve o ansible.cfg arquivo pressionando + X, seguido pela Y e .

Agora, tente executar o ping em seu host Ubuntu, da seguinte maneira:

$ ansible ubuntu20 -u ansible -m ping

Como você pode ver, meu Ubuntu 20.04 hospedeiro vm3.nodekite.com é acessível.

Exemplo 1: o básico

Neste exemplo, vou mostrar alguns dos princípios básicos do Ansible registro módulo. Vou usar o 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 imprimir a senha na tela.

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

$ nano playbooks / generate_pass.yaml

Digite as seguintes linhas no generate_pass.yaml Arquivo:

- hosts: ubuntu20
usuário: ansible
tornar verdade
tarefas:
- nome: Certifique-se de que o pwgen está instalado
apt:
nome: pwgen
estado: presente
update_cache: True
- nome: Gerar senha
shell: pwgen -N 1 -s 30
registrar: mypass
- nome: Imprime a senha gerada
depurar:
msg: "A senha é mypass"

Quando terminar, pressione + X, seguido pela Y e , para salvar o generate_pass.yaml Arquivo.

A linha a seguir diz ao Ansible para executar o manual generate_pass.yaml em cada host 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 garantirá que o pwgen pacote está instalado.

A segunda tarefa irá 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 irá 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 foi executado com sucesso. Uma senha também foi gerada.

Mas, por que a variável mypass imprimir 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 executado 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 ser executado.

fim - A data e hora em que o comando terminou de ser executado.

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

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

stderr_lines -  Um array contendo cada linha de saída de erro do comando. Igual a stderr, mas stderr separa as linhas usando caracteres de nova linha (\ n) em vez de matrizes.

Se você quiser apenas imprimir / acessar a string de senha (o 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

Quando terminar, execute o manual generate_pass.yaml novamente. Apenas a string da senha será impressa, como você pode ver na imagem abaixo.

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

Exemplo 2: Armazenar conteúdo do diretório

Neste exemplo, vou mostrar como armazenar o conteúdo de um diretório em uma variável usando o Ansible registro módulo, bem como como iterá-los.

Primeiro, crie o novo manual get_dir_contents.yaml no manuais / 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: lista todos os arquivos e diretórios em / home / ansible
shell: ls / home / ansible
registrar: dir_contents
- nome: Imprime o conteúdo do diretório usando loops
depurar:
msg: "item"
loop: "dir_contents.stdout_lines "

Quando 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_contents variável.

A segunda tarefa imprime o dir_contents variável.

Execute o get_dir_contents.yaml manual, como segue.

$ ansible-playbook playbooks / get_dir_contents.yaml

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

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

Para fazer isso, abra o get_dir_contents.yaml playbook e alterar a segunda tarefa, conforme marcado na imagem abaixo.

$ nano playbooks / get_dir_contents.yaml

Aqui, estou iterando sobre o dir_contents.stdout_lines array usando um loop e imprimindo os itens do array usando o Ansible depurar módulo. Nesta tarefa, o item 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 diretório são impressos na tela.

Exemplo 3: diretório de backup

Neste exemplo, vou mostrar 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 manuais / diretório, da seguinte forma:

$ 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: obtém o diretório inicial / conteúdo inicial / ansible
shell: ls / home / ansible
registrar: dir_contents
- nome: Crie um novo diretório / tmp / ansible
Arquivo:
caminho: / tmp / ansible
estado: diretório
- nome: Backup do diretório inicial / home / ansible para / tmp / ansible
cópia de:
src: / home / ansible / item
dest: / tmp / ansible /
remote_src: True
loop: "dir_contents.stdout_lines

Quando 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 do qual irei fazer backup) no dir_contents 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 percorre o dir_contents.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 ignorar tarefas

Neste exemplo, vou mostrar 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 manuais / diretório da seguinte forma:

$ 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: lista o conteúdo do diretório
shell: ls / home / ansible / test3
registrar: dir_contents
- nome: Verifique se o diretório está vazio
depurar:
msg: "O diretório está vazio."
quando: dir_contents.stdout == ""

Quando terminar, pressione + X, seguido pela Y e , para salvar o register_conditions.yaml Arquivo.

Neste manual, defini duas tarefas.

A primeira tarefa armazena o conteúdo do / home / ansible / test3 diretório no dir_contents variável.

A segunda tarefa verifica se dir_contents.stdout é uma string 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 foi executado 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 diretório não está mais vazio, a tarefa Verifique se o diretório está vazio é ignorado, como você pode ver na imagem abaixo.

$ ansible-playbook playbooks / register_conditions.yaml

Conclusão

The Ansible registro módulo é muito útil para automação de servidor. Este artigo mostrou a você o básico do registro módulo, incluindo exemplos de uso do Ansible registro módulo para armazenamento e backup de diretório, e para executar tarefas de diretório.

Ferramentas úteis para jogadores de Linux
Se você gosta de jogar no Linux, é provável que tenha usado aplicativos e utilitários como Wine, Lutris e OBS Studio para melhorar a experiência de jo...
Jogos HD Remasterizados para Linux que nunca tiveram uma versão Linux anterior
Muitos desenvolvedores e editores de jogos estão apresentando remasterização em HD de jogos antigos para estender a vida da franquia, por favor, os fã...
Como usar o AutoKey para automatizar jogos Linux
AutoKey é um utilitário de automação de desktop para Linux e X11, programado em Python 3, GTK e Qt. Usando sua funcionalidade de script e MACRO, você ...