ansible的playbook的介绍-yaml
ansible的playbook是使用yaml语言写的
YAML标记语言介绍
YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言包括XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言另外Ingy dtNet与Oren Ben-Kiki也是这语言的共同设计者。
YAML Ain't Markup Language即YAML不是XML。不过在开发的这种语言时YAML的意思其实是"Yet Another Markup Language"仍是一种标记语言。其特性
YAML的可读性好
YAML和脚本语言的交互性好
YAML使用实现语言的数据类型
YAML有一个一致的信息模型
YAML易于实现
YAML可以基于流来处理
YAML表达能力强扩展性好
它的基本语法规则如下。
• 大小写敏感
• 使用缩进表示层级关系
• 缩进时不允许使用Tab键,只允许使用空格。
• 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
# 表示注释,从这个字符一直到行尾,都会被解析器忽略。
yaml支持的数据类型
对象:
对象的一组键值对,使用冒号结构表示。
my_key: my_value
数组:
数据结构的子成员是一个数组,则可以在该项下面缩进一个空格
languages:
- python
- perl
- ruby
纯量
纯量是最基本的、不可再分的值
字符串
var: abc
布尔值
var: true
整数
var: 123
浮点数
var: 12.30
Null
var: ~
时间
time: 2001-12-14
日期
date 20:10:20
当需要执行的任务有多个时,需要一条一条编辑ansible命令,然后执行,而且当需要重复执行时,又要重新编辑执行,这样效率不高,因此ansible就可以利用playbook来完成将任务写到一个YAML格式的文件中,然后利用ansible-playbook进行调用该文件,从而实现了多条语句,可重复执行的效果,类似shell脚本的效果,ansible的playbook要借助YAML文件来实现,YAML文件扩展名通常为.yaml或.yml
使用playbook的基本命令格式
Usage: ansible-playbook [options] playbook.yml [playbook2 ...] -C, --check 干跑一次 不会真正落地 -f FORKS 做高并发 --list-hosts 列出匹配的主机 --syntax-check 检查语法
playbook的基础组件
hosts:运行指定任务的目标主机,多个主机用:冒号分隔
remote_user:在远程主机上执行任务的用户;可以全局指定,也可以单个任务指定,如果是root用户执行可以不用写,默认是root
sudo_user:表示以sudo方式运行任务时,切换为哪个用户身份运行
tasks: 任务列表
使用palybook来管理被控机
1 创建剧本
编写ansible的剧本,创建yaml语言的文件,文件的位置可以任意,为了规范,好记,最好有一个单独的目录存放剧本
我创建了mkdir /palybook这个目录来存在剧本
:后缀名是.yaml 或 yml
[root@master ~]# vim p1.yml
- hosts: web remote_user: root tasks: - name: add group group: name=IT - name: creat user user: name=alex20 - hosts: 192.168.16.140 remote_user: root tasks: - name: copy copy: src=/var/log/yum.log dest=/tmp/
文件翻译成python的语言的格式
文件的解释:
- hosts: web # 应用的主机 web是主机组 remote_user: root # 使用root来执行这个playbook tasks: # 要执行的任务 - name: add group # 任务的名字,可以随意写 group: name=IT # group 是执行的模块名 后面是模块的参数 - name: creat user # 任务的名字 user: name=alex20 # 使用user模块创建用户 alex20 - hosts: 192.168.16.140 # 140这台主机执行下面的命令 remote_user: root # root用户执行 tasks: # 执行任务 - name: copy # 任务的名字 copy: src=/var/log/yum.log dest=/tmp/ # 使用copy模块来复制文件