ansible-playbook劇本

Playbooks 是一種簡單的配置管理系統與多機器部署系統的基礎, 很是適合於複雜應用的部署nginx

由 yaml 語言編寫, 運行過程當中, ansible-playbook 命令根據自上而下的順序依次執行web

 

playbook是由一個或多個「play」組成的列表。play的主要功能在於將事先歸併爲一組的主機裝扮成事先經過Ansible中的tasks定義好任務。從根本上來說所謂tasks無非是調用Ansible的一個module。將多個「play」組織在一個playbook中便可以讓它們聯同起來按事先編排的機制一同工做。redis

ansible-playbook -h :
ansible-playbook [options] playbook.yml [playbook2 ...] -C, --check         # 檢查,白跑,幹跑 -f FORKS, --forks=FORKS # 用來作併發 --list-hosts          # 列出主機列表 --syntax-check         # 語法檢查

 

Playbook 構成

Playbook主要有如下四部分構成:shell

  1. target section:定義將要執行playbook的遠程主機組
  2. variable section:定義playbook運行時須要使用的變量
  3. task section:定義將要在遠程主機上執行的任務列表
  4. handler section:定義task執行完成之後須要調用的任務

 

第一個簡單的用法: 併發

YAML對空格很是敏感,並使用空格來將不一樣的信息分組在一塊兒,在整個文件中應該只使用空格而不使用製表符,而且必須使用一致的間距,才能正確讀取文件。相同縮進級別的項目被視爲同級元素。spa

字典 :命令行

列表 -rest

後綴名 yml / yamlcode

-  : 後面必須有一個空格     = 等號兩側不能有空格blog

- hosts: web
  tasks:
  - name: creategroup
    group: name=may1
- name: cretaeuser user: name=may1

 

 

傳參

- hosts: web
  tasks:
  - name: create{{ user }}
    user: name={{ user}}

方式一: 命令行-e

ansible-playbook -e 'user=ryan2' p2.yml

方式二: 修改/etc/ansible/hosts 文件

[db:vars] #表示組的參數
user=ryan3

方式三:  編輯yml文件

- hosts: db
  vars:
    - user: alexsb14
  tasks:
    - name: create{{ user }}
      user: name={{ user}}

方式四: register

- hosts: db
  tasks:
  - name: sum
    shell: echo 2+3|bc
    register: user
  - name: createuser
    user: name={{user.stdout}}

優先級

-e > playbook,yml > hosts文件

 

 

條件判斷: 

xxx.yml

- hosts: db
  remote_user: root
  tasks:
  - name: createfile
    copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt
    when: a=="3"
  - name: cratefile
    copy: content="小弦切切如私語" dest=/tmp/a.txt
    when: a=="4"

命令: ansible-playbook -e 'a=4'  xxx.yml

 

 

循環:

xxx.yml

- hosts: web
  tasks:
  - name: crate groups
    group: name={{item}}
    with_items:
    - overwatch1
    - overwatch2
    - overwatch3
  - name: createuser
    user: name={{item.name}} group={{item.group}}
    with_items:
    - {'name':genji,'group':overwatch1}
    - {'name':mccree,'group':overwatch2}
    - {'name':hanzo,'group':overwatch3}

命令: ansible-playbook   xxx.yml

 

 

標籤:

xxx.yml

- hosts: web
  tasks:
  - name: install nginx
    yum: name=nginx
  - name: copy file
    copy: src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf
    tags: copyfile
  - name: start
    service: name=nginx state=started

命令: ansible-playbook -t copyfile xxx.yml

 

 

template

templateh和copy 區別

1. template模塊代替參數,渲染變量

- hosts: web
  tasks:
  - name: install redis
    yum: name=redis
  - name: copyfile
    template: src=/etc/redis.conf dest=/etc/redis.conf
  - name: start
    service: name=redis state=started
  
# 配置文件: bind {{ ansible_default_ipv4.address }}

 

2. template能夠寫相對路徑, 在當前工做目錄下新建templates文件夾, 而後吧文件放templates文件夾裏

- hosts: web
  tasks:
  - name: install redis
    yum: name=redis
  - name: copyfile
    template: src=redis.conf dest=/etc/redis.conf
  - name: start
    service: name=redis state=started

 

 

handlers : 觸發任務, 和 notify搭配使用

- hosts: web
  tasks:
  - name: install redis
    yum: name=redis
  - name: copyfile
    template: src=redis.conf dest=/etc/redis.conf
    tags: copyfile
    notify: restart redis
  - name: start
    service: name=redis state=started
  handlers:
  - name: restart redis
    service: name=redis state=restarted

這樣修改配置文件會自動觸發重啓redis

 

 

參考資源 : http://blog.51cto.com/13525470/2112720 很是官方和到位

相關文章
相關標籤/搜索