Este artículo contiene módulos
- error
- etiquetas
- manipuladores
- cuando
- Registrarse
- depurar
- with_items
- incluir y roles
+++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++
Error de módulo
- Manejo de errores de Ansible-playbook
-el juicio predeterminado es $ ?. Si el valor no es 0, detenga la ejecución
-pero en algunos casos debemos ignorar el error y continuar con la ejecución
-por ejemplo, crear un directorio de caché y luego reiniciar Apache
---
- hosts: web1
tasks:
- shell: mkdir /tmp/cache
- name: reload httpd
service:
name: httpd
state: restarted
- Método de manejo de errores
--ignore_errors: la forma de
manejar los errores-Verdadero significa ignorar el error y continuar con la ejecución
-Falso significa detener la ejecución cuando se encuentra un error -Por defecto
Falso
-Método de manejo:
- name: run some command
shell: /usr/bin/somecommand
ignore_error: True
Etiquetas de módulo
- etiquetas: define una etiqueta de llamada para la tarea especificada
- Formato de uso:
- nombre: NOMBRE
- módulo: argumentos
–etiquetas: TAG_ID - Cómo llamar al libro de jugadas
--t TAGS, --tags = TAGS - Modificar el yml de la configuración httpd
tasks: - copy: src: httpd.conf dest: /etc/httpd/conf/httpd.conf - template: src: index.html dest: /var/www/html/index.html owner: apache group: apache mode: 0644
- Establecer etiquetas
- name: modify index.html copy: src: index.html dest: /var/www/html/index.html owner: apache group: apache mode: 0644 tags: update_index
Marca de llamada ansible-playbook conf.yml -t update_index
Controladores de módulo
- Acciones tomadas cuando cambia el recurso de interés
- La acción de notificación se puede utilizar para que se active al final de cada juego, a fin de evitar realizar la operación especificada cada vez que se produzcan varios cambios y, en su lugar, realizar la operación especificada solo una vez después de que se hayan producido todos los cambios.
- Las operaciones enumeradas en notificar se denominan manejadores, es decir, notificar llaman a las operaciones definidas en el manejador.
- Apache se instaló anteriormente, el archivo de configuración httpd se modificó y el archivo de configuración se volvió a cargar para que el servicio surta efecto.
- Utilice controladores para lograr
handlers:
- name: reload httpd
service:
name: httpd
state: restarted
- Combinado con el ejemplo anterior, use manejadores
tasks:
- name: modify httpd.conf
copy:
src: httpd.conf
dest: /etc/httpd/conf/httpd.conf
tags: update_conf
notify: reload httpd
handlers:
- name: reload httpd
service:
name: httpd
state: restarted
!!!Precauciones:
- Notificar llama a la cadena definida por el nombre de la sección del controlador, que debe ser coherente; de lo contrario, no se logrará el efecto de activación
. Cuando varias tareas activan la misma notificación, el mismo servicio solo se activará una vez
. La notificación puede activar varias condiciones . El entorno de producción a menudo implica un escenario en el que un archivo de configuración cambia y es necesario reiniciar varios servicios. El controlador es muy adecuado para su uso aquí
-combinado con vars, se pueden escribir scripts de administración de servicios muy comunes
Ejercicios para el módulo de errores / etiquetas / controladores
- Instalar el archivo de configuración del software Apache
- Vuelva a cargar el archivo de configuración para que el servicio surta efecto
- Utilice controladores para lograr
Paso 1: error
El libro de jugadas se ejecuta en orden de arriba a abajo. Si se informa de un error, los siguientes comandos no se ejecutarán. Si desea resolverlo, puede usar ignorando_errores: Verdadero (al usar esto, habrá un mensaje de error, indicando para ignorar el error, continúe ejecutando el siguiente comando)
[root@manger ansible]# vim error.yml
---
- hosts: web
remote_user: root
tasks:
- shell: mkdir /tmp/cache
- name: ReStart service httpd
service:
name: httpd
state: restarted
- name: run some command
shell: /usr/bin/somecommand
ignore_errors: True
[root@ansible ansible]# ansible-playbook error.yml
Paso 2: las etiquetas definen un identificador de llamada para la tarea especificada
[root@manger ansible]# vim adhttp.yml
---
- hosts: cache
remote_user: root
tasks:
- copy:
src: /root/httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: apache
group: apache
mode: 0644
tags: syncconf
[root@manger ansible]# ansible-playbook tags.yml -t syncconf
[root@manger ansible]# vim handers.yml
---
- hosts: cache
remote_user: root
tasks:
- copy:
src: /root/httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: apache
group: apache
mode: 0644
tags: syncconf
notify:
- restart httpd
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
[root@manger ansible]# ansible-playbook handers.yml
Módulo cuando
- Algunos juicios necesitan desencadenar una operación después de cumplir condiciones específicas, o terminar un comportamiento determinado en condiciones específicas. Este traje requiere un juicio condicional. Cuándo es la mejor opción para resolver este problema. Las variables del sistema en Hechos remotos se utilizan como condiciones de cuándo, qué se puede ver a través del módulo de configuración
; ejemplos de cuándo:
tashs:
- name: somecommand
command: somecommand
when: expr
- Un ejemplo de uso cuando
---
- name: Install VIM
hosts: all
tasks:
- name: Install VIM via yum
yum: name=vim-enhanced state=installed
when: ansible_os_family == "RedHat"
- name: Install VIM via apt
apt: name=vim state=installed
when: ansible_os_family == "Debian"
Registro del módulo
- register
-A veces necesitamos ejemplos más complicados, como juzgar el resultado de la ejecución del comando anterior para procesar las operaciones posteriores. En este momento, necesitamos el módulo de registro para guardar el estado de retorno del comando anterior y llamarlo más tarde- command: test command register: result - command: run command when: result
- Registro de variable avanzado:
juzga el valor de retorno del resultado de ejecutar el
comando.Cuando la carga del sistema excede un cierto valor, es adecuado para un procesamiento especial.
---
- hosts: web
remote_user: root
tasks:
- shell: uptime | awk '{
printf("%.2f",$(NF-2))}'
register: result
- service:
name: httpd
state: stopped
when: result.stdout | float >0.7
depuración
Depuración del módulo
- El módulo de depuración puede generar información más detallada en tiempo de ejecución para ayudarnos a solucionar problemas
---
- hosts: web
remote_user: root
tasks:
- shell: uptime | awk '{
printf("%.2f",$(NF-2))}'
register: result
- service:
name: httpd
state: stopped
when: result.stdout| float >0.7
- debug: var=result
with_items
- with_items es un bucle estándar de libro de jugadas, que se puede usar para iterar una lista o diccionario, y
obtener el valor de cada iteración a través de { (elemento)}; por
ejemplo, crear varios usuarios
---
- hosts: web1
remote_user: root
tasks:
- name: add users
user: group=wheel password={
{
'123456' |password_hash('sha512')}} name={
{
item}}
with_items:["a1","a2","a3","a4"]
- with_items advanced:
defina diferentes grupos para diferentes usuarios
---
- hosts: web2
remote_user:root
tasks:
- name: add users
user:group={
{
item.group}} password={
{
'123456 '| password_hash('sha512')}} name={
{
item.name}}
with_items:
- {
name: 'a1',group: 'root'}
- {
name: 'a2',group: 'root'}
- {
name: 'a3',group: 'wheel'}
- {
name: 'a4',group: 'wheel'}
Módulo incluye y roles
- Al escribir un libro de jugadas, a medida que el proyecto se hace cada vez más grande, el libro de jugadas se vuelve cada vez más complejo y la modificación también es muy problemática. En este momento, puede poner algo de juego, tarea o controlador en otros archivos, y es un buena elección incluirlo a través del comando include.
tasks:
- include: tasks/setup.yaml
- include: tasks/user.yml user=a1 # users.yml 中可以通过{
{ user }} 来使用这个变量
handlers:
- include: handler/handlers.yml
-
Los roles son como una versión mejorada de include, que puede introducir archivos y directorios de un proyecto.
-
Los niveles de directorio generalmente requeridos son
- vars: capa variable
- tareas: capa de tarea -
manejadores: condición de activación -
archivos: archivo
- plantilla: plantilla
- predeterminado: predeterminado, la prioridad más baja -
Si una obra contiene un rol llamado "x", entonces
---
- hosts: host_group
roles:
- x
- X / tasks / main.yml
- x / vars / main.yml
- x / handlers / main.yml
- x / ...… / main.yml
- se agregará automáticamente a esta obra
Método de resolución de problemas (depuración)
- Revisa la gramática
]# ansible-playbook --syntax-check playbook.yaml
- Prueba de funcionamiento
]#ansible-playbook -C playbook.yaml
--Mostrar hosts afectados --list-hosts --Mostrar
tareas de trabajo --list-tasks
--Mostrar etiquetas que se ejecutarán --list-tags
Ejercicio: Detenga el servicio Apache con una carga del sistema demasiado alta
- Paso 1: Detenga el servicio Apache cuya carga del sistema sea demasiado alta
1) Cuando la carga del sistema supere 0,7, apague httpd
[root@manager ansible]# vim when.yml
---
- hosts: cache
remote_user: root
tasks:
- shell: uptime | awk '{
printf("%.2f\n",$(NF-2))}'
register: result
- service:
name: httpd
state: stopped
when: result.stdout|float > 0.7
[root@manager ansible]# ansible-playbook when.yml
- Paso 2: bucle estándar with_items
1) with_item crea varios usuarios
[root@manager ansible]# vim adduser.yml
---
- hosts: web2
remote_user: root
tasks:
- name: add users
user: group=wheel password={
{
'123456' | password_hash('sha512')}} name={
{
item}}
with_items: ["a1", "a2", "a3", "a4"]
[root@manager ansible]# ansible-playbook adduser.yml
2) Definir diferentes grupos para diferentes usuarios
[root@manager ansible]# vim adduser1.yml
---
- hosts: web2
remote_user: root
tasks:
- name: add users
user: group={
{
item.group}} password={
{
'123456' | password_hash('sha512')}} name={
{
item.name}}
with_items:
- {
name: 'a1', group: 'root'}
- {
name: 'a2', group: 'root'}
- {
name: 'a3', group: 'wheel'}
- {
name: 'a4', group: 'wheel'}
[root@manager ansible]# ansible-playbook adduser1.yml
3) Incluir y roles
Al escribir un libro de jugadas, a medida que el proyecto se hace más y más grande, el libro de jugadas se vuelve cada vez más complejo. Puedes poner play, task o handler en otros archivos. Es una buena opción
incluirlo. Los roles son como una versión mejorada de include, que puede introducir archivos y directorios de un proyecto.
Generalmente, el nivel de directorio requerido es
vars:
tareas de capa variable :
controladores de nivel de tarea :
archivos de condiciones de activación :
plantilla de archivo : plantilla
predeterminada: predeterminada, la prioridad más baja
...
tasks:
- include: tasks/setup.yml
- include: tasks/users.yml user=plj
//users.yml 中可以通过{
{
user }}来使用这些变量
handlers:
- include: handlers/handlers.yml
Paso 3: detección de depuración
[root@manager ansible]# ansible-playbook --syntax-check http.yml //检测语法
root@manager ansible]# ansible-playbook http.yml --list-tasks
//显示要执行的工作
[root@manager ansible]# vim debug.yml
---
- hosts: cache
remote_user: root
tasks:
- shell: uptime |awk '{
printf("%f\n",$(NF-2))}'
register: result
- service:
name: httpd
state: stopped
when: result.stdout|float > 0.7
- name: Show debug info
debug: var=result
[root@manager ansible]# ansible-playbook debug.yml //运行