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].name4、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: 66with_items: - {aa: 11,bb: 22} - {aa: 55,bb: 66}错误姿势with_items: aa: 11 bb: 22
8、roles 角色
(1)作用
角色允许你将变量、文件、模板、handler、任务放到一个文件夹中,然后包含他们。
角色中可以包含角色(在建立好一个有效的依赖关系后),也可以传递变量给角色
(2)可包含的文件夹,不使用可以删除
main.ymlroles 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 definedwhen: foo is not definedwhen: result|failedwhen: result|successwhen: result|skippedvars: trip: truewhen: tripwhen: ansible_os_family == 'RedHat'when: not ansible_os_family =="RedHat" or ansible_os_family =="Debian"#如果包含hiwhen: resut.stdout.find('hi') != -1
(2)changed_when
当满足某些条件时,部署状态显示changed。
(3)failed_when
当满足某些条件时,部署状态显示失败。
注意:include_role任务中,使用when,不能包含变量(会报条件状态异常)
解决方案:通过block来保住include_role,给block设置when条件。