Ansible--Ansible之Playbook

Ansible之Playbook Playbook介绍

playbook参考文档

Playbookad-hoc相比,是一种完全不同的运用ansible的方式,类似与saltstackstate状态文件。ad-hoc无法持久使用,playbook可以持久使用。
playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联合起来按事先编排的机制完成某一任务

Playbook核心元素

Hosts 执行的远程主机列表

Tasks 任务集

Varniables 内置变量或自定义变量在playbook中调用

Templates 模板,即使用模板语法的文件,比如配置文件等

Handlers 和notity结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行

tags 标签,指定某条任务执行,用于选择运行playbook中的部分代码。

Playbook语法

playbook使用yaml语法格式,后缀可以是yaml,也可以是yml。

在单一一个playbook文件中,可以连续三个连子号(---)区分多个play。还有选择性的连续三个点好(...)用来表示play的结尾,也可省略。

次行开始正常写playbook的内容,一般都会写上描述该playbook的功能。

使用#号注释代码。

缩进必须统一,不能空格和tab混用。

缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行实现的。

YAML文件内容和Linux系统大小写判断方式保持一致,是区分大小写的,k/v的值均需大小写敏感

k/v的值可同行写也可以换行写。同行使用:分隔。

v可以是个字符串,也可以是一个列表

一个完整的代码块功能需要最少元素包括 name: task

一个简单的示例

# 创建playbook文件 [root@ansible ~]# cat playbook01.yml --- #固定格式 - hosts: 192.168.1.31 #定义需要执行主机 remote_user: root #远程用户 vars: #定义变量 http_port: 8088 #变量 tasks: #定义一个任务的开始 - name: create new file #定义任务的名称 file: name=http://www.likecs.com/tmp/playtest.txt state=touch #调用模块,具体要做的事情 - name: create new user user: name=test02 system=yes shell=http://www.likecs.com/sbin/nologin - name: install package yum: name=httpd - name: config httpd template: src=./httpd.conf dest=http://www.likecs.com/etc/httpd/conf/httpd.conf notify: #定义执行一个动作(action)让handlers来引用执行,与handlers配合使用 - restart apache #notify要执行的动作,这里必须与handlers中的name定义内容一致 - name: copy index.html copy: src=http://www.likecs.com/var/www/html/index.html dest=http://www.likecs.com/var/www/html/index.html - name: start httpd service: name=httpd state=started handlers: #处理器:更加tasks中notify定义的action触发执行相应的处理动作 - name: restart apache #要与notify定义的内容相同 service: name=httpd state=restarted #触发要执行的动作 #测试页面准备 [root@ansible ~]# echo "<h1>playbook test file</h1>" >>/var/www/html/index.html #配置文件准备 [root@ansible ~]# cat httpd.conf |grep ^Listen Listen {{ http_port }} #执行playbook, 第一次执行可以加-C选项,检查写的playbook是否ok [root@ansible ~]# ansible-playbook playbook01.yml PLAY [192.168.1.31] ********************************************************************************************* TASK [Gathering Facts] ****************************************************************************************** ok: [192.168.1.31] TASK [create new file] ****************************************************************************************** changed: [192.168.1.31] TASK [create new user] ****************************************************************************************** changed: [192.168.1.31] TASK [install package] ****************************************************************************************** changed: [192.168.1.31] TASK [config httpd] ********************************************************************************************* changed: [192.168.1.31] TASK [copy index.html] ****************************************************************************************** changed: [192.168.1.31] TASK [start httpd] ********************************************************************************************** changed: [192.168.1.31] PLAY RECAP ****************************************************************************************************** 192.168.1.31 : ok=7 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 # 验证上面playbook执行的结果 [root@ansible ~]# ansible 192.168.1.31 -m shell -a \'ls /tmp/playtest.txt && id test02\' 192.168.1.31 | CHANGED | rc=0 >> /tmp/playtest.txt uid=990(test02) gid=985(test02) 组=985(test02) [root@ansible ~]# curl 192.168.1.31:8088 <h1>playbook test file</h1>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjsdg.html