Ansible (2) Cómo realizar tareas en lotes en múltiples hosts

Lote Ansible Hay dos formas de realizar tareas adhocy playbook, al ejecutar comandos simples, puede usar adhoc, cuando ejecutar comandos complejos que involucran múltiples módulos / condiciones, se recomienda usarplaybook

módulo módulo

ansibleLa capa inferior es python, pero ansibleno necesitamos escribir un pythonscript cuando lo usamos , pero podemos llamar directamente al módulo.
Los módulos son scripts desarrollados por funcionarios de Red Hat u otros socios o entusiastas del desarrollo. Podemos ejecutar los comandos correspondientes llamando al módulo.

Ver todos los módulos ansible

ansible-doc -l

Ver la ayuda del módulo especificado

ansible-doc ping

Módulos comunes

Módulos relacionados con archivos

  • copiar Copiar archivos locales al host administrado
  • conjunto de archivos permisos y atributos de archivos
  • lineinfile establece el contenido del archivo
  • sincronizar Utilice rsync para sincronizar contenido

Módulos relacionados con la gestión de paquetes

  • paquete Seleccionar automáticamente el paquete de software de administración de herramientas de acuerdo con el sistema operativo del host administrado
  • Yum usa la herramienta de administración de paquetes yum para administrar paquetes de software
  • apt utiliza la herramienta de administración de paquetes APT para administrar paquetes de software
  • dnf utiliza la herramienta de administración de paquetes DNF para administrar paquetes de software
  • gestión de gemas Gemas de rubí
  • pip gestiona paquetes de Python a través de PyPI

Módulos relacionados con el sistema

  • firewalld Utilice firewalld para administrar firewalls
  • reiniciar reiniciar la máquina
  • servicio de gestión de servicios
  • usuario de gestión de usuarios

ad hoc

formato

ansible" host-pattern" -m "module" -a"module argument" -i "inventroy-path"

parámetro

  • -m
    Si el módulo no se especifica -m, el commandmódulo se utiliza de forma predeterminada , y el commandmódulo puede ejecutar Linuxcomandos directamente en el host administrado
  • -a Parámetros del módulo
  • -u usuario_remoto
  • -i ruta de inventario

Ejemplo

[root@localhost ~]# ansible all -m ping
servera.lab.example.com | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

libro de jugadas

playbookEs un yamlarchivo de formato con el sufijo .ymlo.yaml

contenido del archivo del libro de jugadas

En un playbookarchivo puede contener múltiples, play
una playserie de operaciones debe ejecutarse en el host especificado en una playse puede especificar hosts(que se ejecuta en el host) y tasks(qué ejecución de comando)
taskspuede contener múltiples task, cada una taskestá en una llamada de módulo

Ejemplo de archivo de libro de jugadas

# YAML文件以---开头
---
# - 表示列表
# 第一个play 名称是Configure web server
- name: Configure web server
# hosts指定第一个play在哪些主机上执行
  hosts: servera.lab.example.com
# tasks指定第一个play中都执行哪些内容
  tasks:
# 第一个task,调用service模块,启动httpd服务并设置开机启动
    - name: start and enabled httpd
      service:
       name: httpd
       enabled: true
       state: started
# 第二个play
- name: import test play file and set the variable
  import_playbook: plays/test.yml
  vars:
    url: "http://servera.lab.example.com"

Sintaxis del archivo YAML

  • Cuerda
    • La cadena ordinaria puede ser sin comillas, comillas simples, comillas dobles.
      Si desea citar una variable y la variable está al principio, debe usar comillas dobles para encerrar toda la línea.
    • Cuerda multilínea
    • | El texto es en realidad varias líneas, y el retorno de carro se reemplaza automáticamente con\n
    • \> El texto es en realidad una línea y los retornos de carro no se procesarán
  • La lista está
    en la misma sangría, use -para especificar la lista

  • Uso de diccionario key: valuepara especificar el diccionario

Ejemplo

# 字符串
name: This is a string
name: "This is a string"
name: 'This is a string'
# 列表
hosts:
 - servera
 - serverb
 - serverc
# 字典
name: httpd
port: 443

Ejecutar el libro de jugadas

gramática

ansible-playbook webserver.yml -e "user=root"

parámetro

  • --limit=serverc Ejecutar solo en serverc
  • --syntax-check Compruebe si hay errores de sintaxis
  • -e Especificar variables
  • -C Pretender correr es inútil

Salida y resultados del libro de jugadas

El libro de jugadas suele ser idempotente, es decir, el mismo libro de jugadas, no importa cuántas veces se ejecute, el resultado final es el mismo. Si el host controlado se ha cambiado antes, no se cambiará cuando se vuelva a ejecutar el libro de jugadas.

El resultado de la ejecución del libro de jugadas.

El siguiente es un playbookejemplo del resultado de la ejecución

[root@localhost ~]# ansible-playbook copy-file.yml 
# 执行的PLAY的名称
PLAY [Using the copy module] **********************************************************************************************
# 执行的TASK名称 以及该TASK在哪些主机上执行及执行结果 
TASK [Gathering Facts] ****************************************************************************************************
ok: [serverb.lab.example.com]
ok: [servera.lab.example.com]

TASK [copy files/user.txt to remote host] *********************************************************************************
changed: [serverb.lab.example.com]
changed: [servera.lab.example.com]
# PLAY的执行结果概述
PLAY RECAP ****************************************************************************************************************
servera.lab.example.com    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
serverb.lab.example.com    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Descripción

TASKResultados de

Resultado general

  • ok Ejecución exitosa, sin cambios
  • changed La ejecución fue exitosa y se realizaron los cambios.
  • unreachable El host controlado es inalcanzable
  • failed La ejecución falló

Relacionados con el control de procesos

  • skipped No cumpla las condiciones de ejecución, omita la tarea y no ejecute
  • rescuedEn blockejecución cuando falla
  • ignored La ejecución falló pero se ignoró el error

Supongo que te gusta

Origin blog.51cto.com/13540167/2605646
Recomendado
Clasificación