Playbook in ansible, un outil automatisé d'exploitation et de maintenance

1. Problème ad hoc

En apprenant AD-HOC, nous avons constaté qu'AD-HOC ne peut exécuter à chaque fois que des commandes simples sur le nœud géré. Dans le travail réel, certaines opérations complexes sont incapables d'être exécutées, c'est pourquoi un Playbook a été introduit pour aider à résoudre ces problèmes complexes.

2. Qu'est-ce que Playbook

Playbook est généralement traduit en script par tout le monde.
Vous pouvez le considérer comme un langage personnalisé par Ansible (Playbook peut être comparé à un shell sous Linux, et Module dans Ansible peut être comparé à diverses commandes sous Linux.)

Trois. YAML

1. Caractéristiques

  • Utilisez # comme commentaire
  • Terminez par .yml ou .yaml
  • Commencez par -, terminez par ..., mais les indicateurs de début et de fin sont facultatifs

2. Grammaire de base

  • Sensible aux majuscules et minuscules
  • Utiliser l'indentation pour indiquer les relations hiérarchiques
  • L'utilisation de la touche Tab ou des espaces lors de l'indentation doit être unifiée et les espaces sont recommandés.
  • Les éléments de même niveau doivent être alignés à gauche
Il existe trois structures de données prises en charge par YAML
  • Chaîne
  • liste
  • dictionnaire

2.1 Chaîne

 ---
#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 Liste

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

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

2.3 Dictionnaires

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

name: Using Ansible
code: D1234

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

2.4 Structure hybride

Ci-dessus, tous les points de connaissances de base pour YAML sont présentés. Mais dans la vie quotidienne, la structure de données souvent requise sera particulièrement complexe et peut être une combinaison de chaîne, de liste et de dictionnaire. Voici un petit exemple:
tout le monde est allé à l'école et ils savent tous qu'ils sont en classe en tant qu'unité. Nous utilisons la forme de listes et de dictionnaires pour décrire la composition d'une classe.

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

2.5 Vérifier la syntaxe YMAL

// Vérifiez le fichier YAML via le module YAML de Python et signalez une erreur si elle est incorrecte. S'il est correct, le contenu en YAML sera affiché.
// Veillez à installer le progiciel yaml lors de son utilisation.
python -c'import yaml, sys; printyaml.load (sys.stdin) 'myyaml.yml
python3 -c'import yaml, sys; print (yaml.load (sys.stdin))' myyaml.yml

Exemple

// 正确的情况

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()
...
...

4. Préparation du livre de jeu

1. Définition du jeu

1. Chaque lecture commence par un tiret
2. Chaque lecture est un format de dictionnaire YAML

Selon les deux règles de jeu ci-dessus, un jeu hypothétique devrait ressembler à ce qui suit

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

Puisqu'un Playbook est composé d'un ou plusieurs Playbooks, la structure d'un Playbook avec plusieurs Playbooks doit ressembler à ce qui suit

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

Attributs de lecture

Basé sur Play dans la section précédente, chaque touche de Play, telle que key1, key2, etc., ces touches sont définies comme des attributs de Play dans PlayBook.
Ces attributs ont des significations spéciales et nous ne pouvons pas personnaliser les attributs de Play à volonté

Attributs communs

  • l'attribut name, le nom de chaque jeu, peut être personnalisé
  • L'attribut hosts, le serveur géré impliqué dans chaque lecture, est le même que le sélecteur d'actifs dans ad-hoc
  • attribut de tâches, les tâches spécifiques à accomplir dans chaque pièce, exprimées sous forme de liste
  • devenir attribut, si vous devez élever le droit, ajoutez des attributs devenus liés
  • devenir_utilisateur attribut, si le privilège est levé, à quel utilisateur
  • L'attribut remote_user spécifie l'utilisateur connecté au nœud distant, c'est-à-dire l'utilisateur qui effectue des opérations spécifiques sur le serveur distant. S'il n'est pas spécifié, l'utilisateur exécutant actuellement un playbook ansible sera utilisé par défaut

3. Un script complet

Selon les attributs réels introduits dans la section précédente, un Playbook avec un Play devrait ressembler à ce qui suit

---
- 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. Différentes manières d'écrire des tâches dans l'attribut de tâches

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

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

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

5. Playbook avec plusieurs lectures

---
- 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. Comment vérifier la syntaxe de Playbook

La méthode de vérification suivante peut uniquement vérifier si le playbook est correct, mais pas si le fichier YAML est syntaxiquement correct

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

Comme le playbook appartient au format YAML, nous pouvons également utiliser le format de syntaxe check YAML pour vérifier l'exactitude de la syntaxe du playbook.

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

7. Comment exécuter PlayBook

ansible-playbook -i hosts myplaybook.yml

8. Comment suivre une seule étape pour suivre le playbook de débogage

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

9. Comment tester et exécuter le playbook

Le test d'exécution exécutera l'intégralité du PlayBook, mais toutes les actions de la tâche ne seront pas exécutées sur le serveur distant et toutes les exécutions sont des actions simulées.

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

Je suppose que tu aimes

Origine blog.csdn.net/weixin_49844466/article/details/108132496
conseillé
Classement