ansible--playbook用法與自己的yml範例總結
阿新 • • 發佈:2019-04-27
內置變量 簡單 常見 方式 kconfig shel package fff log 介紹
命令用法
- 運行playbook的方式
ansible-playbook <filename.yml> ... [options]
- 常見選項
--check -C 只檢測可能會發生的改變,但不真正執行操作
--list-hosts 列出運行任務的主機
--list-tags 列出tag
--list-tasks 列出task
--limit 主機列表 只針對主機列表中的主機執行
-v -vv -vvv 顯示過程 - 示例
ansible-playbook file.yml --check 只檢測
ansible-playbook file.yml
ansible-playbook file.yml --limit websrvsPlaybook核心元素
- Hosts 執行的遠程主機列表
- Tasks 任務集
- Varniables 內置變量或自定義變量在playbook中調用
- Templates 模板,可替換模板文件中的變量並實現一些簡單邏輯的文件
- Handlers 和 notity 結合使用,由特定條件觸發的操作,滿足條件方才執行,
否則不執行 - tags 標簽 指定某條任務執行,用於選擇運行playbook中的部分代碼。ansible
具有冪等性,因此會自動跳過沒有變化的部分,即便如此,有些代碼為測試其
確實沒有發生變化的時間依然會非常地長。此時,如果確信其沒有變化,就可
以通過tags跳過此些代碼片斷
playbook執行的文件為yml格式
- 此為範例
---
- hosts: all # 代表在所有主機執行
remote_user: root #以root身份執行
tasks:
- name: hello world #標簽名
command: /usr/bin/wall hello world #執行的命令
與shell腳本對比
SHELL腳本
#!/bin/bash # 安裝Apache yum install --quiet -y httpd # 復制配置文件 cp /tmp/httpd.conf /etc/httpd/conf/httpd.conf cp/tmp/vhosts.conf /etc/httpd/conf.d/ # 啟動Apache,並設置開機啟動 service httpd start chkconfig httpd on
Playbook定義
---
- hosts: all
tasks:
- name: "安裝Apache"
yum: name=httpd
- name: "復制配置文件"
copy: src=/tmp/httpd.conf dest=/etc/httpd/conf/
- name: "復制配置文件"
copy: src=/tmp/vhosts.conf dest=/etc/httpd/conf.cd/
- name: "啟動Apache,並設置開機啟動"
service: name=httpd state=started enabled=yes
handlers和notify結合使用觸發條件
- Handlers
是task列表,這些task與前述的task並沒有本質上的不同,用於當關註的資源發生
變化時,才會采取一定的操作- Notify此action可用於在每個play的最後被觸發,這樣可避免多次有改變發生
時每次都執行指定的操作,僅在所有的變化發生完成後一次性地執行指定操作。
在notify中列出的操作稱為handler,也即notify中調用handler中定義的操作
自己的yml範例
#install httpd
- hosts: appsrvs
remote_user: root
tasks:
- name: install package
yum: name=httpd
- name: config file
copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
notify: restart service
tags: config
- name: service
service: name=httpd state=started enabled=yes
tags: service
- name: restart service
service: name=httpd state=restarted
tags: service
handlers:
- name: restart service
service: name=httpd state=restarted
item和變量使用
---
# file var
- hosts: app
remote_user: root
tasks:
- name: file
file: name=/data/{{item}}{{mark}}{{ansible_hostname}}.log state=touch
with_items:
- abc
- xyz
- 123
- item 組
- hosts: appsrvs
remote_user: root
tasks:
- name: create group
group: name={{item}}
with_items:
- agroup
- bgroup
- cgroup
- name: create user
user: name={{item.name}} group={{item.group}}
with_items:
- {name: "aaa",group: "agroup"}
- {name: "bbb",group: "bgroup"}
- {name: "ccc",group: "cgroup"}
templates使用
---
- hosts: all
- vars:
test_ports:
- 81
- 82
- 83
tasks:
- name: test
template: src=test.conf.j2 dest=/data/test.conf
{%for i in test_ports %}
server {
listen {{i}}
server_name www.a.com
root /app/websitea/
}
{%endfor%}
---
# file var
- hosts: appsrvs
remote_user: root
vars_files:
- vars.yml
vars:
- port: 1234
tasks:
- name: file
file: name=/data/{{ansible_hostname}}{{mark}}{{port}}.log state=touch
ansible--playbook用法與自己的yml範例總結