ansible学习笔记-playbook

一、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"


二、变量引用

可在playbook、单个任务中mysql

(1)vars:
       - name: dxx
       - age: 14

(2)vars_files:
       - variables

(3)vars_prompt:
       - name: version
         prompt: please input version
         private: no


三、字典和列表变量的调用

     class.name
      class[0].nameweb

四、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

五、handlers注意

(1)当任务执行完毕后才会通知redis

(2)不管通知多少次,最终只会通知一次(????具体是哪一次)sql

(3)没有调用通知,handler也不会执行shell

六、变量定义设置默认值

work_name="{{ name |default(tom) }}"

七、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

八、roles 角色

(1)做用tomcat

 角色容许你将变量、文件、模板、handler、任务放到一个文件夹中,而后包含他们。函数

 角色中能够包含角色(在创建好一个有效的依赖关系后),也能够传递变量给角色编码

(2)可包含的文件夹,不使用能够删除spa

main.yml
roles
   myslq
     files              存放role须要的文件
     tasks              存放playbook的yml文件
     templates          存放模板文件
     handlers           存放调用任务文件(相似编码中定义的外部函数)
     vars               存放role中的变量文件
     meta               
     defaults
   redis
     files
     tasks
     templates
     handlers
     vars
     meta
     defaults

(3)使用方式rest

---
- 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

九、条件判断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条件。

相关文章
相关标签/搜索