playbook剧本
一个剧本(即playbook),可以包含多个play
每个play用于在指定的主机上,通过模块和参数执行相应的任务
每个play可以包含多个任务。
任务有模块和参数构成。
paly要建立在ansible文件夹下才能使用
因为yaml文件对格式要求很严格所有本人在编写时会设置一下vim编译器的一些功能
格式
set ai:自动缩进
set ts=2:设置tab键缩进两个空格
set et:将tab键转换为相应的空格
set cursorcolumn:设置光标列
---
- 名字(name): 自己起名
职员表(hosts): 要执行的主机
场景(tasks):
- 名字(name): 任务名称
模块名:
选项:
- 名字(name): 任务名称2
模块名:
选项:
yaml语法
- yaml文件的文件名,一般以yml或yaml作为扩展名
- 文件一般以—作为第一行,不是必须的,但是常用
- 键值对使用冒号:表示,冒号后面必须有空格。
- 数组使用-表示,-后面必须有空格。
- 相同的层级必须有相同的缩进。如果缩进不对,则有语法错误。每一级缩进,建议2个空格。
- 全文不能使用tab,必须使用空格。
下面用例子帮助大家了解并介绍一些模块
例
# 编写用于测试连通性的playbook,相当于执行ansible all -m ping
[root@server ansible]# vim test.yml
---[root@server ansible]# vim test.yml
---
- hosts: all
tasks:
- ping:
- hosts: all
tasks:
- ping:
# 在dbs组的主机和web1上创建/tmp/demo目录,权限是0755。将控制端/etc/hosts拷贝到目标主机的/tmp/demo中
[root@server ansible]# vim fileop.yml
---
- name: create dir and copy file
hosts: dbs,web1 # 这里的名称,必须出现在主机清单文件中
tasks:
- name: create dir
file:
path: /tmp/demo
state: directory
mode: '0755'
- name: copy file
copy:
src: /etc/hosts
dest: /tmp/demo/hosts
特殊符号 | >
|和>的区别:|它保留换行符,>把多行合并为一行
例
# 通过copy模块创建/tmp/1.txt,文件中有两行内容,分别是Hello World和ni hao
[root@server ansible]# vim f1.yml
---
- name: play 1
hosts: webservers
tasks:
- name: mkfile 1.txt
copy:
dest: /tmp/1.txt
content: |
Hello World!
ni hao.
# 通过copy模块创建/tmp/2.txt,文件中有一行内容,分别是Hello World! ni hao
[root@server ansible]# vim f2.yml
---
- name: play 1
hosts: webservers
tasks:
- name: mkfile 2.txt
copy:
dest: /tmp/2.txt
content: >
Hello World!
ni hao.
硬盘管理
常用的分区表类型有:MBR(主引导记录)、GPT(GUID分区表)
MBR最多支持4个主分区,或3个主分区加1个扩展分区。最大支持2.2TB左右的硬盘GPT最多支持128个主分区。支持大硬盘
parted模块
用于硬盘分区管理
常用选项:
device:待分区的设备
number:分区编号
state:present表示创建,absent表示删除
part_start:分区的起始位置,不写表示从开头
part_end:表示分区的结束位置,不写表示到结尾
编写逻辑卷创建以及挂载
下面通过一个例子介绍该模块一般如何使用
# 在web1主机上,对/dev/vdc进行分区,创建1个1GB的主分区
---
- name: disk manage
hosts: web1
tasks:
- name: create a partition
parted:
device: /dev/vdc
number: 1
state: present
part_end: 1GiB
# 继续编辑disk.yml,对/dev/vdc进行分区,创建1个新的5GB的主分区
- name: add a new partition
parted:
device: /dev/vdc
number: 2
state: present
part_start: 1GiB
part_end: 6GiB
# 继续编辑disk.yml,创建名为my_vg的卷组,它由上面创建的vdc1和vdc2构成
... ...
- name: create my_vg
lvg:
vg: my_vg
pvs: /dev/vdc1,/dev/vdc2
# 继续编辑disk.yml,在my_vg卷组上创建名为my_lv的逻辑卷,大小1G
... ...
- name: create my_lv
lvol:
vg: my_vg
lv: my_lv
size: 1G
# 继续编辑disk.yml,格式化my_lv为ext4
... ...
- name: mkfs my_lv
filesystem:
dev: /dev/my_vg/my_lv
fstype: ext4
# 继续编辑disk.yml,将my_lv挂载到/data
... ...
- name: mount my_lv
mount:
path: /data
src: /dev/my_vg/my_lv
fstype: ext4
state: mounted