ansible-playbook
Tag:YAML语言
一、 ansbile-playbook是一系列ansible命令的集合,利用yaml语言编写。
YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。YAML 语言的设计目标,就是方便人类读写。
YAML Ain't Markup Language,即YAML不是XML。不过,在开发的这种语言时,YAML的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。它的基本语法规则如下:
大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格。
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#表示注释,从这个字符一直到行尾
二、YAML数据类型详解
-支持的数据类型
1、纯量(scalars):单个的、不可再分的值
数据最小的单位、不可以再分割。类似python中单个变量
2、数组:一组按次序排列的值,又称为序列(sequence)/列表(list)
与python的list数组结构类似,数组元素实用短横线"-"开头
-jack #也可以写成一行[jack,harry.sunny]
-harry 对应到python的list写法如下
-sunny ['jack','harry','sunny']
3、对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)
对象的一组键值对,使用冒号结构表示。类似python中的字典数据结构 key:value(字典无序)
platformName: Android
platformVersion: 6.0.1
## yaml也允许另一种写法,将所有键值对写成一个行内对象
{platformName: Android,platformVersion: 6.0.1}
冒号后面必须要有空格!对应python字典的写法如下:
{'platformName':'Android','platformVersion':'6.0.1'}
examples
playbook:
name: tom
age: 27
wife:
name: jerry
age: 25
children:
- name: jack
age: 15
- name: Bob
age: 14
yaml写法:wife: {
name:jerry,age:25}
python写法如下:
wife: {
'name':'jerry',
'age':'25'
}
yaml写法:children: [{
name:jack,age:15},{
name:Bob,age:14}]
python写法如下:
children: [
{
'name':'jack',
'age':'15'
},
{
'name':'Bob',
'age':'14'
}
]
yaml写法:
{
name:tom,age:27,wife:{
name:jerry,age:25},children: [{
name:jack,age:15},{
name:Bob,age:14}]}
python写法如下:
{
'name':'tom',
'age':'27',
'wife':'{
'name':'jerry','age':'25'}',
'children':' [{
'name':'jack','age':'15'},{
'name':'Bob','age':'14'}]'
} ## 字典嵌套列表嵌套字典
Tag2:playbook
三、playbook基本语法
配置项说明:
name:对该playbook实现的功能做一个概述,后面执行过程中,会打印 name变量的值
hosts:指定对哪些被管理机进行操作;
remote_user:指定在远程被管理机上执行操作时使用什么用户,如不指定,则使用ansible.cfg中配置的remote_user
gather_facts:指定在执行任务之前,是否先执行setup模块获取主机相关信息,如未用到,可不指定
vars:定义后续任务中会使用到的变量,如未用到,可不指定
tasks:定义具体需要执行的任务
name:对任务的描述,在执行过程中会打印出来。
user:指定调用user模块;
name:user模块里的一个参数,用于指定创建的用户名称
四、ansible-playbook常用选项
1. 打印详细信息
-v:打印任务运行结果
-vv:打印任务运行结果以及任务的配置信息
-vvv:包含了远程连接的一些信息
-vvvv:Adds extra verbosity options to the connection plug-ins,including the users being used in the managed hosts to execute scripts, and what scripts have been executed
2. 校验playbook语法
# ansible-playbook --syntax-check manage_apache.yml
playbook: manage_apache.yml
3. 测试运行playbook
通过-C选项可以测试playbook的执行情况,但不会真的执行:
# ansible-playbook -C manage_apache.yml
五、playbook的结构说明
playbook是由一个或多个"play"组成的列表。play的主要功能就是对一组主机应用play中定义好的task。从根本上来讲一个task就是对ansible一个module的调用。而将多个play按照一定的顺序组织到一个playbook中,我们称之为编排。
playbook主要有以下四部分构成:
1、Target section: 用于定义将要执行playbook的远程主机组及远程主机组上的用户,还包括定义通过什么样的方式连接远程主机(默认ssh)(hosts)
2、Variable section: 定义playbook运行时需要使用的变量
3、Task section: 定义将要在远程主机上执行的任务列表(tasks)
4、Handler section: 定义task执行完成以后需要调用的任务,触发器(handler)
1、target section
playbook中的远程用户和ad-hoc中的使用没有区别,默认不定义,则直接使用ansible.cfg配置中的用户相关的配置。也可在playbook中定义如下
- name: create files
hosts: datacenter
remote_user: ansible
become: yes
become_mothod: sudo
become_user: root
tasks:
- name: create files
file:
path: /tmp/redhat
state: touch
playbook中的hosts即inentory中的定义主机与主机组,在这里也完全适用。
- name: start mariadb
hosts: db,&london
tasks:
- name: start mariadb
service:
name: mariadb
state: started
2、task section
play的主体部分是任务列表。任务列表中的各任务按次序逐个在hosts中指定的所有主机上执行,在所有主机上完成第一个任务后再开始第二个。在自上而下运行某playbook时,如果中途发生错误,则整个playbook会停止执行,由于playbook的幂等性,playbook可以被反复执行,所以即使发生了错误,在修复错误后,再执行一次即可。
tasks:
- name: make sure apache is running
service:
name: httpd
state: started
- name: disable selinux
command: /sbin/setenforce 0
<