一、Playbook
1. Ansible playbook和临时命令
- 临时命令可以作为一次性命令对一组目标主机运行一项简单的任务
- play是针对清单中选定的主机运行的一组有序任务。playbook是一个文本文件,其中包含由一个或多个按特定顺序运行的play组成的列表
2. playbook介绍
-
以
.yml
结尾的yaml格式的文件,不可以使用tab
,建议使用2个空格 -
每个playbook是由若干play组成,每个大多play由三个键值对组成:
name
,hosts
,tasks
-
Playbook开头一行由三个破折号组成
---
。一般来说以三个点结尾(实际往往省略) -
示例:下面将一条临时命令转换为playbook
- 临时命令:
ansible servera -m user -a 'name=zhangsan uid=4000 state=present'
- playbook:
- 前两个键具有简单的值。第三个将一个多行列表作为值
# vim createUser.yml --- - name: Configure important user consistently hosts: servera tasks: - name: zhangsan exists with UID 4000 user: name: zhangsan uid: 4000 state: present # ansible-playbook createUser.yml -v
- 临时命令:
3. Yaml的语法格式
-
基本语法
-
大小写敏感
-
使用缩进表示层级关系,处与层次结构中同一级别的数据元素(例如同一列表中的项目〉必须具有相同的缩进量
-
缩进不允许使用tab,只允许空格
-
缩进的空格数不重要,只要相同层级的元素左对齐即可
-
'#'表示注释
-
-
数据类型
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)。以 - 开头的行表示构成一个数组中的元素
- 纯量(scalars):单个的、不可再分的值
- 这里学过python的应该很容易理解这部分,字典和列表的概念几乎一致
-
字符串
- YAML中的字符串通常不需要放在引号里,即使字符串中包含空格。字符串也可以用双引号或单引号括起。
- 编写多行字符串有两种方式
- 可以使用竖线字符
|
表示要保留字符串中的换行字符 - 要编写多行字符串,您也可以使用大于号
>
字符来表示换行字符转换成空格并且行内的引导空白将被删除。这种方法通常用于将很长的字符串在空格字符处断行,使它们跨占多行来提高可读性。(人话就是显示的时候不换号)
- 可以使用竖线字符
-
字典的两种表示形式
name: svcrole
svcservice: httpd
svcport: 80
{
name: svcrole, svcservice: httpd, svcport: 80}
-
列表的两种表示形式
- 使用普通单破折号编写的列表
- 写在单行
hosts: - servera - serverb - serverc hosts: [servera, serverb, serverc]
4. 编写多play多任务剧本
-
---
:三个破折号组成的一行添加到文件的开头,以注明这是YAML文件的开头 -
- name
:给此play定义一个名称 -
hosts
:空两格与name对其,注明受管主机 -
become: yes
:空两格与name对其,表示启用特权升级,也可在配置文件中设置 -
tasks
:空两格与name对其,定义任务列表- name
:定义此任务的名称模块名
:与上面的name对齐,表明使用哪个模块模块参数
:缩进2格,用法同临时命令
- name
:定义第二个任务…同上,以此类推
-
- name
:定义第二个play…同上,以此类推
示例:
---
- name: install pkgs
hosts: dev,