Lee esto en otros idiomas:
English, 日本語, Portugues do Brasil, Française, Español.
Este es el desafío final en el que tratamos de juntar la mayor parte de lo que han aprendido.
A su equipo de operaciones y a su equipo de desarrollo de aplicaciones le gusta lo que ven en Ansible Tower. Para realmente usarlo en su entorno, armaron estos requisitos:
-
Todos los servidores web (
node1
,node2
ynode3
) deben ir en un grupo -
Como los servidores web se pueden utilizar con fines de desarrollo o en producción, tiene que haber una manera de marcarlos adecuadamente como "stage dev" o "stage prod".
- Actualmente se utilizan como sistema de desarrollo el
node1
ynode3
ynode2
como producción.
- Actualmente se utilizan como sistema de desarrollo el
-
Por supuesto, el contenido de la aplicación mundialmente famosa "index.html" será diferente entre las etapas de desarrollo y prod.
-
Debe haber un título en la página que indique el entorno
-
Debe haber un campo de contenido
-
-
El escritor de contenido
wweb
debe tener acceso a una encuesta para cambiar el contenido de los servidores de desarrollo y prod.
Todo el código ya está en su lugar - este es un laboratorio Tower después de todo. Echa un vistazo al repositorio git Workshop Project en https://github.com/ansible/workshop-examples**. Allí encontrará el playbook webcontent.yml
, que llama el role role_webcontent
.
En comparación con el role de instalación de Apache anterior, hay una diferencia importante: ahora hay dos versiones de una plantilla index.html
y una tarea que implementa el archivo de plantilla que tiene una variable como parte del nombre del archivo de origen:
dev_index.html.j2
<body>
<h1>This is a development webserver, have fun!</h1>
{{ dev_content }}
</body>
prod_index.html.j2
<body>
<h1>This is a production webserver, take care!</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
Por supuesto, hay más de una manera de lograr esto, pero esto es lo que debe hacer:
-
Asegúrese de que todos los hosts están en el grupo de inventario
Webserver
. -
Definir una variable
stage
con el valor 'dev' para el inventarioWebserver
:- Añadir
stage: dev
al inventarioWebserver
poniéndolo en el campo VARIABLES debajo de los tres guiones start-yaml.
- Añadir
-
De la misma manera añadir una variable
stage: prod
pero esta vez sólo paranode2
(haciendo clic en el nombre de host) para que anule la variable de inventario.
Consejo
Asegúrese de mantener los tres guiones que marcan el inicio del YAML y la línea
ansible_host
en su lugar!
-
Crear una nueva Job Template denominada '
Create Web Content
que-
se dirige al inventario
Webserver
-
utiliza el Playbook
rhel/apache/webcontent.yml
del proyecto Workshop Project -
Define dos variables:
dev_content: default dev content
yprod_content: default prod content
: en el EXTRA VARIABLES FIELD -
Utiliza
Workshop Credentials
y funciona con escalamiento de privilegios
-
-
Guardar y ejecutar la plantilla
Esta vez utilizamos el poder de Ansible para comprobar los resultados: ejecute curl para obtener el contenido web de cada nodo, orquestado por un comando ad hoc en la línea de comandos de su host de control de Tower:
Consejo
Estamos utilizando la variable
ansible_host
en la DIRECCIÓN URL para acceder a todos los nodos del grupo de inventario.
[student<X>@ansible ~]$ ansible web -m command -a "curl -s http://{{ ansible_host }}"
[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>This is a production webserver, take care!</h1>
prod wweb
</body>
node1 | CHANGED | rc=0 >>
<body>
<h1>This is a development webserver, have fun!</h1>
dev wweb
</body>
node3 | CHANGED | rc=0 >>
<body>
<h1>This is a development webserver, have fun!</h1>
dev wweb
</body>
Observe la advertencia en la primera línea sobre no utilizar curl
a través del módulo command
ya que hay mejores módulos justo dentro de Ansible. Volveremos a eso en la siguiente parte.
-
Añadir una encuesta a la plantilla para permitir cambiar las variables
dev_content
yprod_content
-
Añadir permisos al equipo
Web Content
para que la plantilla Create Web Content se puede ejecutar porwweb
. -
Ejecutar la encuesta como usuario
wweb
Compruebe los resultados de nuevo desde el host de control del Tower. Puesto que recibimos una advertencia la última vez usando curl
a través del módulo command
, esta vez usaremos el módulo uri
dedicado. Como argumentos, necesita la dirección URL real y una bandera para generar el cuerpo en los resultados.
[student<X>ansible ~]$ ansible web -m uri -a "url=http://{{ ansible_host }}/ return_content=yes"
node3 | SUCCESS => {
"accept_ranges": "bytes",
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"connection": "close",
"content": "<body>\n<h1>This is a development webserver, have fun!</h1>\nwerners dev content\n</body>\n",
"content_length": "87",
"content_type": "text/html; charset=UTF-8",
"cookies": {},
"cookies_string": "",
"date": "Tue, 29 Oct 2019 11:14:24 GMT",
"elapsed": 0,
"etag": "\"57-5960ab74fc401\"",
"last_modified": "Tue, 29 Oct 2019 11:14:12 GMT",
"msg": "OK (87 bytes)",
"redirected": false,
"server": "Apache/2.4.6 (Red Hat Enterprise Linux)",
"status": 200,
"url": "http://18.205.236.208"
}
[...]
Advertencia
Solución NO a continuación
Usted ha hecho todos los pasos de configuración requeridos en el laboratorio ya. Si no está seguro, consulte los capítulos respectivos.
¡Felicidades, terminaste tus laboratorios! Esperamos que haya disfrutado de su primer encuentro con Ansible Tower tanto como nosotros disfrutamos creando los laboratorios.
Navegación
Ejercicio anterior
Haga clic aquí para volver al Taller Ansible for Red Hat Enterprise Linux