您的当前位置:首页正文

Ansible中的playbook

2024-11-26 来源:个人技术集锦

1、playbook简介

playbook是ansible用于配置,部署,和管理被控节点的剧本。通过playbook的“描述”,通过执行“剧本”的内容,让受控主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列ad-hoc模块操作已将,playbook是将该一系列操作组合起来,统一完成操作。

2、playbook使用场景

当一个设施过于复杂,需要大量的操作时候,且需要不断的重复操作,这时最好使用playbook,其使用意义类似于脚本一样,可以很方便的批处理任务,但playbook与脚本不同的是,playbook有自己的语法格式。

3、playbook构成元素

核心元素:

       Tasks:任务,由模板定义的操作列表

       Variables:变量

       Templates:模板,即使用模板语法的文件

       Handlers:处理器 ,当某条件满足时,触发执行的操作

       Roles:角色

hosts和users:

       hosts一行可以是一个主机组、主机、多个主机,中间以冒号分隔,可使用通配模式。其中remote_user表示执行的用户账号。

Tasks list 和action:

       1:Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。
       在运行playbook时(从上到下执行),如果一个host执行task失败,整个tasks都会回滚,请修正playbook 中的错误,然后重新执行即可。
       Task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量,模块执行时幂等的,这意味着多次执行是安全的,因为其结果一致。
       2:每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。如果没有定义name,‘action’的值将会用作输出信息中标记特定的task。
       3:定义一个task,常见的格式:”module: options” 例如:yum: name=httpd
       4:ansible的自带模块中,command模块和shell模块无需使用key=value格式

4、playbook语言格式

playbook由YMAL语言编写。YAML参考了其他多种语言,包括:XML、C语言、Python等;YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。

对于 Ansible, 每一个 YAML 文件都是从一个列表开始. 列表中的每一项都是一个键值对, 通常它们被称为一个 “哈希” 或 “字典”. 所以, 我们需要知道如何在 YAML 中编写列表和字典。

文件名通常以.yml结尾方便标识,文件内容模板如下:

两个基本原则:(1)处于同一层次结构中同一级别的数据元素必须具有相同的缩进量,(2)如果项目属于其他项目的子项,其缩进量必须大于父项

 这里只进行简单的说明,后续的变量等语法,将单独列出。

5、playbook命令演示

单任务:(查看servera.linux.com是否有linux用户)

  1 ---
  2 - name: Configure User
  3   hosts: servera.linux.com
  4   tasks:
  5     - name: Linux user
  6       user:
  7         name: linux
  8         uid: 1000
  9         state: present
 10 ...
~                            

多任务:(开启apache服务并设置默认配置页)

 

  1 ---
  2 - name: Install and Start Apache
  3   hosts: web
  4   tasks:
  5     - name: Apache is present
  6       yum:
  7         name: httpd
  8         state: present
  9     - name: Change index.html
 10       copy:
 11         src: files/index.html
 12         dest: /var/www/html/index.html
 13     - name: Start Aparche
 14       service:
 15         name: httpd
 16         state: started
 17         enabled: true
 18 ...
~                                                                                                        
~                                     

多剧本:(开启apache服务,并检测)

  1 ---
  2 - name: first play
  3   hosts: web
  4   tasks:
  5     - name: first task
  6       dnf:
  7         name: httpd
  8         state: present
  9     - name: second task
 10       service:
 11         name: httpd
 12         enabled: true
 13 - name: second play
 14   hosts: mariadb
 15   tasks:
 16     - name: first task
 17       yum:
 18         name: mariadb
 19         state: present
 20     - name: second task
 21       service:
 22         name: mariadb
 23         enabled: true
 24 ...
                              

6、playbook结果解析

正确结果:

错误结果:

7、playbook示例说明

查看是否有语法错误:

         ansible-playbook --syntax-check site.yml

产生错误是时,可以根据错误提示,进行修改即可。

预执行,查看是否会报错:(预执行不会更改受控端,只是检测执行结果)

         ansible-playbook -C site.yml

 演剧:

         ansible-playbook site.yml

图 8 演剧

 查看演剧的细节:

         -v        ###显示任务结果 ,并查看配置文件来源;

         -vv      ###显示任务结果和任务配置

         -vvv    ###包含关于与受管主机的连接信息

         -vvvv  ###增加连接插件相关的额外详细程度选项(包括受管主机上用于执行脚本的用户及所 执行的脚本)

图 9 查看演剧的详细信息

 

显示全文