Linux:ansible-playbook配置文件(劇本)(進階)

Linux:ansible-playbook配置文件(劇本)_ansible-playbook -i參數-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/w14768855/article/details/132579492?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170930036016800215061982%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170930036016800215061982&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-132579492-null-null.nonecase&utm_term=ansible&spm=1018.2226.3001.4450上面這個鏈接是基礎文章


如果把ansible的模塊比喻成linux命令,那么咱的playbook就好比是shell腳本


Playbook介紹?

Playbookad-hoc相比,是一種完全不同的運用ansible的方式,類似與saltstackstate狀態文件。ad-hoc無法持久使用,playbook可以持久使用。
playbook是由一個或多個play組成的列表,play的主要功能在于將事先歸并為一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來講,所謂的task無非是調用ansible的一個module。將多個play組織在一個playbook中,即可以讓它們聯合起來按事先編排的機制完成某一任務


Playbook核心元素?

  • Hosts 執行的遠程主機列表
  • Tasks 任務集
  • Variables 內置變量或自定義變量在playbook中調用
  • Templates 模板,即使用模板語法的文件,比如配置文件等
  • Handlers 和notity結合使用,由特定條件觸發的操作,滿足條件方才執行,否則不執行
  • tags 標簽,指定某條任務執行,用于選擇運行playbook中的部分代碼。

Playbook語法?

playbook使用yaml語法格式,后綴可以是yaml,也可以是yml

  • 在單一一個playbook文件中,可以連續三個連子號(---)區分多個play。還有選擇性的連續三個點好(...)用來表示play的結尾,也可省略。
  • 次行開始正常寫playbook的內容,一般都會寫上描述該playbook的功能。
  • 使用#號注釋代碼。
  • 縮進必須統一,不能空格和tab混用。
  • 縮進的級別也必須是一致的,同樣的縮進代表同樣的級別,程序判別配置的級別是通過縮進結合換行實現的。
  • YAML文件內容和Linux系統大小寫判斷方式保持一致,是區分大小寫的,k/v的值均需大小寫敏感
  • k/v的值可同行寫也可以換行寫。同行使用:分隔。
  • v可以是個字符串,也可以是一個列表
  • 一個完整的代碼塊功能需要最少元素包括 name: task

1.簡單的示例

由于這不是是基礎章,里面的寫法我就大概進行一個介紹了

?

hosts是指定哪些主機執行

remote_user是遠程主機執行的用戶

tasks下面就是一個任務列表,里面包含了一些任務模塊

name就是一個類似聲明的一個操作

name下面的就是各個模塊加上他的參數?

---
- hosts : allremote_user : roottasks :- name : 寫入開機自動掛載鏡像mount : src=/dev/cdrom path=/mnt fstype=iso9660 state=present- name : 掛載鏡像mount : src=/dev/cdrom path=/mnt fstype=iso9660 state=mounted- name : 搭建yum倉庫yum_repository : name=local  description="local" baseurl=file:///mnt enabled=1 gpgcheck=no file=tarro- name : 下載httpdyum : name=httpd state=installed- name : 啟動httpdservice : name=httpd state=started- name : 修改indexcopy : content="KALItarro" dest=/var/www/html/index.html
...


2.主機與用戶

可以看到我們一開始寫了在被管理機上執行的用戶,我們除了在開頭寫還可以在下面寫,如圖

除了在里面可以指定某條模塊執行的角色以外還可以使用sudo進行一個授權執行?????????

?


3.觸發器與動作

Handlers(動作)與Notify(觸發)?

?這倆非常好理解,觸發器就是我們在某處觸發,觸發我們指定下面的某個動作

動作就是一般寫在文件最下面,我們在上面通過動作名稱去觸發,觸發了就執行指定的動作

很多時候當我們某一個配置發生改變,我們需要重啟服務,(比如httpd配置文件文件發生改變了)這時候就可以用到handlers和notify了;(當發生改動時)notify actions會在playbook的每一個task結束時被觸發,而且即使有多個不同task通知改動的發生,notify actions知會被觸發一次;比如多個resources指出因為一個配置文件被改動,所以apache需要重啟,但是重新啟動的操作知會被執行一次

---
- hosts : allremote_user : roottasks:- name : "先對http的端口進行修改后,再通過觸發器去執行動作"shell : sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.confnotify :- restart httpdhandlers :- name : restart httpdservice : name=httpd state=restarted
...

?通過在上面的觸發,直接觸發了下面的對應名稱的動作


4.playbook中的變量

命令行指定變量?

執行playbook時候通過參數-e傳入變量,這樣傳入的變量在整個playbook中都可以被調用,屬于全局變量
---
- hosts: allremote_user: roottasks:- name : "安裝指定的變量名的軟件"yum : name={{ a }} state=installed
...
ansible-playbook -e "a=httpd" ins.yaml

使用這條命令的時候使用了-e傳入變量

hosts文件中定義變量?

/etc/ansible/hosts?

---
- hosts: 192.168.6.2remote_user: root tasks:- name: "b=lrzsz變量"yum: name={{ b }} state=installed
...
---
- hosts: allremote_user: root tasks:- name: "a=httpd"yum: name={{ a }} state=installed
...

playbook文件中定義變量

---
- hosts: allremote_user: rootvars:a: httpdb: lrzsztasks:- name: "a=httpd"yum: name={{ a }} state=installed- name: "b=lrzsz"yum: name={{ b }} state=installed
...

?

重新定義原有變量?

?

?我這里有個名為pkg的變量,默認是安裝gcc的一個變量,我只需在執行時候去通過命令重新定義變量即可完成替換

ansible-playbook -e "pkg=httpd" 1.yaml

?

這樣就被定義成為新變量了

在其他文件中定義變量

我創建了一個名為var.yaml的文件并寫入了

?

這兩個內容

我再去修改一下playbook文件導入一下變量

?

?模塊自帶變量

playbook同樣可以調用內部的一些自帶變量,如setup模塊里的一些

?


標簽

一個playbook文件中,執行時如果想執行某一個任務,那么可以給每個任務集進行打標簽,這樣在執行的時候可以通過-t選擇指定標簽執行,還可以通過--skip-tags選擇除了某個標簽外全部執行等。

?

tags下面的就是標簽,并且可以搭配變量如in{{ na }}? 就是inhttpd? ? ,還可以打多個標簽

?當我們想正常依次執行playbook直接執行就行了

ansible-playbook 3.yaml

我這個playbook中包含了安裝,開啟,重啟,假設我就像執行這個劇本里的開啟,我可以通過標簽這樣操作

ansible-playbook -t sthttpd 3.yaml

這樣就 只執行了一個

如果我們現在不想執行開啟httpd

ansible-playbook --skip-tags sthttpd 3.yaml

?那么現在就只執行安裝和重啟

如果現在不想執行開啟和重啟

ansible-playbook --skip-tags sthttpd,rehttpd 3.yaml

?可以通過? “,” 去隔開


Playbook中模板的使用?

template模板為我們提供了動態配置服務,使用jinja2語言,里面支持多種條件判斷、循環、邏輯運算、比較操作等。其實說白了也就是一個文件,和之前配置文件使用copy一樣,只是使用copy,不能根據服務器配置不一樣進行不同動態的配置。這樣就不利于管理。說明:1、多數情況下都將template文件放在和playbook文件同級的templates目錄下(手動創建),這樣playbook文件中可以直接引用,會自動去找這個文件。如果放在別的地方,也可以通過絕對路徑去指定。2、模板文件后綴名為.j2

實例:

?4.yaml里的內容是使用123.j2模板? 將模板傳輸到被管機上的/opt目錄下名為321

?

?123.j2里面的內容如下

執行一下playbook ,到被管理機器上看一下

?


?

template之when

條件測試:如果需要根據變量、facts或此前任務的執行結果來做為某task執行與否的前提時要用到條件測試,通過when語句執行,在task中使用jinja2的語法格式、when語句:在task后添加when子句即可使用條件測試;when語句支持jinja2表達式語法。

?

---
- hosts: testAtasks:- name: 我要輸出dgfshell: echo -n "dgf"register: xingmingignore_errors: True- name: 我要判斷file: name=/alex state=directorywhen: xingming is success

?修改playbook文件,通過setup模塊獲取系統版本去判斷

---
- hosts: allremote_user: rootvars:- listen_port: 88tasks:- name: Install Httpdyum: name=httpd state=installed- name: Config System6 Httpdtemplate: src=httpd6.conf.j2 dest=/etc/httpd/conf/httpd.confwhen: ansible_distribution_major_version == "6"   #判斷系統版本,為6便執行上面的template配置6的配置文件notify: Restart Httpd- name: Config System7 Httpdtemplate: src=httpd7.conf.j2 dest=/etc/httpd/conf/httpd.confwhen: ansible_distribution_major_version == "7"   #判斷系統版本,為7便執行上面的template配置7的配置文件notify: Restart Httpd- name: Start Httpdservice: name=httpd state=startedhandlers:- name: Restart Httpdservice: name=httpd state=restarted

?


template之with_items

?

上面的意思就是依次安裝httpd vsftpd? nginx

---
- hosts: allremote_user: roottasks:- name: Create New Groupgroup: name={{ item }} state=presentwith_items: - group1- group2- group3 - name: Create New Useruser: name={{ item.name }} group={{ item.group }} state=presentwith_items:- { name: 'user1', group: 'group1' } - { name: 'user2', group: 'group2' } - { name: 'user3', group: 'group3' }

?這個案例是把用戶加入不同的用戶組


template之for if

?實例:

---
- hosts: allremote_user: rootvars:nginx_vhosts:- web1:listen: 8081server_name: "web1.example.com"root: "/var/www/nginx/web1"- web2:listen: 8082server_name: "web2.example.com"root: "/var/www/nginx/web2"- web3:listen: 8083server_name: "web3.example.com"root: "/var/www/nginx/web3"tasks:- name: Templage Nginx Configtemplate: src=nginx.conf.j2 dest=/tmp/nginx_vhost.conf

模板文件編寫

{% for vhost in nginx_vhosts %}server{listen:    {{ vhost.listen }};server_name:    {{ vhost.server_name }};root:   {{ vhost.root }}; 
}
{% endfor %}

?

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

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

相關文章

LaTeX排版論文的常見問題匯總(持續更新中)

文章目錄 LaTeX排版論文的常見問題匯總(持續更新中)1.如何上傳期刊或會議提供的LaTeX模板?2.模板中各文件的說明3.LaTeX中如何設置字體大小?3.1如何設置表格中的字體大小?3.2如何設置表格、圖片標題的字體大小&#xf…

A/D轉換

硬件電路模型 模數轉換代碼 main.c #include <REGX52.H> #include "LCD1602.h" #include "Delay.h" #include "XPT2046.h"unsigned int ADValue; int main(){LCD_Init();LCD_ShowString(1,1,"ADJ NTC RG");while(1){ADValue …

什么是Vue的服務端渲染(SSR)?它有什么作用?

Vue的服務端渲染&#xff08;SSR&#xff09;是指將Vue組件在服務器端進行渲染&#xff0c;然后將已經渲染好的頁面返回給瀏覽器&#xff0c;相比于傳統的客戶端渲染&#xff0c;SSR可以更好地優化SEO和加速首屏加載速度。在傳統的客戶端渲染中&#xff0c;瀏覽器需要加載所有的…

【MySQL系列】在 MacOS 上安裝 MySQL

在 MacOS 上有兩種方式安裝 MySQL 服務器&#xff1a;通過 brew 安裝和通過安裝包安裝。 文章目錄 1、通過 brew 安裝 MySQL1.1、安裝 MySQL1.2、啟動 MySQL 服務器1.3、配置 MySQL 服務器1.4、MySQL 服務器管理命令 2、通過安裝包安裝 MySQL2.1、下載安裝包2.2、安裝 MySQL2.3…

深入理解快速排序算法:從原理到實現

目錄 1. 引言 2. 快速排序算法原理 3. 快速排序的時間復雜度分析 4. 快速排序的應用場景 5. 快速排序的優缺點分析 5.1 優點&#xff1a; 5.2 缺點&#xff1a; 6. Java、JavaScript 和 Python 實現快速排序算法 6.1 Java 實現&#xff1a; 6.2 JavaScript 實現&#…

30、類和接口

文章目錄 接口概念接口和類之間有何關系&#xff1f; 可以使用接口來約束類接口繼承接口接口還可以繼承類接口為什么可以繼承類內層原因&#xff1a;接口為什么可以繼承類 用得出的結論解釋最初的demo接口繼承類的一些限制 接口概念 接口&#xff08;Interfaces&#xff09;可…

【大廠AI課學習筆記NO.61】環境部署的選擇

主要是選擇單機和分布式、生產和開發環境的規劃等。 開發環境、測試環境、預發布環境和生產環境是軟件開發和部署過程中常見的幾個環境&#xff0c;它們各自的定義、區別、聯系以及實現的關鍵技術如下&#xff1a; 1. 開發環境&#xff08;Development Environment&#xff09…

Ai 快捷鍵學習

Ai 快捷鍵學習 Ait 鼠標滾輪 實現頁面的放大和縮小 空格鼠標左鍵 抓手工具 ctrl r 調出標尺&#xff0c;可以通過標尺來對其圖片 ctrl &#xff1b; 隱藏標尺 ctrl ‘ 調用網格標尺 再按一次就是取削 ctrl shiftz 反向撤回 tab 快速全屏 ctsls / ctrlshift…

完全解析淘寶天貓詳情接口API:購物小白也能秒變高手

在如今的電商領域中&#xff0c;淘寶和天貓是最為重要和熱門的平臺之一。作為購物平臺的用戶&#xff0c;我們通常只是瀏覽商品的頁面&#xff0c;點擊購買和支付&#xff0c;卻未能深入了解背后的技術信息。然而&#xff0c;淘寶天貓詳情接口API的了解和運用&#xff0c;聯訊數…

力扣hot4--雙指針

題目&#xff1a; 雙指針想法&#xff1a; i 指針在數組不為 0 的地方停留&#xff0c;j 指針在每個地方停留&#xff0c;依次交換 i 和 j 指針。當 i 指針遍歷完所有數組元素時&#xff0c;j 指針指向的元素及后面的元素都為0。 代碼如下&#xff1a; C版本 class Solution …

冒泡、插入、希爾、選擇、堆排序、快速排序(附源碼)

目錄 插入排序&#xff1a; 核心思想&#xff1a; 時間復雜度&#xff1a; 冒泡排序&#xff1a; 核心思想&#xff1a; 時間復雜度&#xff1a; 希爾排序&#xff1a; 核心思想&#xff1a; 時間復雜度&#xff1a; 選擇排序&#xff1a; 核心思想&#xff1a; 時間…

告別手動填寫邀請碼,這款App數據統計工具幫你輕松實現

在移動互聯網時代&#xff0c;App的推廣和運營已成為各大企業的必修課。然而&#xff0c;面對錯綜復雜的推廣渠道和浩如煙海的數據&#xff0c;如何精準地追蹤用戶來源、優化推廣策略&#xff0c;一直是困擾著運營者的難題。今天&#xff0c;我們就來聊聊一款能夠幫助你輕松解決…

[C++核心編程](七):類和對象——運算符重載*

目錄 四則運算符重載 左移運算符重載 遞增運算符重載 賦值運算符重載 關系運算符重載 函數調用運算符重載 對已有的運算符重新進行定義&#xff0c;賦予其另一種功能&#xff0c;以適應不同的數據類型 四則運算符重載 對自定義數據類型實現四則運算&#xff08;加減乘除&…

新火種AI|AI商業中的里程碑事件已敲定! 歐盟27國一致通過《人工智能法案》。

作者&#xff1a;小巖 編輯&#xff1a;彩云 根據路透社2月2日消息&#xff0c;歐盟國家就《人工智能法案》立法正式達成協議。 此次立法的成功堪稱AI商業領域上的里程碑事件。因為單從商業視角來看&#xff0c;這一法案的通過率先為歐盟內部的人工智能創新提供了明確的法律…

在 Linux 上用 zram 替代傳統交換空間 | Linux 中國

我在我的電腦上花了很多時間&#xff08;我是說工作&#xff09;&#xff0c;我發現了很多有趣的東西。其中最近引起我注意的是 zram0 設備。我是在幾個月前寫一篇文章時第一次注意到它&#xff0c;它顯示在 lsblk 命令的輸出中&#xff1a; # lsblk NAME MAJ:MIN RM…

【VPX637】基于XCKU115 FPGA+ZU15EG MPSOC的6U VPX雙FMC接口通用信號處理平臺

VPX637是一款基于6U VPX總線架構的通用實時信號處理平臺&#xff0c;該平臺采用一片Xilinx的高性能Kintex UltraScale系列FPGA&#xff08;XCKU115-2FLVF1924I&#xff09;作為預處理單元&#xff0c;外掛2個FMC擴展接口&#xff0c;來完成數據采集、數據回放以及實時信號處理算…

[動態規劃,DFS深度搜索]滑雪

滑雪 題目描述 Michael喜歡滑雪&#xff0c;這并不奇怪&#xff0c;因為滑雪的確很刺激。可是為了獲得速度&#xff0c;滑的區域必須向下傾斜&#xff0c;而且當你滑到坡底&#xff0c;你不得不再次走上坡或者等待升降機來載你。Michael想知道在一個區域中的最長底滑坡。區域…

Java---文件,流???

文章目錄 1.遍歷文件夾2.遍歷子文件夾3.練習流4.以字節流的形式讀取文件內容5.以字節流的形式向文件寫入數據頂折糾問6 .寫入數據到文件 1.遍歷文件夾 一般說來操作系統都會安裝在C盤&#xff0c;所以會有一個 C:\WINDOWS目錄。 遍歷這個目錄下所有的文件(不用遍歷子目錄) 找出…

ssh連接ubantu失敗

新系統Ubuntu20.4 安裝ssh server 1. 安裝 openssh-server2. 開啟22號端口 # 安裝ssh服務 sudo apt-get install openssh-server # 安裝防火墻 sudo apt-get install ufw # 開啟防火墻 sudo ufw enable #放開22端口 sudo ufw allow 22 開啟22號端口 倘若ubuntu沒有開啟22…

HTTP/2、HTTP/3分別解決了什么問題

總的來說就是HTTP/1.1是請求-響應模型導致隊頭阻塞問題&#xff0c;HTTP2是TCP層面導致隊頭阻塞問題 HTTP/2 多路復用&#xff0c;解決了HTTP/1.1隊頭阻塞問題 HTTP/1.1 的實現是基于請求-響應模型的。同一個連接中&#xff0c;HTTP 完成一個事務&#xff08;請求與響應&…