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主要有如下四部分構成:shell
第一個簡單的用法: 併發
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 很是官方和到位