Leia em outras linguagens:
English, 日本語, Portugues do Brasil, Française, Español.
Esse é o desafio final em que tentamos reunir a maior parte do que você aprendeu.
Sua equipe de operações e sua equipe de desenvolvimento de aplicações gostam do que vêem no Tower. Para realmente usá-lo em seu ambiente, eles reuniram esses requisitos:
-
Todos os servidores web (
node1
,node2
enode3
) devem entrar em um grupo -
Como os servidores web podem ser usados para fins de desenvolvimento ou produção, é necessário que haja uma maneira de sinalizá-los como "stage dev" ou "stage prod".
- Atualmente, o
node1
é usado como de desenvolvimento e onode2
em produção.
- Atualmente, o
-
Obviamente, o conteúdo de "index.html" será diferente entre os estágios dev e prod.
-
Deve haver um título na página informando o ambiente
-
Deve haver um campo de conteúdo
-
-
O escritor de conteúdo
wweb
deve ter acesso a uma pesquisa para alterar o conteúdo dos servidores de desenvolvimento e prod.
Todo o código já está no lugar - afinal, este é um laboratório da Tower. Confira o repositório git Workshop Project em https://github.com/ansible/workshop-examples. Lá você encontrará o Plabook webcontent.yml
, que chama a role role_webcontent
.
Comparado à role de instalação anterior do Apache, há uma grande diferença: agora existem duas versões de um playbook index.html
e uma task de implantar o arquivo de template que possui uma variável como parte do nome do arquivo de origem:
dev_index.html.j2
<body>
<h1>Esse eh um servidor web de desenvolvimento, divirta-se!</h1>
{{ dev_content }}
</body>
prod_index.html.j2
<body>
<h1>Esse eh um servidor web de producao, tenha cuidado!</h1>
{{ prod_content }}
</body>
main.yml
[...]
- name: Deploy index.html from template
template:
src: "{{ stage }}_index.html.j2"
dest: /var/www/html/index.html
notify: apache-restart
É claro que há mais de uma maneira de conseguir isso, mas aqui está o que você deve fazer:
-
Verifique se todos os hosts estão no grupo de inventário
Webserver
. -
Defina uma variável
stage
com o valordev
para o inventárioWebserver
:- Adicione
stage: dev
ao inventárioWebserver
, colocando-o no campo VARIABLES abaixo dos três traços start-yaml.
- Adicione
-
Da mesma forma, adicione uma variável
stage: prod
, mas desta vez apenas paranode2
(clicando no nome do host) para que ela substitua a variável de inventário.
Dica
Certifique-se de manter os três traços que marcam o início do YAML!
-
Crie um novo Job Template chamado
Create Web Content
que:-
segmenta o inventário do
Webserver
-
usa o Playbook
rhel/apache/webcontent.yml
do novo projeto Exemplos Ansible Workshop -
Define duas variáveis:
dev_content: default dev content
eprod_content: default prod content
no EXTRA VARIABLES FIELD -
Usa
Credenciais Workshop
e executa com escalação de privilégios
-
-
Salve e execute o template
Desta vez, usamos o poder do Ansible para verificar os resultados: execute curl em cada nó localmente, orquestrado por um comando ad-hoc na linha de comando:
$ ansible web -m command -a "curl -s http://localhost:80"
[WARNING]: Consider using the get_url or uri module rather than running 'curl'. If you need to use command because get_url or uri is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
node2 | CHANGED | rc=0 >>
<body>
<h1>Esse eh um servidor web de producao, tenha cuidado!</h1>
prod wweb
</body>
node1 | CHANGED | rc=0 >>
<body>
<h1>Esse eh um servidor web de desenvolvimento, divirta-se!</h1>
dev wweb
</body>
node3 | CHANGED | rc=0 >>
<body>
<h1>Esse eh um servidor web de desenvolvimento, divirta-se!</h1>
dev wweb
</body>
Observe o aviso na primeira linha sobre não usar o curl
através do módulo command
, pois existem módulos melhores dentro do Ansible. Voltaremos a isso na próxima parte.
-
Adicione uma survey ao template para permitir alterar as variáveis
dev_content
eprod_content
-
Adicione permissões ao Team
Web Content
para que o Template Create Web Content possa ser executado porwweb
. -
Execute a survey como usuário
web
Verifique os resultados. Desde que recebemos um aviso da última vez usando curl
através do módulo command
, desta vez usaremos o módulo uri
dedicado. Como argumentos, ele precisa da URL real e de um sinalizador para exibir o corpo nos resultados.
$ ansible web -m uri -a "url=http://{{ ansible_host }}/ return_content=yes"
node2 | SUCCESS => {
"accept_ranges": "bytes",
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"connection": "close",
"content": "<body>\n<h1>Esse eh um servidor web de producao, tenha cuidado!</h1>\nprod wweb\n</body>\n",
"content_length": "77",
"content_type": "text/html; charset=UTF-8",
"cookies": {},
"cookies_string": "",
"date": "Wed, 10 Jul 2019 22:15:45 GMT",
"elapsed": 0,
"etag": "\"4d-58d5aef2a5666\"",
"last_modified": "Wed, 10 Jul 2019 22:09:42 GMT",
"msg": "OK (77 bytes)",
"redirected": false,
"server": "Apache/2.4.6 (Red Hat Enterprise Linux)",
"status": 200,
"url": "http://localhost"
}
[...]
ATENÇÃO
A solução não está abaixo
Você já executou todas as etapas de configuração necessárias no laboratório. Se não tiver certeza, basta consultar os respectivos capítulos.
Parabéns, você terminou seus laboratórios! Esperamos que você tenha gostado do seu primeiro encontro com o Ansible Tower, tanto quanto gostamos de criar os laboratórios.
Clique aqui para retornar ao Workshop Ansible for Red Hat Enterprise Linux