Ansible playbook介紹及應用

2021-10-11 16:19:57 字數 4581 閱讀 6511

ansible 系統由控制主機對被管節點的操作方式可分為兩類,即adhoc和playbook:

使用單個模組,支援批量執行單條命令。ad-hoc 命令是一種可以快速輸入的命令,而且不需要儲存起來的命令。就相當於bash中的一句話shell。

ansible主要管理方式,也是ansible功能強大的關鍵所在。playbook通過多個task集合完成一類功能,如web服務的安裝部署、資料庫伺服器的批量備份等。可以簡單地把playbook理解為通過組合多條ad-hoc操作的配置檔案。

playbook 是 ansible 用於配置,部署,和管理被控節點的劇本。

通過 playbook 的詳細描述,執行其中的一系列 tasks ,可以讓遠端主機達到預期的狀態。playbook 就像 ansible 控制器給被控節點列出的的一系列 to-do-list ,而被控節點必須要完成。

也可以這麼理解,playbook 字面意思,即劇本,現實中由演員按照劇本表演,在ansible中,這次由計算機進行表演,由計算機安裝,部署應用,提供對外服務,以及組織計算機處理各種各樣的事情。

hosts: #執行任務的主機組

tasks: #任務列表

vars: #變數

remote_user: #連線遠端主機的使用者

name: #單個任務的說明,乙個name乙個任務,單個name下只能使用乙個模組

ignore_errors: # 忽略任務的報錯,繼續往下執行

格式簡介

playbook由ymal語言編寫。yaml

(/ˈjæməl/

)參考了其他多種語言,包括:xml、c語言、python、perl以及電子郵件格式rfc2822,clark evans在2023年5月在首次發表了這種語言,另外ingy döt net與orenben-kiki也是這語言的共同設計者。

1、檔案的第一行應該以 "---"

(三個連字元)開始,表明ymal檔案的開始。

2、在同一行中,#之後的內容表示注釋,類似於shell,python和ruby。

3、ymal中的列表元素以」-」開頭然後緊跟著乙個空格,後面為元素內容。

4、同乙個列表中的元素應該保持相同的縮排。否則會被當做錯誤處理。

5、play中hosts,variables,roles,tasks等物件的表示方法都是鍵值中間以":"分隔表示,":"後面還要增加乙個空格。

編寫以下playbook檔案

- name: "安裝httpd"

- name: "啟動httpd"

# 使用ansible-playbook執行playbook檔案

綠色代表執行成功,系統保持原樣

黃色代表系統代表系統狀態發生改變

紅色代表執行失敗,顯示錯誤輸出

執行有三個步驟:1、收集facts 2、執行tasks 3、報告結果

語法檢測

# 編寫playbook如下:

---

- hosts: webservers

tasks:

- name: "分發nginx原始碼包"

copy: src=/root/nginx-1.18.0.tar.gz dest=/root/

- name: "解壓nginx原始碼包"

shell: cd /root/ && tar xzf nginx-1.18.0.tar.gz

- name: "安裝依賴環境"

yum: name=gcc,pcre-devel,openssl-devel state=latest

- name: "編譯並安裝nginx"

shell: cd /root/nginx-1.18.0 && .

/configure && make && make install

- name: "啟動nginx"

shell: /usr/local/nginx/sbin/nginx

使用ansible-playbook執行playbook檔案

[root@localhost ~]

# ansible-playbook nginx.yml

編寫playbook如下:

---

- hosts: webservers

tasks:

- name: "開啟nginx"

shell: /usr/local/nginx/sbin/nginx

ignore_errors: true #可忽略任務的報錯依次往下執行

- name: "關閉防火牆"

service: name=firewalld state=stopped

- name: "建立測試頁面"

shell: echo $(date "+%f"

) > /usr/local/nginx/html/index.html

使用ansible-playbook執行playbook檔案

[root@localhost ~]

# ansible-playbook start_nginx.yml

瀏覽器測試結果

編寫以下playbook檔案

[root@localhost ~]

# vim test_page.yml

[root@localhost ~]

# cat test_page.yml ---

- hosts: webservers

vars:

page: hello world

tasks:

- name: "建立測試頁面"

shell: echo

"}" > /usr/local/nginx/html/index.html

[root@localhost ~]

#

使用ansible-playbook執行playbook檔案

[root@localhost ~]

# ansible-playbook test_page.yml

瀏覽器測試結果

編寫模板檔案如下:

[root@localhost ~]

# vim index.html.j2

[root@localhost ~]

# cat index.html.j2

}[root@localhost ~]

#

編寫playbook檔案如下

[root@localhost ~]

# vim test_page.yml

[root@localhost ~]

# cat test_page.yml ---

- hosts: webservers

vars:

page: hello my friend

tasks:

- name: "建立測試頁面"

template: src=/root/index.html.j2 dest=/usr/local/nginx/html/index.html

[root@localhost ~]

#

使用ansible-playbook執行playbook檔案

[root@localhost ~]

# ansible-playbook test_page.yml

瀏覽器測試結果

ansible playbook建立使用者

建立失敗,沒有許可權,授權 2.建立使用者及密碼 3.引入使用者列表檔案建立使用者,密碼加密 root server1 ansible cat createuser.yml hosts localhost vars files userlist.yml tasks name create user ...

ansible playbook同步模組

deploy.yml 需要變數傳參 hosts sudo yes tasks synchronize src dest archive no recursive yes rsync opts update,exclude git 執行 傳參 extra vars archive 是否採用歸檔模式同步...

ansible playbook使用簡介

ansible模組有copy file cron group user yum service get url command script shell raw ping 下面來介紹playbook 像很多其他服務配置檔案管理方式一樣,ansible使用一種比較直白的方法來描述自己的任務配置檔案 劇...