ansible-playbook (variable 2) y comando simple de verificación de sintaxis

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         //运行

Supongo que te gusta

Origin blog.csdn.net/weixin_45942735/article/details/104298786
Recomendado
Clasificación