ansible 模塊擴展

uri模塊

在Ansible中,uri模塊是一個用于發送HTTP、HTTPS、FTP等請求的模塊,可以用于獲取網頁內容、下載文件、上傳文件等。本質上,它是一個HTTP客戶端模塊。

使用uri模塊,需要指定一些參數來定義HTTP請求。下面是一些uri模塊的常用參數:

  • url:必須,指定請求的URL地址。
  • method:指定HTTP請求方法,默認為GET。
  • headers:HTTP請求頭信息。
  • body:HTTP請求體。
  • status_code:HTTP響應的狀態碼。
  • return_content:指定是否返回響應內容。

下面是一個簡單的uri模塊的使用示例:

- name: Get the content of a web pageuri:url: https://www.example.comreturn_content: yesregister: result- name: Print the content of the web pagedebug:var: result.content

在這個示例中,uri模塊被用來獲取https://www.example.com的網頁內容,并將結果保存在result變量中。第二個任務使用debug模塊輸出結果。

在實際使用中,uri模塊可以結合其他模塊來實現更復雜的功能。例如,可以使用uri模塊下載文件、上傳文件,或者通過uri模塊發送POST請求來提交表單等。

lineinfile 模塊

在 Ansible 中,lineinfile 模塊是用于在文件中搜索指定行,如果找到了該行則修改或添加內容,如果沒有找到則添加一行新內容。

使用 lineinfile 模塊,需要指定以下參數:

  • path:必需,指定要修改的文件路徑。
  • line:必需,指定要添加或修改的行的內容。
  • regexp:必需,指定搜索的正則表達式。
  • state:可選,指定是否應該刪除匹配行或僅匹配行。如果設置為 present,則確保文件包含該行;如果設置為 absent,則確保文件不包含該行。

下面是一個簡單的 lineinfile 模塊的使用示例:

- name: Add a new line to the filelineinfile:path: /etc/fstabline: '/dev/sdb1 /mnt/data ext4 defaults 0 0'

在這個示例中,lineinfile 模塊用于將一行新內容添加到 /etc/fstab 文件中。如果文件中已經包含了該行,則該模塊不會做出任何更改。

下面是另一個示例,演示如何將文件中的特定行修改為新內容:

- name: Modify an existing line in the filelineinfile:path: /etc/fstabregexp: '^/dev/sdb1'line: '/dev/sdb1 /mnt/data ext4 defaults 1 1'

在這個示例中,lineinfile 模塊用于搜索以 /dev/sdb1 開頭的行,并將該行的內容修改為指定的新內容。

除了添加和修改行,lineinfile 模塊還可以用于刪除指定的行。下面是一個示例:

- name: Remove a line from the filelineinfile:path: /etc/fstabregexp: '^/dev/sdb1'state: absent

在這個示例中,lineinfile 模塊用于刪除以 /dev/sdb1 開頭的行。

總之,lineinfile 模塊可以方便地操作文件中的行,使得對文件進行修改變得更加簡單。需要注意的是,該模塊會對文件進行修改,因此在使用前應該確保已經備份了需要修改的文件。

wait_for 模塊

1、基于端口的方式

wait_for模塊是Ansible中一個非常有用的模塊,它可以等待特定的條件滿足,然后繼續執行后續的任務。該模塊可以用于等待遠程主機上的某個端口、某個服務是否啟動或某個文件是否存在等情況。

下面是wait_for模塊的基本用法:

- name: Wait for a TCP port to become availablewait_for:host: localhostport: 80

在這個示例中,wait_for模塊將等待主機localhost上的TCP端口80變為可用。在等待期間,Ansible將阻塞當前任務,直到條件得到滿足或達到了超時時間。默認情況下,超時時間為300秒(5分鐘),可以通過timeout參數進行配置。

wait_for模塊還支持其他條件,例如等待文件存在、等待HTTP響應碼、等待正則表達式匹配等,具體取決于使用情況。以下是一個等待文件存在的示例:

- name: Wait for a file to become availablewait_for:path: /path/to/filestate: present

在這個示例中,wait_for模塊將等待遠程主機上的/path/to/file文件存在。使用state參數指定等待文件的狀態,可以是present(存在)或absent(不存在)。

wait_for模塊還支持msg參數,可用于在等待期間輸出自定義消息。以下是一個示例:

- name: Wait for a service to become availablewait_for:host: localhostport: 80timeout: 60msg: "Waiting for service to become available"

在這個示例中,wait_for模塊將等待主機localhost上的TCP端口80變為可用,并輸出自定義消息“Waiting for service to become available”。如果等待超時,Ansible將失敗并輸出相應的錯誤消息。

2、基于進程的方式

Ansible中的wait_for模塊可以等待特定的進程是否存在。下面是一個使用wait_for模塊等待特定進程的示例:

- name: Wait for a process to startwait_for:path: /usr/bin/processsearch_regex: running

在這個示例中,wait_for模塊將等待名為process的進程啟動并輸出特定的字符串running。如果進程未啟動或未輸出指定字符串,則任務將一直阻塞直到滿足條件或超時。可以使用timeout參數設置超時時間,默認為300秒(5分鐘)。

此外,還可以通過使用msg參數設置等待期間輸出的消息。以下是一個示例:

- name: Wait for a process to startwait_for:path: /usr/bin/processsearch_regex: runningtimeout: 60msg: "Waiting for process to start"

在這個示例中,如果等待超時,將輸出自定義消息“Waiting for process to start”。

3、基于文件的方式

wait_for模塊通過輪詢(默認為每秒輪詢一次)來檢查指定的條件是否滿足,如果在超時時間內條件不滿足,則任務失敗。在等待文件產生時,可以使用“path”參數指定文件路徑,并使用“state”參數指定文件狀態為“present”。如果文件已經存在,則條件已經滿足,任務將繼續執行。如果文件不存在,則wait_for模塊將在超時時間內等待文件的產生。例如:

- name: 等待文件產生wait_for:path: /path/to/filestate: presenttimeout: 60

在這個例子中,wait_for模塊將等待文件“/path/to/file”出現,并在60秒后超時。如果文件在60秒內出現,則任務將繼續執行。如果文件在60秒內未出現,則任務將失敗。

synchronize 模塊

synchronize 模塊是 Ansible 的一個模塊,用于將本地目錄或文件與遠程主機上的目錄或文件進行同步。相比于 copytemplate 等模塊,synchronize 可以更快地將大量文件或目錄同步到遠程主機,因為它使用了 rsync 協議。

下面是 synchronize 模塊的一些常用參數及其含義:

  • src: 要同步的本地目錄或文件的路徑。
  • dest: 要同步到的遠程主機上的目錄或文件的路徑。
  • mode: 同步模式,可以是 push(將本地文件同步到遠程主機)、pull(將遠程主機上的文件同步到本地)或 rsync(使用 rsync 協議同步文件)。
  • rsync_opts: 傳遞給 rsync 命令的選項。例如,可以使用 -av 選項以歸檔模式同步文件,使用 -z 選項啟用壓縮等等。
  • delete: 是否在同步時刪除遠程主機上不存在的文件。默認為 no,不刪除。

下面是一個使用 synchronize 模塊同步本地目錄到遠程主機的示例:

- name: Sync local directory to remote hostsynchronize:src: /path/to/local/directorydest: /path/to/remote/directorymode: pushrsync_opts: "-avz"delete: yes

這個示例會將本地目錄 /path/to/local/directory 同步到遠程主機的 /path/to/remote/directory 目錄下,使用 rsync 協議進行同步,并啟用壓縮。同時,將刪除遠程主機上不存在的文件。

需要注意的是,synchronize 模塊需要安裝 rsync 工具。如果目標主機上沒有安裝 rsync,可以使用 Ansible 的 raw 模塊或 command 模塊來安裝它。

git 模塊

Ansible的git模塊允許在遠程主機上操作git倉庫,可以clone/pull/push git倉庫。在Ansible中,使用git模塊可以方便地維護代碼庫的版本控制。

下面是git模塊的一些常用選項:

  • repo:git倉庫的URL,必需選項;
  • dest:本地文件系統上的目標目錄,可以是絕對路徑或相對路徑;
  • version:表示要使用的版本,可以是分支名、標簽名或提交哈希值;
  • force:如果true,則會強制執行git操作,即使目標文件夾已經存在;
  • update:如果true,則在執行操作時使用git pull命令更新代碼庫;
  • recursive:如果true,則遞歸地拉取子模塊;
  • key_file:ssh私鑰文件路徑;
  • accept_hostkey:如果yes,則在第一次連接到遠程倉庫時自動接受主機密鑰;
  • clone:如果yes,則會使用git clone命令克隆倉庫,默認為yes
  • bare:如果yes,則會使用git clone --bare命令克隆裸倉庫,即不包含工作樹。

使用git模塊可以在遠程主機上執行git操作,例如:

- name: Clone a git repositorygit:repo: https://github.com/ansible/ansible.gitdest: /home/user/ansible

上述代碼會將ansible的git倉庫克隆到/home/user/ansible目錄下。

除了上述常用選項外,git模塊還有一些其他選項,例如:

  • key_file_type:ssh私鑰文件類型;
  • reference:指定本地代碼庫的路徑,可以加快克隆速度;
  • depth:指定克隆時獲取歷史記錄的深度;
  • recursive_after:指定拉取子模塊的時間,可以是alwayson-changenever
  • rebase:如果true,則在更新操作時使用git pull --rebase命令。

通過使用Ansible的git模塊,可以方便地在遠程主機上執行git操作,簡化了維護代碼庫的過程。

mount 模塊

mount 模塊是 Ansible 提供的一個用于掛載文件系統的模塊,可以在遠程主機上掛載本地或者網絡上的文件系統。

該模塊的常用參數包括:

  • src: 指定需要掛載的文件系統。可以是本地文件系統的設備文件,比如 /dev/sdb1,也可以是網絡文件系統的位置,比如 server:/share
  • path: 指定掛載點的路徑。
  • fstype: 指定文件系統的類型。如果不指定,則根據掛載點自動判斷文件系統類型。
  • state: 指定掛載狀態。可選值為 mountedunmounted,默認為 mounted
  • opts: 指定掛載選項。選項可以用逗號分隔,比如 rw,noatime

下面是一個示例 playbook,演示了如何使用 mount 模塊掛載一個 NFS 文件系統:

- name: Mount NFS filesystemhosts: allbecome: truevars:nfs_mount: "server:/share"nfs_path: "/mnt/nfs"nfs_opts: "rw,hard,intr"tasks:- name: Ensure NFS mount directory existsfile:path: "{{ nfs_path }}"state: directory- name: Mount NFS filesystemmount:src: "{{ nfs_mount }}"path: "{{ nfs_path }}"fstype: nfsopts: "{{ nfs_opts }}"state: mounted

這個 playbook 在遠程主機上創建了 /mnt/nfs 目錄,并將 server:/share 掛載到該目錄下。掛載選項為 rw,hard,intr,文件系統類型為 NFS。如果文件系統已經被掛載,不會進行任何操作。如果掛載點已經存在但未掛載,將會嘗試掛載。如果掛載失敗,則任務將會失敗。

package 模塊

在 Ansible 中,package 模塊用于管理包的安裝和卸載。它能夠在許多操作系統上安裝和卸載包,例如 RedHat、CentOS、Debian、Ubuntu 等。

package 模塊可以執行以下操作:

安裝包:通過使用 name 參數指定要安裝的包名稱即可安裝包。例如,安裝 httpd 包可以使用以下任務:

- name: Install httpdpackage:name: httpdstate: present

卸載包:通過使用 state 參數將其設置為 absent 即可卸載包。例如,卸載 httpd 包可以使用以下任務:

- name: Remove httpdpackage:name: httpdstate: absent

更新包:通過將 state 參數設置為 latest 即可更新包。例如,更新 httpd 包可以使用以下任務:

- name: Update httpdpackage:name: httpdstate: latest

確定包是否已安裝:通過將 state 參數設置為 query 可以確定包是否已安裝。如果包已安裝,則任務將成功執行,否則任務將失敗。例如,檢查 httpd 包是否已安裝可以使用以下任務:

- name: Check if httpd is installedpackage:name: httpdstate: query

除了這些基本操作之外,package 模塊還支持其他參數,例如 allow_downgradedisable_gpg_checkupdate_cache 等,這些參數可以根據需要進行設置。

template 模塊

template 模塊是 Ansible 中的一個常用模塊,用于在目標主機上生成文件。它將一個源文件作為模板,在生成目標文件時將其渲染,使用用戶定義的變量來填充模板中的占位符,從而生成目標文件。

template 模塊的主要參數如下:

  • src:源模板文件的路徑,相對于 Ansible 控制節點。
  • dest:目標文件的路徑,相對于目標主機。
  • owner:目標文件的所有者。
  • group:目標文件的組。
  • mode:目標文件的權限。
  • backup:是否創建備份文件。
  • validate:用于驗證生成的文件是否正確的命令或腳本。
  • vars:用于在模板中填充變量的字典。
  • setype:用于在 SELinux 中設置目標文件類型的字符串。
  • selevel:用于在 SELinux 中設置目標文件級別的字符串。

下面是一個使用 template 模塊的例子:

- name: Generate config filetemplate:src: /path/to/template.conf.j2dest: /etc/app/config.confowner: appusergroup: appgroupmode: 0644vars:key1: value1key2: value2

在這個例子中,template 模塊將 /path/to/template.conf.j2 文件作為模板,渲染后生成 /etc/app/config.conf 文件,使用 appuser 用戶和 appgroup 組作為所有者和組,設置權限為 0644,并且使用 vars 參數填充了模板中的變量。

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

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

相關文章

學習平臺推薦_菜鳥教程官網

網址: 菜鳥教程 - 學的不僅是技術,更是夢想!菜鳥教程(www.runoob.com)提供了編程的基礎技術教程, 介紹了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各種編程語言的基礎知識。 同…

Nginx-2

一、高級配置 1.1網頁狀態頁 基于nginx 模塊 ngx_http_stub_status_module 實現,在編譯安裝nginx的時候需要添加編譯參數 --with-http_stub_status_module,否則配置完成之后監測會是提示語法錯誤注意: 狀態頁顯示的是整個服務器的狀態,而非虛擬主機的狀…

opencv實現surface_matching記錄

1 說明 使用的cv版本為4.7.0 , surface_matching功能是附加在contrib中的,并未直接包含在opencv 4.7.0中,因此編譯的時候需要考慮contrib。 VS版本為2022, CMake版本為3.30-rc4. 2 編譯opencv(含contrib) 參見: Win10 下編譯 OpenCV 4.7.0詳細全過程,包含xfeatures2…

Open3D (C++) 點云邊界提取

邊界提取 一、算法原理1、詳細流程2、主要函數3、參考文獻二、代碼實現三、結果展示四、注意事項本文由CSDN點云俠原創,原文鏈接。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲。 一、算法原理 1、詳細流程 該算法完全復刻自PCL。 2、主要函數 /// \…

算法入門(上)

什么是算法? 算法(Algorithm)是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,并且每條指令表示一個或多個操作。 給定一個問題,能夠解決這個問題的算法是有很多種的。算式中的問題是千奇百怪…

C++為什么將 0.1f 更改為 0 性能會降低 10 倍

一、浮點數與整數的表示差異 在計算機內部,浮點數和整數的表示方式截然不同。浮點數遵循IEEE 754標準,通過符號位、指數位和尾數位來存儲和表示數值,而整數則是直接的二進制表示。這種表示上的差異導致了它們在內存占用、處理速度以及精度上…

Debian/Ubuntu Linux安裝OBS

先決條件 建議使用 xserver-xorg 1.18.4 或更新版本,以避免 OBS 中某些功能(例如全屏投影儀)出現潛在的性能問題。在 Linux 上使用 OBS Studio 需要 OpenGL 3.3(或更高版本)支持。在終端中輸入以下內容來檢查系統支持…

Halcon測量助手

模糊測量:基于模糊邏輯 模糊邏輯:模仿人腦的不確定性概念判斷、推理思維方式,對于模型未知或不能確定的描述系統,以及強非線性、大滯后的控制對象,應用模糊集合和模糊規則進行推理,表達過渡性界限或定性知識經驗&…

MySQL基礎進階:編寫復雜查詢

編寫復雜查詢 1. 子查詢2. IN運算符3. 子查詢VS連接4. ALL關鍵字5. ANY關鍵字6. 相關子查詢7. EXISTS運算符8. SELECT子句中得子查詢9. FROM子句中得子查詢 1. 子查詢 子查詢: 任何一個充當另一個SQL語句的一部分的 SELECT 查詢語句都是子查詢,子查詢是…

GMSB文章八:微生物中介分析

歡迎大家關注全網生信學習者系列: WX公zhong號:生信學習者Xiao hong書:生信學習者知hu:生信學習者CDSN:生信學習者2 介紹 中介分析(Mediation Analysis)是一種統計方法,用于研究一…

C# Benchmark

創建控制臺項目(或修改現有項目的Main方法代碼),Nget導入Benchmark0.13.12,創建測試類: public class StringBenchMark{int[] numbers;public StringBenchMark() {numbers Enumerable.Range(1, 20000).ToArray();}[Be…

大語言模型(LLMs)全面學習指南,初學者入門,一看就懂!

大語言模型(LLMs)作為人工智能(AI)領域的一項突破性發展,已經改變了自然語言處理(NLP)和機器學習(ML)應用的面貌。這些模型,包括OpenAI的GPT-4o和Google的gem…

楊冪跨界學術圈:內容營銷專家劉鑫煒帶你了解核心期刊的學術奧秘

近日&#xff0c;知名藝人楊冪在權威期刊《中國廣播電視學刊》上發表了一篇名為《淺談影視劇中演員創作習慣——以電視劇<哈爾濱一九四四>為例》的學術論文&#xff0c;此舉在學術界和娛樂圈均引起了廣泛關注。該期刊不僅享有極高的聲譽&#xff0c;還同時被北大中文核心…

數據庫-數據完整性-用戶自定義完整性實驗

NULL/NOT NULL 約束&#xff1a; 在每個字段后面可以加上 NULL 修飾符來指定該字段是否可以為空&#xff1b;或者加上 NOT NULL 修飾符來指定該字段必須填上數據。 DEFAULT約束說明 DEFAULT 約束用于向列中插入默認值。如果列中沒有規定其他的值&#xff0c;那么會將默認值添加…

發;flask的基本使用2

上一篇我們介紹了基本使用方法 flask使用 【 1 】基本使用 from flask import Flask# 1 實例化得到對象 app Flask(__name__)# 2 注冊路由--》寫視圖函數 app.route(/) def index():# 3 返回給前端字符串return hello worldif __name__ __main__:# 運行app&#xff0c;默認…

Conformal Prediction

1 A Gentle Introduction to Conformal Prediction and Distribution-Free Uncertainty Quantification 2 Language Models with Conformal Factuality Guarantees

【啟明智顯分享】樂鑫ESP32-S3R8方案2.8寸串口屏:高性能低功耗,WIFI/藍牙無線通信

近年來HMI已經成為大量應用聚焦的主題&#xff0c;在消費類產品通過創新的HMI設計帶來增強的連接性和更加身臨其境的用戶體驗之際&#xff0c;工業產品卻仍舊在采用物理接口。這些物理接口通常依賴小型顯示器或是簡單的LED&#xff0c;通過簡單的機電開關或按鈕來實現HMI交互。…

【人工智能】—葡萄牙酒店預訂信息多維度分析|預測是否取消預定算法模型大亂斗

引言 在當今數字化時代&#xff0c;數據驅動的決策在各個行業中變得越來越重要。酒店業&#xff0c;作為旅游和休閑服務的核心部分&#xff0c;正面臨前所未有的機遇和挑戰。隨著在線預訂平臺的興起&#xff0c;客戶行為數據的積累為酒店提供了洞察消費者需求和優化運營策略的…

探索WebKit的插件帝國:深入插件系統的奧秘

&#x1f310; 探索WebKit的插件帝國&#xff1a;深入插件系統的奧秘 WebKit作為現代瀏覽器的核心&#xff0c;其插件系統是擴展瀏覽器功能、增強用戶體驗的關鍵機制。通過插件&#xff0c;開發者可以為瀏覽器添加各種新特性&#xff0c;從視頻播放到3D圖形&#xff0c;無所不…

有框架和沒框架的Command

這兩段代碼在功能上是等效的&#xff0c;但它們使用了不同的 RelayCommand 實現。第一段代碼中&#xff0c;RelayCommand 是自定義實現的&#xff0c;而第二段代碼中&#xff0c;RelayCommand 是使用 GalaSoft.MvvmLight.Command 庫中的實現。 以下是兩段代碼的完整版本&#…