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
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
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: ubuntu20usuá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
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: ubuntu20usuá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
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.yamlComo 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.yamlComo 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: ubuntu20usuá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
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: ubuntu20usuá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
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.yamlComo 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.