自動化運維-ansible中的變量運用

自動化運維-ansible中的變量運用

一、變量命名規則

  • 組成:字母、數字、下劃線。
  • 必須字母開頭。
    • 合法: app_port, web_1, varA
    • 非法: 2_var (以數字開頭), my-var (包含其他字符), _private (以下劃線開頭)
  • 避免使用內置關鍵字:例如 hosts, tasks, name, vars, when, register 等。

二、變量的優先級

  1. Global范圍(高):從命令行和ansible配置設置的變量
  2. play范圍(中):set_fact、register和在play和相關結構中設置的變量
  3. Host范圍(低):inventory、facts的變量,在主機組和個別主機上設置的變量

命令行 > Playbook 中的設置 > Inventory 中的設置 > 角色默認值

越“具體”的設置,優先級越高

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

  1. vars 定義變量
  2. Vars_files 定義變量
  3. register 注冊變量
  4. set_fact 定義變量
  5. 通過命令傳入變量
  6. 主機清單中的變量
  7. 內置變量
  8. With_itens 疊加變量

四、對各種方式的示例

  1. vars 定義變量

    [student@master ansible] vim a.yml
    # 編輯內容如下
    ---
    - name: test1hosts: node1vars:- a: 1- b: 2- c:c1: 3c2: 4tasks:- name: test11debug:msg: this is {{ a }}- name: test12debug:msg: "{{ b }}"- name: test13debug:msg: "{{ c.c1 }}"- name: test14debug:var: c.c2
    

    在這里插入圖片描述

  2. Vars_files 定義變量

    [student@master ansible] vim yyy
    # 編輯內容如下
    a: 1
    b: 2
    c: c1: 3c2: 4
    
    [student@master ansible] vim b.yml
    # 編輯內容如下
    ---
    - name: test2hosts: node1vars_files: /home/student/ansible/yyytasks:- name: test21debug:msg: this is {{ a }}- name: test22debug:msg: "{{ b }}"- name: test23debug:msg: "{{ c.c1 }}"- name: test24debug:var: c.c2
    

    在這里插入圖片描述

  3. register 注冊變量

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

    以下示例:/tmp/file1 的內容為 123321 ,/tmp/file11 不存在

    [student@master ansible] vim c.yml
    # 編輯內容如下
    ---
    - name: test3hosts: node1tasks:- name: test31shell:cmd: cat /tmp/file1register: yy- name: test32debug:var: yy.stdout- name: test33shell:cmd: cat /tmp/file11register: yyyyignore_errors: yes- name: test34debug:var: yyyy.stdout
    

    在這里插入圖片描述

    如圖所示:無論輸出結果是否正確,都會賦值給自定義的變量

  4. set_fact 定義變量

    可以將某個變量的值賦值給另?個變量,也可以將字符串賦值給變量

    事實變量是 Ansible 自動發現并設置的關于受控主機的系統信息屬性的變量

    每個主機都有自己獨有的一套事實變量,是Ansible預定義的,有固定的命名格式(通常以 ansible_ 為前綴),你不能隨意改變這些變量的名字

    [student@master ansible] ansible node1 -m setup > z
    

    使用 ansible 主機名 -m setup 可以查看主機的所有事實變量

    為了方便查找,一般會重定向到自定義的文件中

    常用變量名對應的含義
    ansible_default_ipv4.addressipv4地址
    ansible_enp1s0.ipv4.addressansible_網卡名稱.ipv4.address
    ansible_fqdn完全合格域名(FQDN)
    ansible_hostname主機名稱
    ansible_memtotal_mb內存大小
    ansible_bios_versionbios版本
    ansible_devices.vda.sizevda硬盤大小
    ansible_devices.vdb.sizevdb硬盤大小
    ansible_lvm.vgs邏輯卷中卷組
    [student@master ansible] vim d.yml
    # 編輯內容如下
    ---
    - name: test4hosts: node1tasks:- name: test41debug:msg: the ipv4 address of {{ ansible_hostname }} is {{ ansible_default_ipv4.address }}
    

    在這里插入圖片描述

  5. 通過命令傳入變量

    [student@master ansible] vim e.yml
    # 編輯內容如下
    ---
    - name: test5hosts: node1tasks:- name: test51debug:msg: this is {{ aa }}- name: test52debug:var: bb
    

    在這里插入圖片描述

  6. 主機清單中的變量

    在主機清單中定義變量

    [student@master ansible] vim inventory
    # 編輯內容如下
    node5[testa]
    node1
    node2[testa:vars]
    var1='ni'
    var2='hao'[testb]
    node3
    node4
    
    [student@master ansible] vim f.yml
    # 編輯內容如下
    ---
    - name: test6hosts: node1tasks:- name: test61debug:msg: "{{ var1 }}"- name: test62debug:msg: var2
    

    在這里插入圖片描述

    除了可以在主機清單里定義變量外,還可以在 /etc/ansible(root用戶)或 /home/用戶名/ansible(普通用戶) 目錄下創建group_vars和host_vars目錄下定義變量

    node1文件名以主機命名,還可以命名為node1.yml

    [student@master ansible] mkdir host_vars
    [student@master host_vars] vim node1
    [student@master host_vars] vim node1.yml
    
    # 在 node1 中編輯內容如下
    var1: t1
    var2: t2# 在 node1.yml 中編輯內容如下
    var1: t3
    var2: t4
    

    編輯 playbook ,看輸出變量的值

    [student@master ansible] vim g.yml
    # 編輯內容如下
    ---
    - name: test7hosts: node1tasks:- name: test71debug:msg: "{{ var1 }}"- name: test72debug:var: var2

    在這里插入圖片描述

    發現輸出結果為 node1 中定義的值

    如果node1與node1.yml同時存在,則 node1的優先級更高

    除了在 host_vars 目錄下,在 group_vars 目錄下也同理

    如果 host_vars 目錄和 group_vars 目錄同時存在,則 host_vars 的優先級更高

  7. 內置變量

    是 Ansible 自動預定義和設置的變量。你無需使用 set_factvars 來聲明它們

    為你提供關于當前運行環境、Inventory(清單)、Playbook 本身以及連接信息等重要上下文

    常用變量名對應作用
    ansible_version顯示ansible的版本
    inventory_hostname顯示主機清單主機名稱
    play_hosts顯示當前playbook實際要操作的所有主機的列表
    groups顯示主機清單中的組與主機的對應關系
    groups.all顯示所有清單主機
    group_names顯示主機的主機組的名稱
    inventory_dir顯示主機清單所在的目錄
  8. With_itens 疊加變量

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

    讓一個任務對列表中的每個項目執行一次

    [student@master ansible] vim h.yml
    # 編輯內容如下
    ---
    - name: test8hosts: node1tasks:- name: test81shell:cmd: echo "{{ item }}"with_items:- user1- user2- user3register: xx- name: test82debug:var: xx.results[0].stdout- name: test83debug:var: xx.results[1].stdout- name: test84debug:var: xx.results[2].stdout
    

    在這里插入圖片描述

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

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

相關文章

深入學習并發編程中的volatile

volatile 的作用 保證變量的內存可見性禁止指令重排序1.保證此變量對所有的線程的可見性,當一個線程修改了這個變量的值,volatile 保證了新值能立即同步到主內存,其它線程每次使用前立即從主內存刷新。 但普通變量做不到這點,普通…

使用Java獲取本地PDF文件并解析數據

獲取本地文件夾下的PDF文件要獲取本地文件夾下的PDF文件,可以使用Java的File類和FilenameFilter接口。以下是一個示例代碼片段:import java.io.File; import java.io.FilenameFilter;public class PDFFileFinder {public static void main(String[] args…

吳恩達機器學習補充:決策樹和隨機森林

數據集:通過網盤分享的文件:sonar-all-data.csv 鏈接: https://pan.baidu.com/s/1D3vbcnd6j424iAwssYzDeQ?pwd12gr 提取碼: 12gr 學習來源:https://github.com/cabin-w/MLBeginnerHub 文末有完整代碼,由于這里的代碼和之前的按…

Shell腳本一鍵監控平臺到期時間并釘釘告警推送指定人

1. 監控需求客戶側有很多平臺需要定期授權,授權后管理后臺才可正常登錄,為避免授權到期,現撰寫腳本自動化監控平臺授權到期時間,在到期前15天釘釘或其他媒介提醒。2. 監控方案2.1 收集平臺信息梳理需要監控的平臺地址信息&#xf…

華為HCIE數通含金量所剩無幾?考試難度加大?

最近網上很火的一個梗——法拉利老了還是法拉利,這句話套在華為HCIE數通身上同樣適用,華為認證中的華為數通和云計算兩大巨頭充斥著大家的視野里面,也更加廣為人知,但隨著時代的發展,華為認證體系的調整,大…

#數據結構----2.1線性表

在數據結構的學習中,線性表是最基礎、最核心的結構之一 —— 它是后續棧、隊列、鏈表等復雜結構的 “基石”。今天從 “是什么”(定義)到 “怎么用”(基本操作),徹底搞懂線性表的核心邏輯。 一、先明確&…

2508C++,skia動畫

gif動畫原理 先了解一下gif動畫的原理: gif動畫由一系列靜態圖像(或叫幀)組成.這些圖像按特定的順序排列,每一幀都代表動畫中的一個瞬間,幀圖像是支持透明的. 每兩幀之間有指定的時間間隔(一般小于60毫秒),gif播放器每渲染一幀靜態圖像后,即等待此時間間隔,依此邏輯不斷循環渲染…

AI + 機器人:當大語言模型賦予機械 “思考能力”,未來工廠將迎來怎樣變革?

一、引言1.1 未來工廠變革背景與趨勢在科技飛速發展的當下,全球制造業正站在變革的十字路口。隨著消費者需求日益多樣化、市場競爭愈發激烈,傳統工廠模式的弊端逐漸顯現。生產效率低下、難以適應個性化定制需求、設備維護成本高昂且缺乏前瞻性等問題&…

pinia狀態管理的作用和意義

1. 什么是狀態管理 狀態管理就是統一管理應用中的數據,讓數據在多個組件之間共享和同步。 // 沒有狀態管理 - 數據分散在各個組件中 // 組件A const user ref({ name: 張三, age: 25 })// 組件B const user ref({ name: 張三, age: 25 }) // 重復定義// 組件C c…

十四、STM32-----低功耗

一、電源框圖VDDA 供電區域,主要是 ADC 電源以及參考電壓,STM32 的 ADC 模塊配備獨立的供電方 式,使用了 VDDA 引腳作為輸入,使用 VSSA 引腳作為獨立地連接,VREF 引腳為提供給 ADC 的 參考電壓。電壓調節器是 STM32 的…

一篇文章帶你徹底搞懂 JVM 垃圾收集器

垃圾收集器是 JVM 內存管理的執行引擎,負責自動回收無用的對象內存。其設計核心是 權衡:主要是吞吐量和停頓時間之間的權衡。沒有“最好”的收集器,只有“最適合”特定場景的收集器。一、核心基礎:分代收集模型主流 HotSpot JVM 采…

服務器排故隨筆:服務器無法ssh遠程登錄

文章目錄服務器排故隨筆:服務器無法遠程登錄問題現象解決過程第一步:確認故障描述是否準確第二步:確認網絡是否有問題第三步:確認ssh服務是否有問題第四步:確認防火墻是否放行sshd服務第五步:試試萬能的“重…

Deeplizard深度學習課程(六)—— 結合Tensorboard進行結果分析

前言 Tensorboard最初是tensorflow的可視化工具,被用于機器學習實驗的可視化,后來也適配了pytorch。Tensorboard是一個前端web界面,,能夠從文件里面讀取數據并展示它(比如損失、準確率、網絡圖)。具體使用可…

C語言————實戰項目“掃雷游戲”(完整代碼)

無論是找工作面試,還是課設大作業、考研,都離不開實戰項目的積累,如果你能把一個項目搞明白,并且給別人熟練的講出來,即使你沒有過項目經歷,也可以說是非常加分的,下面來沉浸式體驗一下這款掃雷…

數據結構之加餐篇 -順序表和鏈表加餐

目錄一、鏈表分割二、隨機鏈表的復制總結一、鏈表分割 鏈表分割 題目描述的意思就如下圖: 也就是把1,2挪到前面,6,3,5挪到后面,前者的相對順序不發生改變 這里要想往后挪就要先遍歷,遍歷到6…

JSP與Servlet整合數據庫開發:構建Java Web應用的全棧指南

JSP與Servlet整合數據庫開發:構建Java Web應用的全棧指南 概述 在Java Web開發領域,JSP(JavaServer Pages)與Servlet是構建動態Web應用的核心技術組合。Servlet作為Java EE的基礎組件,負責處理客戶端請求、執行業務邏…

設計五種算法精確的身份證號匹配

問題定義與數據準備 我們有兩個Excel文件: small.xlsx: 包含約5,000條記錄。large.xlsx: 包含約140,000條記錄。 目標:快速、高效地從large.xlsx中找出所有其“身份證號”字段存在于small.xlsx“身份證號”字段中的記錄,并將這些匹配的記錄保…

Spring 框架(IoC、AOP、Spring Boot) 的必會知識點匯總

目錄:🧠 一、Spring 框架概述1. Spring 的核心功能2. Spring 模塊化結構🧩 二、IoC(控制反轉)核心知識點1. IoC 的核心思想2. Bean 的定義與管理3. IoC 容器的核心接口4. Spring Bean 的創建方式🧱 三、AOP…

簡單工廠模式(Simple Factory Pattern)?? 詳解

?作者簡介:大家好,我是 Meteors., 向往著更加簡潔高效的代碼寫法與編程方式,持續分享Java技術內容。 🍎個人主頁: Meteors.的博客 💞當前專欄: 設計模式 ?特色專欄: 知識分享 &…

新電腦硬盤如何分區?3個必知技巧避免“空間浪費癥”!

剛到手的新電腦,硬盤就像一間空蕩蕩的大倉庫,文件扔進去沒多久就亂成一鍋粥?別急,本文會告訴你新電腦硬盤如何分區,這些方法不僅可以幫你給硬盤分區,還可以調整/合并分區大小等。所以,本文的分區…