Ansible Playbook 詳解
一、playbook 的簡單使用
1、建立檔案例項
(1)編輯配置檔案
[[email protected] ~]# cd /etc/ansible/
[[email protected] ansible]# vim test.yml //固定字尾為yml,一定要注意空格
---
- hosts: testhost
user: root
tasks:
- name: playbook_test
shell: touch /tmp/playbook.txt
注意:
-
hosts引數指定了對哪些主機進行參作;
-
user引數指定了使用什麼使用者登入遠端主機操作;
-
tasks指定了一個任務,其下面的name引數同樣是對任務的描述,在執行過程中會打印出來。
(2)執行建立playbook檔案檔案
[[email protected] ansible]# ansible-playbook test.yml
PLAY [testhost] ****************************************************************
TASK [setup] *******************************************************************
ok: [192.168.2.71]
ok: [192.168.2.73]
ok: [192.168.2.72]
TASK [playbook_test] ***********************************************************
changed: [192.168.2.71]
changed: [192.168.2.73]
changed: [192.168.2.72]
PLAY RECAP *********************************************************************
192.168.2.71 : ok=2 changed=1 unreachable=0 failed=0
192.168.2.72 : ok=2 changed=1 unreachable=0 failed=0
192.168.2.73 : ok=2 changed=1 unreachable=0 failed=0
(3)現在來檢視是否批量建立成功playbook.txt
檔案。
[[email protected] ~]# ansible testhost -m command -a 'ls -l /tmp/playbook.txt'
192.168.2.73 | SUCCESS | rc=0 >>
-rw-r--r-- 1 root root 33 4月 19 13:41 /tmp/playbook.txt
192.168.2.71 | SUCCESS | rc=0 >>
-rw-r--r--. 1 root root 33 4月 19 13:41 /tmp/playbook.txt
192.168.2.72 | SUCCESS | rc=0 >>
-rw-r--r--. 1 root root 33 4月 19 13:41 /tmp/playbook.txt
(4)給建立的playbook批量匯入內容,並檢視匯入的結果
[[email protected] ansible]# vim test.yml
---
- hosts: testhost
user: root
tasks:
- name: 鐵匠運維網部落格
shell: echo "www.tiejiang.org" >> /tmp/playbook.txt
[[email protected] ansible]# ansible-playbook test.yml
PLAY [testhost] ****************************************************************
TASK [setup] *******************************************************************
ok: [192.168.2.71]
ok: [192.168.2.72]
ok: [192.168.2.73]
TASK [鐵匠運維網部落格] *************************************************************
changed: [192.168.2.73]
changed: [192.168.2.71]
changed: [192.168.2.72]
PLAY RECAP *********************************************************************
192.168.2.71 : ok=2 changed=1 unreachable=0 failed=0
192.168.2.72 : ok=2 changed=1 unreachable=0 failed=0
192.168.2.73 : ok=2 changed=1 unreachable=0 failed=0
[[email protected] ansible]# ansible testhost -m command -a 'cat /tmp/playbook.txt'
192.168.2.73 | SUCCESS | rc=0 >>
www.tiejiang.org
192.168.2.71 | SUCCESS | rc=0 >>
www.tiejiang.org
192.168.2.72 | SUCCESS | rc=0 >>
www.tiejiang.org
2、建立使用者例項
(1)編輯配置檔案
[[email protected] yml]# vim create_user.yml
---
- name: create_user
hosts: testhost
user: root
gather_facts: false
vars:
- user: "tiejiang"
tasks:
- name: create user
user: name="{{ user }}"
-
name引數對該playbook實現的功能做一個概述,後面執行過程中,會列印 name變數的值 ,可以省略;
-
gather_facts
引數指定了在以下任務部分執行前,是否先執行setup模組獲取主機相關資訊,這在後面的task會使用到setup獲取的資訊時用到; -
vars引數指定了變數,這裡指字一個user變數,其值為test ,需要注意的是,變數值一定要用引號引住;
-
user提定了呼叫user模組,name是user模組裡的一個引數,而增加的使用者名稱字呼叫了上面user變數的值。
(2)執行配置檔案
[[email protected] ansible]# ansible-playbook create_user.yml
PLAY [create_user] *************************************************************
TASK [create user] *************************************************************
changed: [192.168.2.73]
changed: [192.168.2.71]
changed: [192.168.2.72]
PLAY RECAP *********************************************************************
192.168.2.71 : ok=1 changed=1 unreachable=0 failed=0
192.168.2.72 : ok=1 changed=1 unreachable=0 failed=0
192.168.2.73 : ok=1 changed=1 unreachable=0 failed=0
(3)檢視遠端機器的passwd檔案,是否創建出來了使用者
[[email protected] ansible]# ansible testhost -m command -a 'grep tiejiang /etc/passwd'
192.168.2.73 | SUCCESS | rc=0 >>
tiejiang:x:502:502::/home/tiejiang:/bin/bash
192.168.2.72 | SUCCESS | rc=0 >>
tiejiang:x:501:501::/home/tiejiang:/bin/bash
192.168.2.71 | SUCCESS | rc=0 >>
tiejiang:x:502:502::/home/tiejiang:/bin/bash
二、playbook迴圈
例項:修改/tmp
目錄下的1.txthe 2.txt
檔案屬性
(1)去新建實驗檔案
[[email protected] yml]# cat touch1and2.yml
---
- hosts: testhost
user: root
tasks:
- name: 建立實驗檔案
shell: touch /tmp/{1.txt,2.txt}
[[email protected] yml]# ansible-playbook touch1and2.yml
PLAY [testhost] ****************************************************************
TASK [setup] *******************************************************************
ok: [192.168.2.73]
ok: [192.168.2.71]
ok: [192.168.2.72]
TASK [建立實驗檔案] ******************************************************************
changed: [192.168.2.73]
[WARNING]: Consider using file module with state=touch rather than running touch
changed: [192.168.2.71]
changed: [192.168.2.72]
PLAY RECAP *********************************************************************
192.168.2.71 : ok=2 changed=1 unreachable=0 failed=0
192.168.2.72 : ok=2 changed=1 unreachable=0 failed=0
192.168.2.73 : ok=2 changed=1 unreachable=0 failed=0
(2)編輯配置檔案
[[email protected] yml]# cat loop.yml
---
- hosts: testhost
user: root
tasks:
- name: change mode for files
file: path=/tmp/{{ item }} mode=600 owner=root group=root
with_items:
- 1.txt
- 2.txt
(3)執行配置檔案
[[email protected] yml]# ansible-playbook loop.yml
PLAY [testhost] ****************************************************************
TASK [setup] *******************************************************************
ok: [192.168.2.71]
ok: [192.168.2.72]
ok: [192.168.2.73]
TASK [change mode for files] ***************************************************
changed: [192.168.2.73] => (item=1.txt)
changed: [192.168.2.71] => (item=1.txt)
changed: [192.168.2.72] => (item=1.txt)
changed: [192.168.2.73] => (item=2.txt)
changed: [192.168.2.71] => (item=2.txt)
changed: [192.168.2.72] => (item=2.txt)
PLAY RECAP *********************************************************************
192.168.2.71 : ok=2 changed=1 unreachable=0 failed=0
192.168.2.72 : ok=2 changed=1 unreachable=0 failed=0
192.168.2.73 : ok=2 changed=1 unreachable=0 failed=0
三、playbook條件判斷
條件判斷一般用於針對不同版本的系統,比如對centos、ubuntu 等系統進行不同的操作命令。
(1)編輯配置檔案
[[email protected] yml]# vim when.yml
---
- hosts: testhost
user: root
gather_facts: True
tasks:
- name: use when
shell: touch /tmp/when.txt
when: ansible_default_ipv4.address == "192.168.2.73"
(2)執行配置檔案
[[email protected] yml]# ansible-playbook when.yml
PLAY [testhost] ****************************************************************
TASK [setup] *******************************************************************
ok: [192.168.2.71]
ok: [192.168.2.73]
ok: [192.168.2.72]
TASK [use when] ****************************************************************
skipping: [192.168.2.71]
skipping: [192.168.2.72]
changed: [192.168.2.73]
[WARNING]: Consider using file module with state=touch rather than running touch
PLAY RECAP *********************************************************************
192.168.2.71 : ok=1 changed=0 unreachable=0 failed=0
192.168.2.72 : ok=1 changed=0 unreachable=0 failed=0
192.168.2.73 : ok=2 changed=1 unreachable=0 failed=0
四、playbook handlers
當我們執行 tasks 後,伺服器發生變化之後我們要執行一些操作。比如我們修改了某個服務的配置檔案,需要重啟下服務。例項如下:
(1)編輯配置檔案
[[email protected] yml]# vim handlers.yml
---
- name: handlers test
hosts: testhost
user: root
tasks:
- name: test copy
copy: src=/etc/passwd dest=/tmp/handlers.txt
notify: test handlers
handlers:
- name: test handlers
shell: echo "www.tiejiang.org" >> /tmp/handlers.txt
說明:只有 copy 模組真正執行後,才會去呼叫下面的 handlers 相關的操作,追加內容。也就是說如果 src 和 dest 內容是一樣的,並不會去執行 handlers 裡面的 shell 相關命令。所以這種比較適合配置檔案發生更改後,需要重啟服務的操作。
(2)執行配置檔案
[[email protected] yml]# ansible-playbook handlers.yml
PLAY [handlers test] ***********************************************************
TASK [setup] *******************************************************************
ok: [192.168.2.73]
ok: [192.168.2.71]
ok: [192.168.2.72]
TASK [test copy] ***************************************************************
changed: [192.168.2.71]
changed: [192.168.2.73]
changed: [192.168.2.72]
RUNNING HANDLER [test handlers] ************************************************
changed: [192.168.2.71]
changed: [192.168.2.73]
changed: [192.168.2.72]
PLAY RECAP *********************************************************************
192.168.2.71 : ok=3 changed=2 unreachable=0 failed=0
192.168.2.72 : ok=3 changed=2 unreachable=0 failed=0
192.168.2.73 : ok=3 changed=2 unreachable=0 failed=0
(3)檢視執行結果
[[email protected] yml]# ansible testhost -m command -a 'tail -n 1 /tmp/handlers.txt ' //這裡我直接用-n 1顯示handlers.txt的最後一行內容
192.168.2.71 | SUCCESS | rc=0 >>
www.tiejiang.org
192.168.2.73 | SUCCESS | rc=0 >>
www.tiejiang.org
192.168.2.72 | SUCCESS | rc=0 >>
www.tiejiang.org
可檢視到 copy 檔案成功,同時也執行了 handlers 的相關命令,追加了新的資訊。
相關推薦
Ansible Playbook 詳解
一、playbook 的簡單使用 1、建立檔案例項 (1)編輯配置檔案 [[email protected] ~]# cd /etc/ansible/ [[email protected] ansible]# vim test.yml //固定字尾為yml,一定要注意
Ansible自動化運維之Playbook詳解及體驗(二)
tasks ansible sha shadow yml ESS remote name 自動化運維 Handlers介紹: Handlers也是一些task的列表,和一般的task並沒有什麽區別。是由通知者進行的notify,如果沒有被notify,則Handlers
Ansible之Playbook詳解、案例
運行 vat tor 應用程序 div cat share erro sta 什麽是playbook playbooks是一個不同於使用Ansible命令行執行方式的模式,其功能更強大靈活。簡單來說,playbook是一個非常簡單的配置管理和多主機部署系統,不同於任何已經
ansible命令詳解
哪些 for 匹配 登錄密碼 參數 默認 ansi markdown usr 查看ansible版本 import ansible print(ansible.__version__) 命令參數 -m:要執行的模塊,默認為command -a:模塊的參數 -u:ssh連接
Ansible變數詳解
一、在Inventory中定義變數 詳見《Ansible2:主機清單》 二、在Playbook中定義變數 1、通過vars關鍵字定義: vars: http_port: 80 server_name: localhost  
ansible配置檔案ansible.cfg詳解
1)inventory 該引數表示資源清單inventory檔案的位置,資源清單就是一些Ansible需要連線管理的主機列表 inventory = /root/ansible/hosts 2)library Ansible的操作動作,無論是本地或遠端,都使用一小段程式碼來執行,這小段程式碼稱為模
ansible配置文件ansible.cfg詳解
需要 user true var private 控制 cfg 用戶 ssh連接 1)inventory 該參數表示資源清單inventory文件的位置,資源清單就是一些Ansible需要連接管理的主機列表 inventory = /root/ansible/hosts
Ansible配置詳解
目錄 Ansible配置詳解 參考 配置優先順序 配置引數說明 Ansible配置詳解
ansible-playbook使用詳解
playbook 字典 簡單 amp 標題 一個 developer 所有 主機 一、YAML簡介二、Ansible組件三、主機清單Invetory四、PlayBook介紹 一、YAML簡介http://www.yaml.orgYAML:可以使用簡單清單,散列表,標題
自動化運維工具 Ansible ——playbook 劇本詳解及簡易案例
Playbook-劇本介紹 Playbook是 一個不同於使用Ansible命令列執行方式的模式,其功能更強大靈活。簡單來說,playbook是一個非常簡單的配置管理和多主機部署系統,不同於任何已經存在的模式,可作為一個適合部署複雜應用程式的基礎。Playbook可以定製配置,可以按照指定的操作步驟有序執
Ansible之playbook(劇本)介紹和配置詳解
前言 在上篇博文中講解了ansible的多個常用的模組,這些模組讓ansible具有了管理,部署後端主機的能力,但是一個一個命令的執行明顯很浪費時間,那麼能不能有一個檔案類似於shell指令碼那樣可以把複雜的、重複的命令,簡單化、程式流程化起來呢?答案是肯定的,playbook劇本就
第一百一十天 : ansible-playbook 使用詳解
PlayBook: 核心元素: Tasks:任務,由模組定義的操作的列表; Variables:變數 Templates:模板,即使用了模板語法的文字檔案; Handlers:由特定條件觸發的Tasks; Roles:角色; playbook的基礎
Ansible之playbook的使用詳解
完成 小結 jinja2 jinja play 特定 不能 組成 語言 之前詳細介紹了Ansible的安裝, 配置, 以及Ansible常用模塊的使用. 下面對Ansible的playbook用法做一小結. 為什麽引入playbook?一般運維人員完成一個任務, 比如安裝
ansible hosts文件詳解
ansible hosts# This is the default ansible ‘hosts‘ file.## It should live in /etc/ansible/hosts## - Comments begin with the ‘#‘ character# - Blank line
Ansible詳解(二)
latest load 遠程 即使 centos fine oct syn srv Ansible系列命令 Ansible系列命令有如下: ansible:這個命令是日常工作中使用率非常高的命令之一,主要用於臨時一次性操作; ansible-doc:是Ansible模塊文
自動化運維工具——ansible詳解(一)
數據 修改時間 們的 ransac 例如 ces 備份文件 其中 其他 ansible 簡介 ansible 是什麽? ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、chef、func、fabric)的優點,實現了批量系
Ansible安裝部署及常用模塊詳解
就會 新用戶 特殊 packages add chdir epel change ima Ansible命令使用 Ansible語法使用ansible <pattern_goes_here> -m <module_name> -a <argum
ansible-playbook組件解析及操作全解
list use 準備 task 服務 遠程 少包 依賴 cts 轉載於http://www.178linux.com/7001 一、ansible-playbook介紹: playbook是由一個或多個”play”組成的列表。play的主要功能在於將事先歸為一組的主機裝
Ansible詳解(一)
bash share cau 類型 isp 界面 echo unless try_files 一、運維相關概念介紹二、ansible介紹三、ansible命令四、ansible常用模塊五、ansible配置文件詳解一、運維相關概念介紹運維:Opreations1.系統安裝:
Ansible 學習記錄 (四)配置文件詳解
主機列表 配置 transport 最值 nec conf sts 主機名 ngs 在這整個ansible配置中,最值得我們關註的是配置文件、主機列表文件, Ansible 配置 /etc/ansible/ansible.cfg ##ansible 配置文件,保留默認即可