一、Ansible playbook简介
playbook 是 ansible 用于配置,部署,和管理被控节点的剧本。通过 playbook 的详细描述,执行其中的一系列 tasks ,可以让远端主机达到预期的状态。playbook 就像 Ansible 控制器给被控节点列出的的一系列 to-do-list ,而被控节点必须要完成。也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。
二、Ansible playbook格式要求
playbook由YMAL语言编写。YAML( /ˈjæməl/ )参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822,Clark Evans在2001年5月在首次发表了这种语言,另外Ingy döt Net与OrenBen-Kiki也是这语言的共同设计者。 YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。首先学习了解一下YMAL的格式,对我们后面书写playbook很有帮助。
常用到的格式:
1、文件的第一行应该以 "---" (三个连字符)开始,表明YMAL文件的开始。
2、在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
3、YMAL中的列表元素以”-”开头然后紧跟着一个空格,后面为元素内容。
4、同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。
5、play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以":"分隔表示,":"后面还要增加一个空格。
组件 | 作用 |
hosts | 运行指定任务的目标主机 |
remote_user | 在远程主机上执行任务的用户 |
sudo_user | |
tasks | 任务列表 |
handlers:
任务在特定条件下触发;受到其他任务的通知时被触发
(1) 某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers;
(2) 任务可以通过“tags“打标签,而后可在ansible-playbook命令上使用-t指定进行调用;
举例:
[root@ansiable ~]# vim qqq.yml
查看root家目录下的文件目录
---
- hosts: web-1
remote_user: root
tasks:
- name: cat file
shell: ls -l /root
检查语法
[root@ansiable ~]# ansible-playbook qqq.yml --syntax-check
ansible-playbook qqq.yml --syntax-check
执行剧本
[root@ansiable ~]# ansible-playbook qqq.yml
ansible-playbook qqq.yml
绿色代表执行成功,系统保持原样 | 黄色代表系统代表系统状态发生改变 | 红色代表执行失败,显示错误输出
三、定义playbook
运行前三部曲
检查错误
ansible-playbook www.yml --syntax-check
列出所有任务
ansible-playbook www.yml --list-task
列出在那些机器执行
ansible-playbook www.yml --list-hosts
[root@ansiable ~]# vim www.yml
vim www.yml
剧本给web组安装nginx并启动
---
- hosts: web
remote_user: root
tasks:
- name: install nginx
yum: name=nginx state=present
tags: one #打标签
- name: start nginx service
service:
name: nginx
state: started
tags: two #标签
检查语法
[root@ansiable ~]# ansible-playbook www.yml --syntax-check
ansible-playbook www.yml --syntax-check
执行剧本
[root@ansiable ~]# ansible-playbook www.yml
ansible-playbook www.yml
ok表示之前安装过nginx
另一台机器查看
nginx已启动
四、variables(定义变量)
1、facts:直接调用
使用setup模块可以收集信息,可以直接调用
查看web-1的信息
[root@ansiable ~]# ansible web-1 -m setup
ansible web-1 -m setup
2、用户自定义变量
[root@ansiable ~]# vim www.yml
---
- hosts: web
remote_user: root
vars: #定义变量
service_1: nginx
tasks:
- name: install {{ service_1 }}
yum: name={{ service_1 }} state=present
tags: one #标签
- name: start {{ service_1 }} service
service:
name: "{{ service_1 }}"
state: started
tags: two #标签
[root@ansiable ~]# ansible-playbook www.yml --syntax-check
ansible-playbook www.yml --syntax-check
3、通过roles(角色)传递变量
4、直接在主机清单中定义
[root@ansiable ~]# vim /etc/ansible/hosts
vim /etc/ansible/hosts
[root@ansiable ~]# vim www.yml
vim www.yml
剧本中未定义变量
---
- hosts: web
remote_user: root
tasks:
- name: install {{ service_1 }}
yum: name={{ service_1 }} state=present
tags: one #标签
- name: start {{ service_1 }} service
service:
name: "{{ service_1 }}"
state: started
tags: two #标签
[root@ansiable ~]# ansible-playbook www.yml --syntax-check
ansible-playbook www.yml --syntax-check
直接在命令行中输入变量-e
资源清单中取消变量
[root@ansiable ~]# ansible-playbook www.yml -e service_1=nginx
ansible-playbook www.yml -e service_1=nginx