Ansible:playbook的高級用法

文章目錄

  • 1. handlers與notify
  • 2. tags組件
  • 3. playbook中使用變量
    • 3.1使用 setup 模塊中變量
    • 3.2在playbook 命令行中定義變量
    • 3.3在playbook文件中定義變量
    • 3.4使用變量文件
    • 3.5主機清單文件中定義變量
      • 主機變量
      • 組(公共)變量

1. handlers與notify

  • Handlers:是task列表,用于當關注的資源發生變化時,采取一定的操作。
  • Notify:被觸發的操作,僅在所有的變化發生完成后一次性地執行指定操作。在notify中列出的操作成為handler,也即notify中調用handler中定義的操作。
  • 例如:更新配置文件,重新啟動playbook,系統不會重啟服務,這時可以通過定義一個notify去重啟服務,handlers負責執行重啟。
  1. 寫一個playbook文件安裝httpd
vim httpd.yml
---
- hosts: webserversremote_user: roottasks:- name: install httpd packageyum: name=httpd- name: copy conf filecopy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes- name: start serviceservice: name=httpd state=started enabled=yes
ansible-playbook httpd.yml

在這里插入圖片描述
2. 查看當前的端口狀態

ansible webservers -a 'ss -ntl'

在這里插入圖片描述

  1. 修改httpd的端口,從8080修改為81
vim ./files/httpd.conf

在這里插入圖片描述
在這里插入圖片描述

  1. 現在配置文件修改過了,我們在yaml文件中增加handlers與notify觸發機制
vim httpd.yml
---
- hosts: webserversremote_user: roottasks:- name: install httpd packageyum: name=httpd- name: copy conf filecopy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yesnotify: restart service  # 當配置文件改變時,調用handlers里面的restart service- name: start serviceservice: name=httpd state=started enabled=yeshandlers: # 當上面的某個或某些任務改變時,執行下面的任務- name: restart serviceservice: name=httpd state=restarted
  1. 重新執行playbook,就可以檢測到文件的修改,觸發notify和handlers操作。
ansible-playbook httpd.yml

在這里插入圖片描述
6. 最后查看端口狀態,發現8080端口已經換成了81:

ansible webservers -a 'ss -ntl'

在這里插入圖片描述

在這里插入圖片描述
如果報錯,說明端口號沒有權限,換一個端口號。
systemctl status httpd.service
在這里插入圖片描述


notify和handlers操作可以同時定義多個,相當于多個函數其實可以同時調用。

2. tags組件

在大型項目當中,通常一個playbook會有非常多的task。而我們每次執行這個playbook時,都會將所有task運行一遍。
而事實上,在實際使用過程中,我們可能只是想要執行其中的一部分任務而已,并不想把整個playbook完整跑一遍。這個時候就需要用到tags。
通過tags,我們可以給playbook中的某一些任務打上“標簽”,而在執行playbook的時候,我們可以通過選定標簽的方式指定只執行哪一些任務或者不執行哪一些任務。

  1. 創建一個playbook文件
vim httpd_tag.yml

#install httpd
- hosts: webserversremote_user: rootgather_facts: notasks:- name: Install httpdyum: name=httpd state=present- name: Install configure filecopy: src=files/httpd.conf dest=/etc/httpd/conf/#定義tagstags: config- name: web htmlcopy: src=files/index.html  dest=/var/www/html/- name: start serviceservice: name=httpd state=started enabled=yes#定義tagstags: service
  1. 查看當前tags列表(不知道命令就用–help查看)
ansible-playbook --list-tags httpd_tag.yml

在這里插入圖片描述
3. 再次修改httpd的端口號

vim files/httpd.conf

在這里插入圖片描述
4. 針對linux101這一臺主機運行config 這個tag代碼段。

ansible-playbook -t config httpd_tag.yml --limit linux101ansible linux101 -a 'ss -ntl'
  1. 最后給它卸掉(PS:因為我的電腦…)
ansible-playbook  remove_httpd.yml 

在這里插入圖片描述

3. playbook中使用變量

  • 變量名:僅能由字母、數字和下劃線組成,且只能以字母開頭。
  • 變量定義:variable=value

范例:http_port=80

  • 變量調用方式:通過{{ variable_name }} 調用變量,且變量名前后建議加空格,有時用“{{ variable_name }}”才生效
  • 變量來源:
  1. ansible 的 setup facts 遠程主機的所有變量都可直接調用
  2. 通過命令行指定變量,優先級最高 ansible-playbook -e varname=value
  3. 在playbook文件中定義
   vars:- var1: value1- var2: value2
  1. 在獨立的變量YAML文件中定義
   - hosts: allvars_files:- vars.yml
  1. /etc/ansible/hosts 中定義
  • 主機(普通)變量:主機組中主機單獨定義,優先級高于公共變量
  • 組(公共)變量:針對主機組中所有主機定義統一變量

6.在role中定義

3.1使用 setup 模塊中變量

本模塊自動在playbook調用,不要用ansible命令調用

  • 案例:使用setup變量
---
#var.yml
- hosts: allremote_user: root#調用系統變量必須要收集,gather_facts: yes或者不寫gather_facts: yestasks:- name: create log filefile: name=/data/{{ ansible_nodename }}.log state=touch owner=yu mode=600
ansible-playbook  var.yml

在這里插入圖片描述

ansible all -a 'ls /data'

在這里插入圖片描述

3.2在playbook 命令行中定義變量

在playbook中寫變量,在命令行賦值調用

范例:

vim val_install.yml
---
- hosts: webserversremote_user: roottasks:- name: install packageyum: name={{ pkname }} state=present
ansible-playbook  –e pkname=httpd  val_install.yml

在這里插入圖片描述

3.3在playbook文件中定義變量

范例:

vim var_uninstall.yml
---
- hosts: webserversremote_user: rootvars:- pkname: httpdtasks:- name: uninstall pknameyum: name={{ pkname }} state=absent

直接運行,使用默認參數:

ansible-playbook var_uninstall.yml

在運行時重新給變量賦值,會修改參數:

ansible-playbook -e 'pkname=nginx' var_uninstall.yml

3.4使用變量文件

可以在一個獨立的playbook文件中定義變量,在另一個playbook文件中引用變量文件中的變量,比playbook中定義的變量優化級高

  1. 新建playbook定義變量
vim vars.yml
---
# variables file
var1: httpd
var2: nginx
vim  var_log.yml
---
- hosts: webserversremote_user: rootvars_files:- vars.yml
#   - /root/playbook/vars.ymltasks:- name: create httpd logfile: name=/data/{{ var1 }}.log state=touch- name: create nginx logfile: name=/data/{{ var2 }}.log state=touch
?ansible-playbook var_log.yml
ansible all -a 'ls /data/ '

在這里插入圖片描述

3.5主機清單文件中定義變量

主機變量

在inventory 主機清單文件中為指定的主機定義變量以便于在playbook中使用

組(公共)變量

在inventory 主機清單文件中賦予給指定組內所有主機上的在playbook中可用的變量,如果和主機變是同名,優先級低于主機變量。

范例:

  1. 打開hosts文件,添加主機變量和公共變量
vim /etc/ansible/hosts
[webservers]
linux101 hname=www1 domain=yu.io #添加主機變量(優先級高于公共變量)
linux102 hname=www1 domain=yhx.com[webservers:vars]#添加webservers的組變量(公共變量)
mark="-"
domain=edu.cn
  1. 調用hostname模塊,修改主機名
#先想想主機名應該是什么
ansible webservers -m hostname -a 'name={{ hname}}{{ mark }}{{ domain }}'
ansible all -a 'hostname'

在這里插入圖片描述

因為主機變量優先級高于組變量(公共變量),所以linux101的主機名應該是:www1-yu.io,linux102的主機名應該是:www1.yhx.com.

  1. 還可以通過行命令來指定變量,這時候指定的變量可以覆蓋之前文件中定義的變量
#命令行指定變量: 
ansible webservers -e domain=sch.com -m hostname -a 'name={{                                                                hname }}{{ mark }}{{ domain }}'
ansible all -a 'hostname'

在這里插入圖片描述
4. 再將hostname修改回去

ansible linux101 -m hostname -a 'name=linux101' 
ansible linux102 -m hostname -a 'name=linux102'
ansible all -a 'hostname'

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74465.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74465.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74465.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是msvcp140.dll?msvcp140.dll丟失的解決方法又有哪些?

msvcp140.dll 是 Microsoft Visual C Redistributable 的核心動態鏈接庫文件,許多軟件和游戲依賴它來運行。當系統提示“msvcp140.dll丟失”時,意味著該文件無法被正確加載,導致程序崩潰或無法啟動。本文將提供最全面的 msvcp140.dll丟失的解…

(九)圖形管線

一圖說明問題 頂點數據->頂點著色器->細分著色器->幾何著色器->光柵化->片元著色器->顏色混合 創建圖形管線函數放在后面位置 void MyApplication::initVulkan() { createInstance(); createSurface(); pickPhysicalDevice(); createLogicalDevice(); cre…

《inZOI(云族裔)》50+MOD整合包

載具 RebelCore - 年齡和時間 mod啟動器 優化補丁 去除霧氣 坦克模型 菜單 前置 跳過啟動 更好性能 等 共計50MOD整合 在游戲的世界里,追求更豐富、更優質的體驗是玩家們永恒的主題。RebelCore 這款游戲通過精心打造的 50MOD 整合,為玩家帶來了前所未有的…

國家天文臺攜手阿里云,發布國際首個太陽大模型“金烏”

2025年4月1日,中國科學院國家天文臺與阿里云共同宣布推出全球首個太陽物理大模型“金烏”,在太陽活動預測領域實現顛覆性突破——其針對破壞性最強的M5級太陽耀斑預報準確率高達91%,遠超傳統數值模型,標志著人類對太陽的認知邁入“…

U盤實現——BOT 常用命令

文章目錄 U盤實現——BOT 常用命令命令格式CBWCSW數據傳輸條件命令傳輸數據傳輸狀態傳輸命令匯總INQUIRY Command:12h數據格式抓包READ FORMAT CAPACITIES Command: 23h數據格式抓包READ CAPACITY Command: 25h數據格式抓包TEST UNIT READY Command: 00h數據格式抓包WRITE(10) …

【Axure元件分享】月份范圍選擇器

Axure月份范圍選擇器是一個月份范圍下拉篩選元件,支持月份范圍定義選擇。組件自動加載系統當前年月份作為默認值,用戶可通過箭頭圖標或鍵盤快捷鍵快速切換年份月份,其樣式支持高度定制,包括顏色主題、字體尺寸及交互反饋&#xff…

JavaScript基礎-移動端常用開發框架

隨著移動互聯網的發展,越來越多的應用和服務需要支持移動設備。為了提高開發效率和用戶體驗,開發者們依賴于一些成熟的JavaScript框架來構建響應迅速、功能豐富的移動Web應用。本文將介紹幾款廣泛使用的移動端開發框架,并通過具體的示例展示它…

數字人訓練數據修正和查看 不需要GPU也能運行的DH_live-加載自己訓練-

自己訓練模pth報錯 le "D:\ai\dh_live\app.py", line 42, in demo_mini interface_mini(asset_path, wav_path, output_video_name) File "D:\ai\dh_live\demo_mini.py", line 21, in interface_mini renderModel_mini.loadModel("checkpoi…

基姆拉爾森計算公式

基姆拉爾森計算公式(Zellers Congruence 的變體)是一種快速根據公歷日期計算星期幾的數學公式。其核心思想是通過對年月日的數值進行特定變換和取模運算,直接得到星期幾的結果。 公式定義 對于日期 年-月-日,公式如下&#xff1a…

數字孿生在智慧城市中的前端呈現與 UI 設計思路

一、數字孿生技術在智慧城市中的應用與前端呈現 數字孿生技術通過創建城市的虛擬副本,實現了對城市運行狀態的實時監控、分析與預測。在智慧城市中,數字孿生技術的應用包括交通流量監測、環境質量分析、基礎設施管理等。其前端呈現主要依賴于Web3D技術、…

基于CNN-LSTM的深度Q網絡(Deep Q-Network,DQN)求解移動機器人路徑規劃,MATLAB代碼

一、深度Q網絡(Deep Q-Network,DQN)介紹 1、背景與動機 深度Q網絡(DQN)是深度強化學習領域的里程碑算法,由DeepMind于2013年提出。它首次在 Atari 2600 游戲上實現了超越人類的表現,解決了傳統…

結構型設計模式。持續更新

結構型 - 外觀 提供了一個統一的接口,用來訪問子系統中的一群接口,從而讓子系統更容易使用。 public class SubSystem {public void turnOnTV() {System.out.println("turnOnTV()");}public void setCD(String cd) {System.out.println(&quo…

從零構建大語言模型全棧開發指南:第五部分:行業應用與前沿探索-5.1.2行業落地挑戰:算力成本與數據隱私解決方案

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 從零構建大語言模型全棧開發指南-第五部分:行業應用與前沿探索5.1.2 行業落地挑戰:算力成本與數據隱私解決方案1. 算力成本挑戰與優化策略1.1 算力成本的核心問題1.2 算力優化技術方案2. 數據隱私挑戰…

量子計算與人工智能融合的未來趨勢

最近研學過程中發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊鏈接跳轉到網站人工智能及編程語言學習教程。讀者們可以通過里面的文章詳細了解一下人工智能及其編程等教程和學習方法。 在當今科技飛速發展…

六種光耦綜合對比——《器件手冊--光耦》

目錄 十二、光耦 簡述 基本結構 工作原理 主要特點 應用領域 優勢與局限性 選擇光耦時需要考慮的因素 詳盡闡述 1 柵極驅動光耦 基本結構 工作原理 主要特點 應用領域 選擇柵極驅動光耦時需要考慮的因素 典型產品示例 總結 2 邏輯輸出光耦 基本結構 工作原理 主要特點 應用…

【藍橋杯嵌入式——學習筆記一】2016年第七屆省賽真題重難點解析記錄,閉坑指南(文末附完整代碼)

在讀題過程中發現本次使用的是串口2,需要配置串口2。 但在查看產品手冊時發現PA14同時也是SWCLK。 所以在使用串口2時需要拔下跳線帽去連接CH340。 可能是用到串口2的緣故,在燒錄時發現報了一個錯誤。這時我們要想燒錄得按著復位鍵去點擊燒錄&#xff0c…

三、GPIO

一、GPIO簡介 GPIO(General Purpose Input Output)通用輸入輸出口GPIO引腳電平:0V(低電平)~3.3V(高電平),部分引腳可容忍5V 容忍5V,即部分引腳輸入5V的電壓,…

Java實戰報錯

哪錯了 Preview 在這段Java代碼中,map.put("Cc", 20); 這一行的鍵 "Cc" 被標記為錯誤。這可能是由于以下幾種原因: 鍵值類型不匹配:雖然在你的代碼中沒有顯示出來,但確保 HashMap 的鍵是 String 類型&#xf…

25大唐杯賽道一本科B組知識點大綱(下)

5G/6G網絡技術知識點(10%) 工程概論及通信工程項目實踐(20%) 5G垂直行業應用知識點(20%) ???為重點知識,盡量要過一遍哦 大唐杯賽道一國一備賽思路 大唐杯國一省賽回憶錄--有付出就會有收…

docker的文件系統Overlay2

OverlayFS(Overlay2)文件系統深度解析 Overlay2 是 Docker 默認使用的聯合文件系統(Union Filesystem),用于管理容器鏡像的分層存儲和容器運行時文件系統的合并。它基于 Linux 內核的 OverlayFS 技術,是早…