Playbook en ansible, una herramienta de operación y mantenimiento automatizada

1. Problema ad-hoc

Al aprender AD-HOC, descubrimos que AD-HOC solo puede ejecutar comandos simples en el nodo administrado cada vez. En el trabajo real, algunas operaciones complejas no se pueden ejecutar, por lo que ansible introdujo Playbook para ayudar a resolver problemas tan complejos.

2. ¿Qué es Playbook?

El Playbook generalmente es traducido a un script por todos.
Puede pensar en él como un lenguaje personalizado por Ansible (Playbook se puede comparar con un shell en Linux, y Module en Ansible se puede comparar con varios comandos en Linux).

Tres. YAML

1. Características

  • Use # como comentario
  • Terminar con .yml o .yaml
  • Comenzar con—, terminar con ..., pero tanto el indicador de inicio como el final son opcionales

2. Gramática básica

  • Distingue mayúsculas y minúsculas
  • Use sangría para indicar relaciones jerárquicas
  • Se debe unificar si se debe usar la tecla Tab o los espacios al sangrar, y se recomiendan los espacios.
  • Los elementos del mismo nivel deben estar alineados a la izquierda
Hay tres estructuras de datos compatibles con YAML
  • Cuerda
  • Lista
  • diccionario

2.1 Cuerda

 ---
#YAML 中的字符串可以不使用引号,即使里面存在空格的时候,当然了使用单引号和双引号也没有错。
 this is a string
 'this is a string'
 "this is a string"
#YAML 中若一行写不完你要表述的内容的时候,可以进行折行。写法如下: 
 long_line: |  		
       Example 1 		
       Example 2 		
       Example 3
 #或者 l
 ong_line: > 		 
            Example 1 		
            Example 2 		
            Example 3	 ...

2.2 Lista

---
#若熟悉 Python 的话, 可以认为它就是Python中的List ,若熟悉 C 语言的话, 可以认为它是 C 中的数组。
#如何定义: 以短横线开头 + 空格 + 具体的值
- red
- green
- blue

#以上的值假如转换成 python 的 List 会是这样:
#['red', 'green', 'blue']
...

2.3 Diccionarios

---
#若熟悉 Python 的话, 可以认为它就是 Python 中的 Dict
#如何定义: key + 冒号(:) + 空格 + 值(value), 即 key: value

name: Using Ansible
code: D1234

#转换为 python 的 Dict
#{'name': 'Using Ansibel', 'code': 'D1234'}
...

2.4 Estructura híbrida

Arriba, se presentan todos los puntos de conocimiento básicos para YAML. Pero en la vida diaria, la estructura de datos que a menudo se requiere será particularmente compleja y puede ser una combinación de cadena, lista y diccionario. Aquí hay un pequeño ejemplo:
Todos han ido a la escuela y todos saben que están en clase como una unidad. Usamos la forma de listas y diccionarios para describir la composición de una clase.

---
class:
  - name: stu1
    num: 001
  - name: stu2
    num: 002
  - name: stu3
    num: 003
{
    
    'class': [{
    
    'name': 'stu1', 'num': 1},{
    
    'name': 'stu2', 'num': 2},...]}
...
字典中有列表,列表中有字典

2.5 Verificar la sintaxis de YMAL

// Verifica el archivo YAML a través del módulo YAML de Python y reporta un error si es incorrecto. Si es correcto, se generará el contenido en YAML.
// Asegúrese de instalar el paquete de software yaml cuando lo use.
python -c'importar yaml, sys; printyaml.load (sys.stdin) 'myyaml.yml
python3 -c'importar yaml, sys; print (yaml.load (sys.stdin))' myyaml.yml

Ejemplo

// 正确的情况

cat myyaml.yml
---
- red
- green
- blue
...
#python -c 'import yaml,sys; print yaml.safe_load(sys.stdin)' < myyaml.yml
['red', 'green', 'blue']

// 错误的情况, 将YAML文件写错
#cat myyaml.yml
---
- red
- green
-blue
...
#python -c 'import yaml,sys; print yaml.load(sys.stdin)' < myyaml.yml
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/yaml/__init__.py", line 71, in load
    return loader.get_single_data()
  File "/usr/local/lib/python2.7/site-packages/yaml/constructor.py", line 37, in get_single_data
    node = self.get_single_node()
...
...

Cuatro. Preparación del libro de jugadas

1. Definición de juego

1. Cada juego comienza con un guión
2. Cada juego es un formato de diccionario YAML

De acuerdo con las dos reglas de juego anteriores, un juego hipotético debería verse como el siguiente

---
- key1: value1
  key2: value2
  key3: value3
...

Dado que un libro de jugadas se compone de una o más jugadas, la estructura de un libro de jugadas con múltiples jugadas debería verse como la siguiente

---
#一个含有3个Play 的伪PlayBook构成
- key1: value1
  key2: value2
  key3: value3
- key4: value1
  key5: value2
  key6: value3
- key1: value1
  key2: value2
  key3: value3
...

2.Atributos de reproducción

Basado en Play en la sección anterior, cada tecla en Play, como key1, key2, etc .; estas teclas se definen como atributos de Play en PlayBook.
Estos atributos tienen significados especiales y no podemos personalizar los atributos de Play a voluntad.

Atributos comunes

  • atributo de nombre, el nombre de cada juego, se puede personalizar
  • El atributo hosts, el servidor administrado involucrado en cada juego, es el mismo que el selector de activos en ad-hoc
  • Atributo de tareas, las tareas específicas que deben completarse en cada obra, expresadas en forma de lista.
  • convertirse en atributo, si necesita elevar el derecho, agregar convertirse en atributos relacionados
  • Convertirse en atributo de usuario, si se eleva el privilegio, a qué usuario
  • El atributo remote_user especifica el usuario conectado al nodo remoto, que es el usuario que realiza operaciones específicas en el servidor remoto. Si no se especifica, el usuario que actualmente está ejecutando el libro de jugadas ansible se utilizará de forma predeterminada

3. Un guión completo

De acuerdo con los atributos reales presentados en la sección anterior, un libro de jugadas con una jugada debería verse como el siguiente

---
- name: the first play example
  hosts: webservers
  remote_user: root   #远程用户
  tasks:
    - name: install nginx package       #任务名称
      yum: name=nginx state=present
    - name: copy nginx.conf to remote server
      copy: src=nginx.conf dest=/etc/nginx/nginx.conf
    - name: start nginx server
      service:
        name: nginx
        enabled: true
        state: started

4. Varias formas de escribir tareas en el atributo de tareas

#以启动 nginx 服务,并增加开机启动为例
#一行的形式:
service: name=nginx enabled=true state=started

#多行的形式:
service: name=nginx
         enabled=true
         state=started

#多行写成字典的形式:
service:
  name: nginx
  enabled: true
  state: started

5. Libro de jugadas con múltiples jugadas

---
- name: manage web servers
  hosts: webservers
  remote_user: root
  tasks:
    - name: install nginx package
      yum: name=nginx state=present
    - name: copy nginx.conf to remote server
      copy: src=nginx.conf dest=/etc/nginx/nginx.conf
    - name: start nginx server
      service:
        name: nginx
        enabled: true
        state: started
- name: manager db servers
  hosts: db_servers
  tasks:
    - name: update database confg
      copy: src=my.cnf dest=/etc/my.cnf 

6. Cómo comprobar la sintaxis de Playbook

El siguiente método de verificación solo puede verificar si el libro de jugadas es correcto, pero no si el archivo YAML es sintácticamente correcto

 #ansible-playbook -i hosts myplaybook.yml --syntax-check  #语法检查

Debido a que el libro de jugadas pertenece al formato YAML, también podemos usar el formato de sintaxis de verificación YAML para verificar la exactitud de la sintaxis del libro de jugadas.

 #python -c 'import yaml,sys; print yaml.safe_load(sys.stdin)' < myplaybook.yml

7. Cómo ejecutar PlayBook

ansible-playbook -i hosts myplaybook.yml

8. Cómo dar un solo paso para seguir el libro de jugadas de depuración

// 执行Task中的任务,需要手动确认是否往下执行。
#ansible-playbook -i hosts myplaybook.yml --step

9. Cómo probar y ejecutar el libro de jugadas

La ejecución de prueba ejecutará todo el PlayBook, pero todas las acciones de la Tarea no se ejecutarán en el servidor remoto y todas las ejecuciones son acciones simuladas.

#ansible-playbook -i hosts myplaybook.yml -C
// -C 为大写的字母 C

Supongo que te gusta

Origin blog.csdn.net/weixin_49844466/article/details/108132496
Recomendado
Clasificación