Open britho opened 3 years ago
Nesta revisão, você instalará o Ansible na workstation, o usará como um nó de controle e o configurará para conectar-se com os hosts gerenciados servera e serverb. Também usará comandos ad hoc para realizar ações em hosts gerenciados.
Resultados
Você deverá ser capaz de:
Instalar o Ansible.
Usar comandos adhoc para realizar ações em hosts gerenciados.
Instruções
Instale e configure o Ansible na workstation. Demonstre que você pode construir os comandos adhoc especificados na lista de critérios para modificar os hosts gerenciados e verificar se as modificações funcionam conforme esperado:
Instale o Ansible na workstation para que possa servir como o nó de controle.
No nó de controle, crie um arquivo de inventário, /home/student/review-deploy/inventory, contendo um grupo chamado dev. Esse grupo deve ser composto pelos hosts gerenciados servera.lab.example.com e serverb.lab.example.com.
Crie o arquivo de configuração do Ansible em /home/student/review-deploy/ansible.cfg. O arquivo de configuração deve apontar para o arquivo de inventário /home/student/review-deploy/inventory.
Execute um comando ad hoc usando o escalonamento de privilégios para modificar o conteúdo do arquivo /etc/motd no servera e no serverb para que ele contenha a string Managed by Ansible\n. Use devops como um usuário remoto.
Execute um comando ad hoc para verificar se o conteúdo do arquivo /etc/motd no servera e o que está no serverb são idênticos.
Faça login na workstation como student usando a senha student.
Na workstation, execute o comando lab review-deploy start. Esse script garante que os hosts gerenciados, servera e serverb, estejam acessíveis na rede. O script cria um subdiretório de laboratório chamado review-deploy no diretório pessoal do aluno.
[student@workstation ~]$ lab review-deploy start
Instale o Ansible na workstation para que possa servir o nó de controle.
[student@workstation ~]$ sudo yum install ansible
[sudo] password for student:
Loaded plugins: langpacks, search-disabled-repos
Resolving Dependencies
--> Running transaction check
...output omitted...
Is this ok [y/d/N]: y
...output omitted...
No nó de controle, crie um arquivo de inventário, /home/student/review-deploy/inventory, contendo um grupo chamado dev. Esse grupo deve ser composto pelos hosts gerenciados servera.lab.example.com e serverb.lab.example.com.
[dev]
servera.lab.example.com
serverb.lab.example.com
Crie o arquivo de configuração do Ansible em /home/student/review-deploy/ansible.cfg. O arquivo de configuração deve fazer referência ao arquivo de inventário /home/student/review-deploy/inventory.
Adicione as entradas a seguir para configurar o arquivo de inventário ./inventory como a fonte de inventário. Salve as alterações e saia do editor de texto.
[defaults]
inventory=./inventory
Execute um comando ad hoc usando o escalonamento de privilégios para modificar o conteúdo do arquivo /etc/motd no servera e no serverb para que contenha a string Managed by Ansible\n. Use devops como o usuário remoto.
[student@workstation review-deploy]$ ansible dev -m copy \
> -a 'content="Managed by Ansible\n" dest=/etc/motd' -b -u devops
servera.lab.example.com | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"checksum": "4458b979ede3c332f8f2128385df4ba305e58c27",
"dest": "/etc/motd",
"gid": 0,
"group": "root",
"md5sum": "65a4290ee5559756ad04e558b0e0c4e3",
"mode": "0644",
"owner": "root",
"secontext": "unconfined_u:object_r:etc_t:s0",
"size": 19,
"src": "/home/devops/.ansible/tmp/...output omitted...",
"state": "file",
"uid": 0
}
serverb.lab.example.com | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"checksum": "4458b979ede3c332f8f2128385df4ba305e58c27",
"dest": "/etc/motd",
"gid": 0,
"group": "root",
"md5sum": "65a4290ee5559756ad04e558b0e0c4e3",
"mode": "0644",
"owner": "root",
"secontext": "system_u:object_r:etc_t:s0",
"size": 19,
"src": "/home/devops/.ansible/tmp/...output omitted...",
"state": "file",
"uid": 0
}
Execute um comando ad hoc para verificar se o conteúdo do arquivo /etc/motd no servera e o que está no serverb são idênticos.
[student@workstation review-deploy]$ ansible dev -m command -a "cat /etc/motd"
servera.lab.example.com | CHANGED | rc=0 >>
Managed by Ansible
serverb.lab.example.com | CHANGED | rc=0 >>
Managed by Ansible
Avaliação
Na workstation, execute o comando lab review-deploy grade para confirmar a conclusão com êxito deste exercício. Corrija todas as falhas relatadas e execute novamente o comando até que ele seja concluído com êxito.
[student@workstation ~]$ lab review-deploy grade
Encerramento
Na workstation, execute o comando lab review-deploy finish para limpar este exercício.
[student@workstation ~]$ lab review-deploy finish
Isso conclui o laboratório.
Nesta análise, você criará três playbooks no diretório de projeto do Ansible, /home/student/review-playbooks
. Um playbook garantirá que o lftp esteja instalado em sistemas que devem ser clientes FTP, um playbook garantirá que vsftpd esteja instalado e configurado em sistemas que devem ser servidores FTP e um playbook (site.yml
) executará os outros dois playbooks.
Resultados
Você deverá ser capaz de:
Criar e executar playbooks para realizar tarefas em hosts gerenciados.
Utilizar templates Jinja2, variáveis e manipuladores em playbooks.
Instruções
Crie um inventário estático review-playbooks/inventory
com serverc.lab.example.com
no grupo ftpclients
e serverb.lab.example.com
e serverd.lab.example.com
no grupo ftpservers
. Crie um arquivo review-playbooks/ansible.cfg
que configure seu projeto do Ansible para usar esse inventário. Pode ser útil consultar o arquivo /etc/ansible/ansible.cfg
do sistema para obter ajuda em relação à sintaxe.
Configure seu projeto do Ansible para se conectar a hosts no inventário usando o usuário remoto, devops
, e o método sudo
de escalonamento de privilégios. Você tem chaves SSH para fazer login como devops
já configuradas. O usuário devops
não precisa de uma senha para escalonamento de privilégios com sudo.
Crie um playbook denominado ftpclients.yml
no diretório review-playbooks
que contenha uma ação direcionada a hosts no grupo de inventário ftpclients
. O playbook deve garantir que o pacote lftp esteja instalado.
Crie um segundo playbook denominado ansible-vsftpd.yml
no diretório review-playbooks
que contenha uma ação direcionada a hosts no grupo de inventário ftpservers
. Ele deve atender aos seguintes requisitos:
Você tem um arquivo de configuração para vsftpd gerado a partir de um template Jinja2. Crie um diretório para templates, review-playbooks/templates
, e copie para ele o arquivo vsftpd.conf.j2
fornecido. Crie o diretório review-playbooks/vars
. Copie o arquivo defaults-template.yml
fornecido, que contém configurações padrão de variáveis usadas para
completar esse template quando ele for implantado, para o diretório review-playbooks/vars
.
Crie um arquivo de variável, review-playbooks/vars/vars.yml
, que defina três variáveis:
No playbook ansible-vsftpd.yml
, use vars_files
para incluir os arquivos de variáveis na ação no diretório review-playbooks/vars
.
Na ação ansible-vsftpd.yml
, crie tarefas que:
Garantam que os pacotes listados pela variável {{ vsftpd_package }}
estejam instalados.
Garantam que o serviço listado pela variável {{ vsftpd_service }}
esteja iniciado e habilitado no momento da inicialização.
Usem o módulo template
para implantar o modelo templates/vsftpd.conf.j2
na localização definida pela variável {{ vsftpd_config_file }}
. O arquivo deve ser de propriedade do usuário root
, grupo root
, ter permissões octais de arquivo 0600 e um tipo SELinux de etc_t
. Notifique um manipulador para que reinicie vsftpd se a tarefa resultar em uma alteração.
Certifique-se de que o pacote firewalld esteja instalado e que o serviço esteja iniciado e ativado. Certifique-se de que firewalld foi configurado para permitir conexões ao serviço ftp de modo imediato e permanente. O intervalo de portas temporário para conexões de dados FTP passivas foi definido como 21000-21020 TCP. Você também precisará adicionar uma permissão para esse intervalo no firewall.
No playbook ansible-vsftpd.yml
, crie um manipulador para reiniciar os serviços listados pela variável {{ vsftpd_service }}
quando for notificado.
Crie um terceiro playbook site.yml
no diretório review-playbooks
. Esse playbook só deve importar os outros dois playbooks.
Siga as práticas recomendadas de playbooks ao nomear todas as suas ações e tarefas. Escreva playbooks usando módulos apropriados e certifique-se de que eles possam ser executados novamente com segurança. Playbooks não devem fazer alterações desnecessárias nos sistemas.
Use o comando ansible-doc para encontrar módulos e informações sobre como usá-los.
Quando terminar, use ansible-playbook site.yml para verificar seu trabalho antes de classificar o script. Você também pode executar os playbooks individuais separadamente para garantir que eles funcionam.
Se você tiver problemas com seu playbook site.yml
, certifique-se de que ansible-vsftpd.yml
e ftpclients.yml
usem recuos consistentes.
Faça login na workstation
como student
usando a senha student
.
Na workstation
, execute o comando lab review-playbooks start.
[student@workstation ~]$
lab review-playbooks start
Com o usuário student
na workstation
, crie o arquivo de inventário /home/student/review-playbooks/inventory
, contendo serverc.lab.example.com
no grupo ftpclients
, bem como serverb.lab.example.com
e serverd.lab.example.com
no grupo ftpservers
.
Mude o diretório para o diretório do projeto do Ansible, /home/student/review-playbooks
, criado pelo script de configuração.
[student@workstation ~]$
cd ~/review-playbooks
Preencha o arquivo inventory
com as entradas a seguir. Depois, salve-o e saia.
[ftpservers] serverb.lab.example.com serverd.lab.example.com [ftpclients] serverc.lab.example.com
Crie o arquivo de configuração do Ansible, /home/student/review-playbooks/ansible.cfg
, e preencha-o com as entradas necessárias para atender a estes requisitos:
Configurar o projeto do Ansible para que use o inventário recém-criado
Conectar-se a hosts gerenciados como usuário devops
Utilizar o escalonamento de privilégios usando sudo como usuário root
Escalonar privilégios para cada tarefa por padrão
[defaults] remote_user = devops inventory = ./inventory [privilege_escalation] become_user = root become_method = sudo become = true
Crie o playbook, /home/student/review-playbooks/ftpclients.yml
, contendo uma ação direcionada a hosts no grupo de inventário ftpclients
e certifique-se de que o pacote lftp esteja instalado.
--- - name: Ensure FTP Client Configuration hosts: ftpclients tasks: - name: latest version of lftp is installed yum: name: lftp state: latest
Coloque o arquivo de configuração, vsftpd.conf.j2
, fornecido no subdiretório templates
.
Crie o subdiretório templates
.
[student@workstation review-playbooks]$
mkdir -v templates
mkdir: created directory 'templates'
Move o arquivo vsftpd.conf.j2
fornecido no subdiretório templates
recentemente criado.
[student@workstation review-playbooks]$
mv -v vsftpd.conf.j2 templates/
renamed 'vsftpd.conf.j2' -> 'templates/vsftpd.conf.j2'
Coloque o arquivo defaults-template.yml
fornecido no subdiretório vars
.
Crie o subdiretório vars
.
[student@workstation review-playbooks]$
mkdir -v vars
mkdir: created directory 'vars'
Move o arquivo defaults-template.yml
fornecido no subdiretório vars
recentemente criado.
[student@workstation review-playbooks]$
mv -v defaults-template.yml vars/
renamed 'defaults-template.yml' -> 'vars/defaults-template.yml'
Crie um arquivo de definição de variável vars.yml
no subdiretório vars
para definir as três variáveis a seguir e seus valores.
vsftpd_package: vsftpd vsftpd_service: vsftpd vsftpd_config_file: /etc/vsftpd/vsftpd.conf
Usando o template Jinja2 e os arquivos de definição de variável recentemente criados, crie um segundo playbook, /home/student/review-playbooks/ansible-vsftpd.yml
, para configurar o serviço vsftpd nos hosts do grupo de inventário ftpservers
.
--- - name: FTP server is installed hosts: - ftpservers vars_files: - vars/defaults-template.yml - vars/vars.yml tasks: - name: Packages are installed yum: name: "{{ vsftpd_package }}" state: present - name: Ensure service is started service: name: "{{ vsftpd_service }}" state: started enabled: true - name: Configuration file is installed template: src: templates/vsftpd.conf.j2 dest: "{{ vsftpd_config_file }}" owner: root group: root mode: 0600 setype: etc_t notify: restart vsftpd - name: firewalld is installed yum: name: firewalld state: present - name: firewalld is started and enabled service: name: firewalld state: started enabled: yes - name: FTP port is open firewalld: service: ftp permanent: true state: enabled immediate: yes - name: FTP passive data ports are open firewalld: port: 21000-21020/tcp permanent: yes state: enabled immediate: yes handlers: - name: restart vsftpd service: name: "{{ vsftpd_service }}" state: restarted
Crie um terceiro playbook, /home/student/review-playbooks/site.yml
, e inclua as ações dos dois playbooks criados anteriormente, ftpclients.yml
e ansible-vsftpd.yml
.
--- # FTP Servers playbook - import_playbook: ansible-vsftpd.yml # FTP Clients playbook - import_playbook: ftpclients.yml
Execute o playbook /home/student/review-playbooks/site.yml
para verificar se ele realiza as tarefas desejadas nos hosts gerenciados.
[student@workstation review-playbooks]$
ansible-playbook site.yml
Isso conclui o laboratório.
Nesta análise, você converterá o playbook ansible-vsftpd.yml
em uma função e, então, usará essa função em um novo playbook que
também executará algumas tarefas adicionais. Você também
instalará e usará o script de inventário, que será fornecido.
Resultados
Você deverá ser capaz de:
Criar uma função para configurar o serviço vsftpd
usando tarefas de um playbook existente.
Incluir uma função em um playbook e executar o playbook.
Usar um inventário dinâmico ao executar um playbook.
Instruções
Configure seu projeto do Ansible para usar o script de inventário dinâmico crinventory.py
e o arquivo de inventário estático inventory
.
Converta o playbook ansible-vsftpd.yml
na função ansible-vsftpd
, conforme especificado abaixo:
Use o comando ansible-galaxy para criar a estrutura de diretório para a função ansible-vsftpd
no diretório review-roles/roles
do seu projeto do Ansible.
O arquivo defaults-template.yml
contém variáveis padrão para a função. Mova esse arquivo
para um local adequado na estrutura de diretório de função.
O arquivo vars.yml
contém variáveis regulares para a função. Mova esse arquivo
para um local adequado na estrutura de diretório de função.
Mova o template vsftpd.conf.j2
para um local adequado na estrutura de diretório de função.
Certifique-se de que as tarefas e os manipuladores no playbook ansible-vsftpd.yml
estejam adequadamente instalados na função.
Edite o arquivo meta/main.yml
da função para definir os campos de autor, descrição e licença (use BSD para a licença). Edite o arquivo README.md
conforme necessário para a integridade.
Remova os subdiretórios da função que você não estiver usando.
Crie um novo playbook, vsftpd-configure.yml
, no diretório review-roles
conforme especificado a seguir.
O playbook deve conter uma ação direcionada a hosts no grupo de inventário ftpservers
.
A ação deverá definir as seguintes variáveis:
A ação deve aplicar a função ansible-vsftpd
.
A ação deve incluir as seguintes tarefas na ordem especificada:
Use o módulo command
para criar um rótulo de disco GPT em /dev/vdb
que inicie com 1MiB no começo do dispositivo e termine no final do dispositivo. Use o comando ansible-doc para aprender a usar o argumento creates
para ignorar essa tarefa se /dev/vdb1
já estiver criado. Isso evita o reparticionamento
destrutivo do dispositivo. Use o comando a seguir para
criar a partição: parted --script /dev/vdb mklabel gpt mkpart primary 1MiB 100%
Certifique-se de que haja um diretório /mnt/share
para ser usado como um ponto de montagem.
Use ansible-doc -l para encontrar um módulo que possa fazer um sistema de arquivos em um dispositivo de bloco. Use ansible-doc
para aprender a usar esse módulo. Adicione uma tarefa
ao playbook que use esse módulo para criar um sistema de arquivos XFS em
/dev/vdb1
. Não force a criação desse sistema de arquivos se já existir um.
Adicione uma tarefa para garantir que /etc/fstab
monte o dispositivo /dev/vdb1
em /mnt/share
no boot e que esteja atualmente montado. Use o comando ansible-doc
para encontrar um módulo que possa montar o dispositivo.
Se essa tarefa tiver um resultado alterado, notifique o manipulador da
função ansible-vsftpd
que reinicia o vsftpd.
Adicione uma tarefa que garanta que o diretório /mnt/share
seja de propriedade do usuário root
e do grupo root
, tenha o tipo SELinux definido na variável {{ vsftpd_setype }}
da função e tenha permissões octais de 0755. Essa tarefa
deve ser executada depois que o sistema de arquivos estiver montado a
fim de definir as permissões no sistema de arquivos montado, e não no
diretório de ponto de montagem de espaço reservado.
Certifique-se de que um arquivo denominado README
exista no diretório especificado por {{ vsftpd_anon_root }}
contendo a string Welcome to the FTP server at server
em que X
.lab.example.comserver
é o nome do host totalmente qualificado real desse servidor.
Esse arquivo deve ter permissões octais de 0644 e o tipo SELinux
especificado pela variável X
.lab.example.com{{ vsftpd_setype }}
. (Dica: observe os módulos copy
ou template
e os fatos disponíveis do Ansible para resolver esse problema.)
Pode ser útil depurar a função testando-a em um playbook que
não contenha as tarefas adicionais ou variáveis de playbook listadas
acima, mas, em vez disso, contenha uma ação que é direcionada apenas aos
hosts no grupo ftpservers
e que aplica a função.
Depois de confirmar que um playbook simplificado usando apenas a função funciona exatamente como o playbook ansible-vsftpd.yml
original, você pode compilar o playbook vsftpd-configure.yml
completo acrescentando as variáveis e tarefas adicionais especificadas acima.
Altere o playbook review-roles/site.yml
para que use o novo playbook vsftpd-configure.yml
em vez do ansible-vsftpd.yml
.
Siga as práticas recomendadas de playbooks ao nomear todas as suas ações e tarefas. Escreva playbooks usando módulos apropriados e certifique-se de que eles possam ser executados novamente com segurança. Playbooks não devem fazer alterações desnecessárias nos sistemas.
Quando terminar, use ansible-playbook site.yml para verificar seu trabalho antes de classificar o script. Você também pode executar os playbooks individuais separadamente para garantir que eles funcionam.
Se você tiver problemas com seu playbook site.yml
, certifique-se de que vsftpd-configure.yml
e ftpclients.yml
usem recuos consistentes.
Faça login na workstation
como student
usando a senha student
.
Na workstation
, execute o comando lab review-roles start.
Esse script garante que os hosts remotos sejam acessíveis na
rede. O script também verifica se o Ansible está instalado na workstation
, cria uma estrutura de diretório para o ambiente de laboratório e instala os arquivos de laboratório necessários.
[student@workstation ~]$
lab review-roles start
Mude para o diretório de trabalho review-roles
. Configure o projeto do Ansible para usar o arquivo de inventário dinâmico crinventory.py
e o arquivo de inventário estático inventory
. Verifique a configuração do inventário usando o comando ansible-inventory.
Coloque o arquivo de inventário estático em um diretório chamado inventory
.
[student@workstation ~]$
cd ~/review-roles
[student@workstation review-roles]$
mv -v inventory inventory.tmp
renamed 'inventory' -> 'inventory.tmp'[student@workstation review-roles]$
mkdir -v inventory
mkdir: created directory 'inventory'[student@workstation review-roles]$
mv -v inventory.tmp inventory/inventory
renamed 'inventory.tmp' -> 'inventory/inventory'
Adicione o script de inventário dinâmico ao diretório de inventário. Certifique-se de que o script seja executável.
[student@workstation review-roles]$
chmod 755 -v crinventory.py
mode of 'crinventory.py' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)[student@workstation review-roles]$
mv -v crinventory.py inventory/
renamed 'crinventory.py' -> 'inventory/crinventory.py'
Configure o diretório inventory
como a origem dos arquivos de inventário do projeto.
A seção [defaults]
do arquivo ansible.cfg
se parece com isso:
[defaults] remote_user=devops inventory=./inventory
Use o comando ansible-inventory para verificar a configuração de inventário do projeto:
[student@workstation review-roles]$
ansible-inventory --list all
{ "_meta": { "hostvars": { "servera.lab.example.com": {}, "serverb.lab.example.com": {}, "serverc.lab.example.com": {}, "serverd.lab.example.com": {} } }, "all": { "children": [ "ftpclients", "ftpservers", "ungrouped" ] }, "ftpclients": { "hosts": [ "servera.lab.example.com", "serverc.lab.example.com" ] }, "ftpservers": { "hosts": [ "serverb.lab.example.com", "serverd.lab.example.com" ] } }
Converta o playbook ansible-vsftpd.yml
na função ansible-vsftpd
.
Crie o subdiretório roles
.
[student@workstation review-roles]$
mkdir -v roles
mkdir: created directory 'roles'
Usando ansible-galaxy, crie a estrutura de diretório para a nova função ansible-vsftpd
no subdiretório roles
.
[student@workstation review-roles]$
cd roles
[student@workstation roles]$
ansible-galaxy init ansible-vsftpd
- ansible-vsftpd was created successfully[student@workstation roles]$
cd ..
[student@workstation review-roles]$
Usando tree, verifique a estrutura do diretório criado para a nova função.
[student@workstation review-roles]$
tree roles
roles └── ansible-vsftpd ├── defaults │ └── main.yml ├── files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── README.md ├── tasks │ └── main.yml ├── templates ├── tests │ ├── inventory │ └── test.yml └── vars └── main.yml 9 directories, 8 files
Substitua o arquivo roles/ansible-vsftpd/defaults/main.yml
pelas definições da variável no arquivo defaults-template.yml
.
[student@workstation review-roles]$
mv -v defaults-template.yml \
>
roles/ansible-vsftpd/defaults/main.yml
renamed 'defaults-template.yml' -> 'roles/ansible-vsftpd/defaults/main.yml'
Substitua o arquivo roles/ansible-vsftpd/vars/main.yml
pelas definições da variável no arquivo vars.yml
.
[student@workstation review-roles]$
mv -v vars.yml \
>
roles/ansible-vsftpd/vars/main.yml
renamed 'vars.yml' -> 'roles/ansible-vsftpd/vars/main.yml'
Use o arquivo templates/vsftpd.conf.j2
como um template para a função ansible-vsftpd
.
[student@workstation review-roles]$
mv -v vsftpd.conf.j2 \
>
roles/ansible-vsftpd/templates/
renamed 'vsftpd.conf.j2' -> 'roles/ansible-vsftpd/templates/vsftpd.conf.j2'
Copie as tarefas do playbook ansible-vsftpd.yml
para o arquivo roles/ansible-vsftpd/tasks/main.yml
. O valor da palavra-chave src
na tarefa do módulo template
não precisa mais referenciar o subdiretório templates
. O arquivo roles/ansible-vsftpd/tasks/main.yml
deve conter o seguinte quando você terminar.
--- # tasks file for ansible-vsftpd - name: Packages are installed yum: name: '{{ vsftpd_package }}' state: present - name: Ensure service is started service: name: '{{ vsftpd_service }}' state: started enabled: true - name: Configuration file is installed template: src: vsftpd.conf.j2 dest: '{{ vsftpd_config_file }}' owner: root group: root mode: '0600' setype: etc_t notify: restart vsftpd - name: firewalld is installed yum: name: firewalld state: present - name: firewalld is started and enabled service: name: firewalld state: started enabled: yes - name: FTP port is open firewalld: service: ftp permanent: true state: enabled immediate: yes - name: Passive FTP data ports allowed through the firewall firewalld: port: 21000-21020/tcp permanent: yes state: enabled immediate: yes
Copie os manipuladores do playbook ansible-vsftpd.yml
para o arquivo roles/ansible-vsftpd/handlers/main.yml
. O arquivo roles/ansible-vsftpd/handlers/main.yml
deve conter o seguinte quando você terminar.
--- # handlers file for ansible-vsftpd - name: restart vsftpd service: name: "{{ vsftpd_service }}" state: restarted
Atualize o conteúdo do arquivo roles/ansible-vsftpd/meta/main.yml
.
Altere o valor da entrada author
para Red Hat Training
.
author: Red Hat Training
Altere o valor da entrada description
para "example role for RH294
".
description: example role for RH294
Altere o valor da entrada company
para "Red Hat
".
company: Red Hat
Altere o valor da entrada license:
para "BSD
".
license: BSD
Modifique o conteúdo do arquivo roles/ansible-vsftpd/README.md
para que ele ofereça informações pertinentes em relação à função.
Após a modificação, o arquivo deverá ter o conteúdo a seguir.
ansible-vsftpd ========= Example ansible-vsftpd role from Red Hat's "Linux Automation" (RH294) course. Role Variables -------------- * defaults/main.yml contains variables used to configure the vsftpd.conf template * vars/main.yml contains the name of the vsftpd service, the name of the RPM package, and the location of the service's configuration file Dependencies ------------ None. Example Playbook ---------------- - hosts: servers roles: - ansible-vsftpd License ------- BSD Author Information ------------------ Red Hat (training@redhat.com)
Remova os diretórios não utilizados da nova função.
[student@workstation review-roles]$
rm -rvf roles/ansible-vsftpd/tests
removed 'roles/ansible-vsftpd/tests/inventory' removed 'roles/ansible-vsftpd/tests/test.yml' removed directory: 'roles/ansible-vsftpd/tests/'
Crie o novo playbook vsftpd-configure.yml
. Ele deve ter o conteúdo a seguir.
--- - name: Install and configure vsftpd hosts: ftpservers vars: vsftpd_anon_root: /mnt/share/ vsftpd_local_root: /mnt/share/ roles: - ansible-vsftpd tasks: - name: /dev/vdb1 is partitioned command: > parted --script /dev/vdb mklabel gpt mkpart primary 1MiB 100% args: creates: /dev/vdb1 - name: XFS file system exists on /dev/vdb1 filesystem: dev: /dev/vdb1 fstype: xfs force: yes - name: anon_root mount point exists file: path: '{{ vsftpd_anon_root }}' state: directory - name: /dev/vdb1 is mounted on anon_root mount: name: '{{ vsftpd_anon_root }}' src: /dev/vdb1 fstype: xfs state: mounted dump: '1' passno: '2' notify: restart vsftpd - name: Make sure permissions on mounted fs are correct file: path: '{{ vsftpd_anon_root }}' owner: root group: root mode: '0755' setype: "{{ vsftpd_setype }}" state: directory - name: Copy README to the ftp anon_root copy: dest: '{{ vsftpd_anon_root }}/README' content: "Welcome to the FTP server at {{ ansible_fqdn }}\n" setype: '{{ vsftpd_setype }}'
Altere o playbook site.yml
para que use o playbook vsftpd-configure.yml
recentemente criado em vez do playbook ansible-vsftpd.yml
.
--- # FTP Servers playbook - import_playbook: vsftpd-configure.yml # FTP Clients playbook - import_playbook: ftpclients.yml
Verifique se o playbook site.yml
está funcionando como previsto executando-o com ansible-playbook.
[student@workstation review-roles]$
ansible-playbook site.yml
Isso conclui o laboratório.
Depois de concluir esta seção, você deverá ser capaz de usar ansible-config para descobrir e investigar opções de configuração e determinar quais opções foram modificadas em relação às configurações padrão.
Exibição das opções de configuração
Se você quiser descobrir quais opções estão disponíveis no arquivo de configuração, use o comando ansible-config list. Ele exibirá uma lista abrangente com as opções de configuração disponíveis e suas configurações padrão. Essa lista pode variar dependendo da versão do Ansible que você instalou e se você tem plugins adicionais do Ansible em seu nó de controle.
Cada opção exibida por ansible-config list
terá um número de pares chave-valor associados a ela. Esses
pares chave-valor fornecem informações sobre como essa opção funciona.
Por exemplo, a opção ACTION_WARNINGS
exibe os seguintes pares chave-valor:
Definição de opções de configuração modificadas
Ao trabalhar com arquivos de configuração, você pode querer descobrir quais opções foram definidas para valores diferentes dos padrões integrados.
É possível fazer isso executando o comando ansible-config dump -v -\-only-changed. A opção -v
exibe a localização do arquivo ansible.cfg
usado ao processar o comando. O comando ansible-config segue a mesma ordem de precedência mencionada anteriormente para o comando ansible. A saída variar dependendo da localização do arquivo ansible.cfg
e do diretório no qual o comando ansible-config é executado.
No exemplo a seguir, há um único arquivo de configuração ansible localizado em /etc/ansible/ansible.cfg
. Primeiro, o comando ansible-config é executado a partir do diretório pessoal do aluno e, em seguida, de um diretório de trabalho com os mesmos resultados:
[user@controlnode ~]$
ansible-config dump -v -\-only-changed
Using/etc/ansible/ansible.cfg
as config file DEFAULT_ROLES_PATH(/etc/ansible/ansible.cfg) = [u'/etc/ansible/roles', u'/usr/share/ansible/roles'][user@controlnode ~]$
cd /home/student/workingdirectory
[user@controlnode workingdirectory]$
ansible-config dump -v -\-only-changed
Using/etc/ansible/ansible.cfg
as config file DEFAULT_ROLES_PATH(/etc/ansible/ansible.cfg) = [u'/etc/ansible/roles', u'/usr/share/ansible/roles']
No entanto, se você tiver um arquivo ansible.cfg
personalizado em seu diretório de trabalho, o mesmo comando exibirá
informações com base no local onde ele é executado e no arquivo ansible.cfg
relacionado.
[user@controlnode ~]$
ansible-config dump -v -\-only-changed
Using/etc/ansible/ansible.cfg
as config file DEFAULT_ROLES_PATH(/etc/ansible/ansible.cfg) = [u'/etc/ansible/roles', u'/usr/share/ansible/roles'][user@controlnode ~]$
cd /home/student/workingdirectory
[user@controlnode workingdirectory]$
cat ansible.cfg
[defaults] inventory = ./inventory remote_user = devops[user@controlnode workingdirectory]$
ansible-config dump -v -\-only-changed
Using/home/student/workingdirectory/ansible.cfg
as config file DEFAULT_HOST_LIST(/home/student/workingdirectory/ansible.cfg) = [u'/home/student/workingdirectory/inventory'] DEFAULT_REMOTE_USER(/home/student/workingdirectory/ansible.cfg) = devops
Página do man ansible-config(1)
Algumas partes deste curso foram adaptadas do projeto Ansible Lightbulb. O material original desse projeto está disponível em https://github.com/ansible/lightbulb na seguinte seção de licença do MIT:
Copyright 2017 Red Hat, Inc.
A declaração de direitos autorais acima, assim como esta declaração de permissão, deverá ser incluída em todas as cópias ou partes substanciais do software.
Pelo presente instrumento, é dada permissão, livre de encargos, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software") para negociar o Software incluindo, sem limitações, os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou vender cópias do Software e de autorizar indivíduos a quem o Software for fornecido a fazer o que foi previamente dito, estando sujeitos às seguintes condições:
A declaração de direitos autorais acima, assim como esta declaração de permissão, deverá ser incluída em todas as cópias ou partes substanciais do software.
O SOFTWARE É FORNECIDO NO ESTADO EM QUE SE ENCONTRA, SEM GARANTIAS DE QUALQUER NATUREZA, EXPRESSAS OU IMPLÍCITAS, INCLUINDO, MAS NÃO SE LIMITANDO A, GARANTIAS DE COMERCIABILIDADE, DE ADEQUAÇÃO A UM PROPÓSITO EM PARTICULAR E DE NÃO VIOLAÇÃO. EM HIPÓTESE ALGUMA OS AUTORES OU DETENTORES DOS DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO, DANOS OU OUTRAS OBRIGAÇÕES, SEJA EM UMA AÇÃO CONTRATUAL, ATO CIVIL ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, REFERENTE A OU EM CONEXÃO COM O SOFTWARE, SEU USO OU OUTRAS OPERAÇÕES COMERCIAIS RELACIONADAS AO SOFTWARE.
Objetivos
Depois de concluir esta seção, você deverá ser capaz de demonstrar proficiência com o conhecimento e as habilidades adquiridas em Red Hat System Administration III: Linux Automation.
Revisão do RedHat System Administration III: Linux Automation
Para iniciar a revisão abrangente deste curso, você precisa estar familiarizado com os tópicos abordados em cada capítulo.
Consulte as seções anteriores do material didático para estudo adicional.
Descrever os conceitos fundamentais do Ansible e como ele é usado, assim como instalar o RedHat Ansible Engine.
Descrever a motivação para automatizar as tarefas de administração do Linux com o Ansible, conceitos fundamentais do Ansible e sua arquitetura básica.
Instalar o Ansible em um nó de controle e descrever a diferença entre a comunidade do Ansible e o RedHat Ansible Engine.
Configurar o Ansible para gerenciar hosts e executar comandos ad hoc do Ansible.
Descrever os conceitos do inventário do Ansible e gerenciar um arquivo de inventário estático.
Descrever onde os arquivos de configuração do Ansible estão localizados, como o Ansible seleciona esses arquivos e editá-los para aplicar alterações às configurações padrão.
Executar uma só tarefa de automação do Ansible usando um comando ad hoc e explicar alguns casos de uso de comandos ad hoc.
Escrever um playbook do Ansible simples e executá-lo para automatizar tarefas em vários hosts.
Escrever um playbook do Ansible básico e executá-lo usando o comando ansible-playbook.
Escrever um playbook que usa múltiplas ações e escalonamento de privilégios por ação.
Usar ansible-doc de maneira eficaz a fim de aprender a usar novos módulos para implementar tarefas em uma ação.
Escrever playbooks que usem variáveis para simplificar o gerenciamento do playbook e fatos para fazer referência a informações sobre os hosts gerenciados.
Criar e fazer referência a variáveis que afetam determinados hosts ou grupos de hosts, a ação ou o ambiente global, além de descrever como funciona a precedência de variáveis.
Criptografar variáveis confidenciais usando o Ansible Vault e executar os playbooks que fazem referência aos arquivos com variáveis criptografadas pelo Vault.
Fazer referência a dados sobre hosts gerenciados usando fatos do Ansible e configurar fatos personalizados em hosts gerenciados.
Gerenciar erros de controle de tarefas, manipuladores e tags nos playbooks do Ansible.
Implementar loops para escrever tarefas eficientes para controlar quando as tarefas são executadas.
Implementar uma tarefa que seja executada apenas quando outra tarefa alterar o host gerenciado.
Controlar o que acontece quando há falha em uma tarefa e quais condições fazem com que uma tarefa falhe.
Implantar, gerenciar e ajustar arquivos em hosts gerenciados pelo Ansible.
Criar, instalar, editar e remover arquivos em hosts gerenciados, além de gerenciar permissões, propriedade, contexto do SELinux e outras características desses arquivos.
Personalizar arquivos usando templates Jinja2 e implantá-los em hosts gerenciados.
Escrever playbooks otimizados para projetos maiores e mais complexos.
Escrever padrões de host sofisticados a fim de selecionar hosts com eficiência para uma ação ou um comando ad hoc.
Descrever a natureza e a finalidade dos inventários dinâmicos, além de instalar e usar um script existente como uma fonte de inventário dinâmico do Ansible.
Ajustar o número de conexões simultâneas abertas pelo Ansible para hosts gerenciados e como o Ansible processa grupos de hosts gerenciados por meio das tarefas da ação.
Gerenciar playbooks grandes importando ou incluindo playbooks e tarefas de arquivos externos, seja incondicionalmente ou com base em um teste condicional.
Usar funções do Ansible para desenvolver playbooks com mais rapidez e reutilizar o código do Ansible.
Descrever o que é uma função, como ela está estruturada e como usá-la em um playbook.
Criar uma função no diretório do projeto de um playbook e executá-la como parte de uma das ações no playbook.
Selecionar e recuperar funções do Ansible Galaxy ou de outras fontes, como um repositório Git, e usá-las em seus playbooks.
Escrever playbooks que aproveitem as funções do sistema do RedHat EnterpriseLinux para executar operações padrão.
Solucionar problemas de playbooks e hosts gerenciados.
Solucione problemas genéricos com um novo playbook e repare-os.
Solucione falhas em hosts gerenciados ao executar um playbook.
Automatizar tarefas comuns de administração de sistemas Linux com o Ansible.
Registrar sistemas, configurar canais e repositórios de software e gerenciar pacotes RPM em hosts gerenciados.
Gerenciar usuários e grupos do Linux, configurar SSH e modificar a configuração do Sudo em hosts gerenciados.
Gerenciar a inicialização de serviços, agendar processos com at, cron e systemd, reinicializar e controlar o destino de inicialização padrão em hosts gerenciados.
Particionar dispositivos de armazenamento, configurar o LVM, formatar partições ou volumes lógicos, montar sistemas de arquivos e adicionar arquivos ou espaços de troca.