Ansible變量

Ansible變量

定義變量規則:由字母/數字/下劃線組成,變量需要以字母開頭,ansible內置的關鍵字不能作為變量。

ansible中,可以將變量簡化為三個范圍:

  1. Global范圍(高):從命令行和ansible配置設置的變量。

  2. play范圍(中):set_facts,register,在play和相關結構中設置的變量。

  3. Host范圍(低):inventory的變量,在主機組和個別主機上設置的變量。

-e > set_facts > register > vars(vars_files) > 事實變量 > inventory

內置變量不參與排序

三個范圍的變量優先級由高到低,如果變量重復定義,則以優先級高的為準。

注冊和定義變量的各種方式

ansible中定義變量的方式有很多種,大致有:

  1. 將模塊的執行結果注冊為變量

  2. 直接定義字典類型的變量

  3. role中文件內定義變量

  4. 命令行傳遞變量

  5. 借助with_items迭代將多個task的結果賦值給一個變量

  6. inventory中的主機或主機組變量

  7. 內置變量

  8. 事實變量

vars定義變量

# eg---- name: testhosts: node1vars:- aa: 11- bb: 22- cc:cc1: 33cc2: 44?tasks:- name: create debug1debug:msg: aa is {{ aa }}?- name: debug2debug:var: bb?- name: debug3debug:msg: cc1 is {{ cc.cc1 }}- name: debug4debug: var: cc.cc2

Vars_files定義變量

vim var.yml
aa: 11bb: 22cc:cc1: 33cc2: 44
# eg---- name: testhosts: node1vars_files: /home/student/ansible/var.ymltasks:- name: create debug1debug:msg: aa is {{ aa }}?- name: debug2debug:var: bb?- name: debug3debug:msg: cc1 is {{ cc.cc1 }}- name: debug4debug: var: cc.cc2

register注冊變量

使用register選項,可以將當前task的輸出結果賦值給一個變量。

---- name: testhosts: node1tasks:- name: touchcopy:content: "hello world\n"dest: /tmp/aa?- name: cat /tmp/aashell:cmd: cat /tmp/aa?register: i?- name: debug idebug:var: i
# 得到變量i的結果為"i": {"changed": true,"cmd": "cat /tmp/aa","delta": "0:00:00.004095","end": "2025-09-01 16:07:27.999086","failed": false,"msg": "","rc": 0,"start": "2025-09-01 16:07:27.994991","stderr": "","stderr_lines": [],"stdout": "hello world","stdout_lines": ["hello world"]}}

當劇本運行錯誤時,變量仍然會被注冊

# 查看/tmp/bb文件,將查看結果賦值給變量i,/tmp/bb文件不存在---- name: testhosts: node1tasks:- name: cat /tmp/bbignore_errors: yesshell:cmd: cat /tmp/bb?register: i?- name: debug idebug:var: i
"i": {"changed": true,"cmd": "cat /tmp/bb","delta": "0:00:00.003762","end": "2025-09-01 16:16:04.346693","failed": true,"msg": "non-zero return code","rc": 1,"start": "2025-09-01 16:16:04.342931","stderr": "cat: /tmp/bb: No such file or directory","stderr_lines": ["cat: /tmp/bb: No such file or directory"],"stdout": "","stdout_lines": []}}

set_fact定義變量

set_fact與register的功能很相似,也是將值賦值給變量。它更像shell中變量的賦值方式,可以將某個變量的值賦值給另一個變量,也可以將字符串賦值給變量。

# 查看node1主機的所有事實變量
ansible node1 -m setup
# ansible node1 -m setup > file 將結果保存在一個文件中方便查找

常用事實變量

# ipv4地址
ansible_default_ipv4.address
# 或者 ansible_enp1s0.ipv4.address enp1s0是受控主機的網卡名稱# 完全合格域名(FQDN)
ansible_fqdn# 主機名稱
ansible_hostname# 內存大小
ansible_memtotal_mb# bios版本
ansible_bios_version# vda硬盤大小
ansible_devices.vda.size# 邏輯卷中卷組
ansible_lvm.vgs

通過命令傳入變量

ansible-playbook 劇本名稱 -e 傳入的變量及其值
---
- name: testhosts: node1tasks:- name: debug1debug:var: xingming- name: debug2debug:var: age
[student@master ansible]$ ansible-playbook a.yml -e 'xingming=ldh age=23'

主機清單中的變量

# 直接在主機后面定義,只有該主機可以調用該變量
node1 a=6# 將變量寫入組里,該組的成員可以調用這些變量
[web:vars]
a=1
b=2

除了可以在主機清單里定義變量外,還可以在/home/student/ansible目錄下創建host_vars和host_vars目錄下定義。

# host_vars中定義有兩種,以node1舉例
vim node1 # 這里node1是與主機清單inventory寫的保持一致,如果主機清單寫的是IP地址,這里也寫IP地址
a: 11# 或者
vim node1.yml
a: 22
# node1的優先級大于node1.yml的優先級

內置變量

groups # 主機清單中的分組情況
groups_names # 顯示主機的主機組的名稱
groups.all # 所有清單主機
inventroy_dir # 主機清單inventory的路徑
inventory_hostname # 顯示主機清單主機名稱

with_items疊加變量

可以給一個變量賦予多個值

---
- name: testhosts: node1tasks: - name: echo itemshell:cmd: echo "{{ item }}"with_items:- a- b- cregister: i- name: echo adebug:var: i.results[0].stdout- name: echo bdebug:var: i.results[1].stdout- name: echo cdebug:var: i.results[2].stdout

管理機密

Ansible可能需要訪問密碼或者API密鑰等敏感數據,以便配置受控主機。通常,此信息可能以純文本形式存儲在清單變量或其他ansible文件中。但若如此,任何有權訪問ansible文件的用戶或者存儲這些ansible文件的版本控制系統都能夠訪問此數據敏感數據。這顯然存在安全風險。

使用ansible隨附的ansible vault可以加密和解密任何由ansible使用的結果化數據文件。若要使用ansible vault,可通過一個名為ansible-vault的命令行工具創建、編輯、加密、解密和查看文件。Ansible vault可以加密任何由ansible使用的結構化數據文件。這可能包括清單變量、playbook中含有的變量文件、在執行playbook時作為參數傳遞的變量文件,或者ansible角色中定義的變量。

ansible-vault --helpansible-vault create # 創建新的加密文件
ansible-vault encrypt # 對已有文件進行加密
ansible-vault decrypt # 解密加密文件,直接解密。加入 --output=新的名稱,解密文件并存放為其他名稱。此時新文件為解密狀態,原文件仍為加密狀態
ansible-vault view # 查看加密文件內容
ansible-vault edit # 編輯加密文件       
ansible-vault rekey # 修改加密文件的密碼  

加密過的文件無法使用cat查看、vim編輯以及ansible-playbook運行。

# 運行加密文件
ansible-playbook --ask-vault-pass

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

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

相關文章

Elasticsearch 核心特性與應用指南

最近在準備面試,正把平時積累的筆記、項目中遇到的問題與解決方案、對核心原理的理解,以及高頻業務場景的應對策略系統梳理一遍,既能加深記憶,也能讓知識體系更扎實,供大家參考,歡迎討論。一、核心優勢 Ela…

力扣115:不同的子序列

力扣115:不同的子序列題目思路代碼題目 給你兩個字符串 s 和 t ,統計并返回在 s 的 子序列 中 t 出現的個數。 測試用例保證結果在 32 位有符號整數范圍內。 思路 首先我們來考慮特殊情況,當s串的長度小于t串時s串肯定就沒有t串了。其他情況我們就需…

2004-2023年各省生活垃圾無害化處理率數據(無缺失)

2004-2023年各省生活垃圾無害化處理率數據(無缺失) 1、時間:2004-2023年 2、來源:國家統計局、統計年鑒 3、指標:生活垃圾無害化處理率 4、范圍:30省 5、指標解釋:生活垃圾無害化處理率指報…

【Python練習題】Python小白必練100題答案-第21-40題

練習題直達鏈接Python小白必練100題答案-第1-20題點我直達Python小白必練100題答案-第21-40題點我直達Python小白必練100題答案-第41-60題點我直達Python小白必練100題答案-第61-80題點我直達Python小白必練100題答案-第81-97題點我直達目錄專欄導讀循環結構 字符串操作第三部…

添加?件--場景?

添加?件–場景? 學習到這?,我們已經清楚了如何向倉庫中添加?件,并且對于?作區、暫存區、版本庫也有了?定的認識。那么我們再展??種添加?件的場景,能加深對?作區、暫存區、版本庫的理解,?例如下: roothcss-e…

華為網路設備學習-31(BGP協議 六)

BGP路由屬性的幾種常見使用方法: 29章是 BGP路由匯總 與 as-path-filter(正則表達式) 30章是 Community 的使用方法 本章是 ip前綴列表ip-prefix 、 路由過濾 filter-policy 和路由策略 route-policy 一、在BGP中的 ip前綴列表&#xf…

Windows PostgreSQL JDBC驅動安裝包位置

要在Windows系統上獲取PostgreSQL JDBC驅動安裝包(后綴為.jar的文件),可通過以下官方及常用渠道獲取,具體位置如下: ###🔧 1. 官方網站下載(推薦) 下載地址:https://jdb…

機器學習從入門到精通 - 聚類算法大比拼:K-Means、DBSCAN實戰與評估陷阱

機器學習從入門到精通 - 聚類算法大比拼:K-Means、DBSCAN實戰與評估陷阱 開場白:推開無監督學習的大門 朋友們,不知道你們有沒有對著堆積如山、沒有標簽的數據發過愁?想從里面找出點規律,分組什么的,結果發…

AI 重構內容創作:從文案生成到視頻剪輯,創作者該如何與 AI 協同共生?

一、引言:AI 掀起內容創作的 “重構浪潮”?行業現象引入:列舉 AI 在內容創作領域的爆發式應用案例(如某平臺 AI 文案工具日生成量破百萬、AI 視頻剪輯軟件用戶增長超 300%)?創作者需求變化:通過調研數據說明創作者對…

后端一次性返回十萬條數據時,前端需要采用多種性能優化策略來避免頁面卡頓

當后端一次性返回十萬條數據時,前端需要采用多種性能優化策略來避免頁面卡頓。以下是主要的優化方案: 分頁加載 - 將數據分批次加載顯示虛擬滾動 - 只渲染可視區域內的數據數據懶加載 - 按需加載數據Web Workers - 在后臺線程處理數據時間切片 - 分散渲染…

基于-輕量級文檔搜索系統的測試報告

文章目錄一、項目背景二、項目功能三、測試計劃(一)測試用例設計(二)測試用例實現1.功能測試2.界面測試3.兼容性測試4.易用性測試5.安全性測試一、項目背景 1.基于輕量級文檔檢索系統采用C技術棧來實現,同時使用了本地…

編輯器vim(Linux)

Linux下開發工具是獨立的寫代碼——編輯器 vim編譯代碼——gcc/g調試——gdb、cgdb構建工具——makefile、make、cmakevim只用來寫代碼注意:直接用vim打開一個不存在的文件并保存退出,就會自動生成該文件vim有多種模式命令模式(Normal Mode&a…

GitLab,2025最新如何配置中的SSH key步驟

電腦右鍵先檢查,是否有公鑰 git cat ~/.ssh/id_rsa.pub下面是有,不用生成公鑰,沒有就要生成生成本地電腦公鑰, 建議用第二種 //第一種ssh-keygen -t rsa//第二種------- 1.打開git bash,輸入:ssh-keygen -t rsa -C “你的郵箱”ss…

華為HCIE證書多久續一次費?費用多少?

根據華為官方政策,華為認證HCIE的有效期為3年,有效期自證書正式發放之日起計算,考生可通過華為人才在線官網登錄個人賬號,在“我的證書”欄目中查詢具體有效期起止時間。一、HCIE證書到期后的續證方式 1.重考對應HCIE的認證考試&a…

提升文本到圖像強化學習穩定性:Pref - GRPO算法如何革新圖像生成?

提升文本到圖像強化學習穩定性:Pref - GRPO算法如何革新圖像生成? 在文本到圖像生成領域,強化學習正重塑著模型與人類偏好的對齊方式。本文聚焦于一種創新的基于成對偏好獎勵的GRPO方法(Pref - GRPO),它通…

Linux UDisks守護進程曝本地提權漏洞CVE-2025-8067,PoC已發布

漏洞概述安全研究人員在Linux環境中廣泛使用的磁盤管理組件UDisks守護進程中,發現了一個嚴重漏洞(編號CVE-2025-8067,CVSS評分8.5)。該漏洞已報告給紅帽產品安全團隊,并在UDisks更新版本中得到修復。技術細節該漏洞存在…

uniapp 開發上架 iOS App全流程

操作文檔網址:https://ask.dcloud.net.cn/article/152 操作學習視頻地址:uniapp打包上線微信小程序、安卓、IOS流程_嗶哩嗶哩_bilibili 第一步:注冊蘋果 iOS 個人開發者賬號 費用說明 ?個人開發者賬號?:適用于獨立開發者或小…

Sqlsugar補充自定義模板

DBFirst默認創建所有實體CreateClassFile()的第二個參數為生成實體類命名空間//.net6以下 db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\1", "Models"); //.net6以上 string加? db.DbFirst.IsCreateAttribute().StringNullable().CreateCl…

LeetCode 392.判斷子序列

給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。 字符串的一個子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對位置形成的新字符串。(例如,"ace"是"abcde"的一個子序列&#x…

邏輯回歸:從原理到實戰的完整指南

在機器學習中,分類任務是最常見的應用場景之一。而邏輯回歸(Logistic Regression),盡管名字中有“回歸”,實際上是一種非常強大且廣泛應用的二分類模型。它簡單、高效、可解釋性強,是數據科學初學者入門分類…