一、Ansible playbook的构成
Inventory:主机列表,表示剧本中的任务要应用在哪些主机上
Tasks:具体任务,即调用哪些模块完成操作,可以配置多个任务
Variables:变量,包含内置变量和自定义变量
Templates:模板,即使用模板语法来灵活变更的配置文件
Handlers与notify:触发器,由某事件触发执行的操作,比如修改配置文件后自动重启服务
二、Playbook的语法要求
1、playbook本质是包含了一个或多个play的YAML配置文件,通常以.yaml或者.yml结尾
2、在单一的一个playbook文件中,使用连续的三个中横线(---)作为每个play的区分
3、缩进必须统一,不能空格和tab混合使用,缩进级别需要一致,同样的缩进代表同样的级别
三、Ansible playbook示例说明
03 |
- hosts: 192.168.1.31 #定义需要执行的主机或主机组 |
04 |
remote_user: root #远程用户 |
08 |
- name: create new file #定义任务的名称 |
09 |
file: name=/tmp/playtest.txt state=touch #调用模块,具体要做的事情 |
10 |
- name: install package |
13 |
template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf |
14 |
notify: #触发器,当条件触发后需要做的操作,配合handlers使用 |
15 |
- restart apache #需要引用的handlers的名字 |
16 |
- name: copy index.html |
17 |
copy: src=/var/www/html/index.html dest=/var/www/html/index.html |
19 |
service: name=httpd state=started |
20 |
handlers: #notify定义的触发执行相应的处理动作 |
21 |
- name: restart apache #要与notify定义的内容相同 |
22 |
service: name=httpd state=restarted #触发要执行的动作 |
hosts:指定远程主机(多个主机用逗号分隔)或主机组
remote_user:指定执行任务的用户(也可单独给每个task定义),通常是root用户,也可指定非root用户使用sudo方式执行任务
3 |
remote_user: root #定义全局用户 |
3 |
remote_user: test #单独为task定义用户 |
sudo(可省略):如果设置为yes,那么sudo_user指定的用户在执行任务时会获得root权限
sudo_user(可省略):指定需要使用sudo执行操作的用户
connection(可省略):通过什么方式连接到远程主机,默认为SSH
gather_facts(可省略):如果明确不需要通过setup模块来获取远程主机facts信息,可以使用这个选项
四、运行Ansible playbook
ansible-playbook命令示例与常用选项:
01 |
ansible-playbook -t tag_name httpd.yml #-t指定标签名,多个标签用逗号分隔 |
02 |
ansible-playbook playbookname.yml --list-task #列出该playbook中的任务 |
04 |
# --check | -C:只检测可能会发生的改变,但不真正执行操作 |
05 |
# --list-hosts:列出运行任务的主机 |
06 |
# --list-tags:列出playbook文件中定义的所有tags |
07 |
# --list-tasks:列出playbook文件中定义的所有任务 |
08 |
# --limit:主机列表 只针对主机列表中的某个主机或者某个组执行 |
10 |
# -t:指定tags运行,运行某一个或者多个tags。前提是playbook中有定义tags |
ansible-playbook命令结果说明:
ok:已经达到任务要求,无需再次处理
changed:经过了ansible的处理,再次执行则会发现这些信息也变成了ok
PLAY RECAP:一个汇总报告
五、使用ansible-vault加密Playbook
1 |
ansible-vault encrypt hello.yml #加密playbook,加密否的文件无法直接执行和查看 |
2 |
ansible-vault view hello.yml #查看加密后的文件 |
3 |
ansible-vault edit hello.yml #查看加密后的文件 |
4 |
ansible-vault decrypt hello.yml #解密playbook
|