一.playbooks的简单介绍
playbook是ansible用于配置,部署,和管理被控节点的剧本,通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态.playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成。
二.使用场景:
1.需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook。
2.就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。
3.使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码
三.playbooks组织格式
1.YAML格式
YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写.,类似于半结构化数据,声明式配置;可读性较高的用来表达资料序列的格式,易于与脚本语言交互.
2.YAML语法特点
1)任何数据结构都用缩进来标识,可以嵌套
2)每一行都是一个键值对key:value,冒号隔开,若想在一行标识需要{}和,分隔格式
3)列表用 - 标识
4)文件的第一行应该以 ---(三个连字符)开始,表示YAML文件的开始
5)在同一行中,#之后的表示注释
3.playbooks的组成结构:
1)Tasks:任务列表,指远程主机将要执行的一系列的动作,核心就是ansible模块.
2)Variables:变量
3)Templates:包含模板语法的文本文件
4)Handlers:处理器,有某个条件触发执行操作
5)remoute_user:远程主机上执行任务的用户
6)Hosts:运行指定任务的目标主机
四.playbooks剧本编写:
五.针对yml文件加密:
ansible-vault encrypt yml文件名
执行yml文件:
ansible-playbook yml文件 --ask-vault-pass
解密yml文件:
ansible-vault decrypt yml文件名
六.变量种类:
1)facts:由远程主机发回的主机特有的属性信息,这些信息被保存在ansible变量中;无须声明,可直接调用;
2)自定义变量:
通过命令行传递:ansible-playbook test.yml –extra-vars"host=www user=test",通过roles传递
通过yml文件中添加vars添加变量
3)主机变量:定义在inventory中的主机之后的变量;直接传递给单个主机的变量
七.playbooks执行命令:
执行yml文件: ansible-playbook yml文件
指定tag执行: ansible-playbook yml文件 -t 便签名称
指定变量: ansible-playbook yml文件 –extra-vars"host=www user=test"
命令解释:
ansible-playbook web.yml -e servername=httpd -t starthttpd
分析:
-e servername=httpd 指定变量的值为httpd
-t starthttpd 执行这个标签的操作
八.相关语句:
1)判断: when: ansible_os_family == "Debian"
2)迭代:
- name: add several users
user: name=` item`.`name ` state=present groups=` item`.`groups `
with_items:
-{ name: 'testuser1', groups: 'wheel' }
-{ name: 'testuser2', groups: 'root' }
3)运行命令忽略结果: ignore_errors: True
4)handers:用于当关注的资源发生变化时采取一定的操作
“notify”这个action可用于在每个play的最后被触发,这样可以避免多次有改变发生时每次都执行指定的操作,取而代之,仅在所有的变化发生完成后一次性地执行指定操作.在notify中列出的操作称为handler,也即notify中调用handler中定义的操作.
代码:
-name: template configuration file
template: src=template.j2 dest=/etc/foo.conf
notify:
- restart memcached
- restart apache
handler是task列表,这些task与前述的task并没有本质上的不同。
handlers:
- name: restart memcached
service: name=memcached state=restarted
- name: restart apache
service: name=apache state=restarted