1、palybook简单实例
---
- hosts: all
user: root
vars:
- name: "dxx"
- age: 15
tasks:
- name: echo {{name}}
shell: echo {{name}}
notify:
- say hello
handlers:
- name: say hello
shell: echo "say hello"
2、变量引用
可在playbook、单个任务中
(1)vars:
- name: dxx
- age: 14
(2)vars_files:
- variables
(3)vars_prompt:
- name: version
prompt: please input version
private: no
3、字典和列表变量的调用
class.name
class[0].name
4、task使用3种方法
- name: copy /aaa
action: copy src=/aaa dest=/bbb/aaa
- name: copy /aaa
copy: src=/aaa dest=/bbb/aaa
- name: copy /aaa
copy:
src: /aaa
dest: /bbb/aaa
5、handlers注意
(1)当任务执行完毕后才会通知
(2)无论通知多少次,最终只会通知一次(????具体是哪一次)
(3)没有调用通知,handler也不会执行
6、变量定义设置默认值
work_name="{{ name |default(tom) }}"
7、with_items使用
正确姿势:
with_items:
- aa: 11
bb: 22
- aa: 55
bb: 66
with_items:
- {aa: 11,bb: 22}
- {aa: 55,bb: 66}
错误姿势
with_items:
aa: 11
bb: 22
8、roles 角色
(1)作用
角色允许你将变量、文件、模板、handler、任务放到一个文件夹中,然后包含他们。
角色中可以包含角色(在建立好一个有效的依赖关系后),也可以传递变量给角色
(2)可包含的文件夹,不使用可以删除
main.yml
roles
myslq
files 存放role需要的文件
tasks 存放playbook的yml文件
templates 存放模板文件
handlers 存放调用任务文件(类似编码中定义的外部函数)
vars 存放role中的变量文件
meta
defaults
redis
files
tasks
templates
handlers
vars
meta
defaults
(3)使用方式
---
- hosts: webserver
roles:
- { role: start_server }
- { role: end_server, port: 80}
- { role: restart_server, when: port is defined }
- hosts: mysql
roles:
- { role: start_mysql }
- hosts: redis
tasks:
- name: include_role tomcat
include_role: name=tomcat port=8080
9、条件判断when
(1)when
#when的常用语法
when: foo is defined
when: foo is not defined
when: result|failed
when: result|success
when: result|skipped
vars:
trip: true
when: trip
when: ansible_os_family == 'RedHat'
when: not ansible_os_family =="RedHat" or ansible_os_family =="Debian"
#如果包含hi
when: resut.stdout.find('hi') != -1
(2)changed_when
当满足某些条件时,部署状态显示changed。
(3)failed_when
当满足某些条件时,部署状态显示失败。
注意:include_role任务中,使用when,不能包含变量(会报条件状态异常)
解决方案:通过block来保住include_role,给block设置when条件。