Ansible的使用

##### Ansible使用環境

- 控制節點
? - 安裝Ansible軟件
? - Python環境支持:Python>=2.6
? - 必要的模塊:如PyYAML等
- 被控節點
? - 啟用SSH服務
? - 允許控制節點登錄,通常設置免密登錄
? - Python環境支持

http://www.ansible.com/

#### 一、環境準備

配置好主機名、IP地址、YUM源。關閉防火墻和SELinux

pubserver掛載rocky鏡像

web1添加兩塊20G硬盤

| 主機名 ? ?| IP地址 ? ? ? ? | 角色 ? ? ? ? ? ? ? ?|
| --------- | -------------- | ------------------- |
| pubserver | 192.168.88.240 | 控制節點 ? ? ? ? ? ?|
| web1 ? ? ?| 192.168.88.11 ?| 被控節點(webserver) |
| web2 ? ? ?| 192.168.88.12 ?| 被控節點(webserver) |
| db1 ? ? ? | 192.168.88.13 ?| 被控節點(database) ?|

#### 二、部署配置、自定義ansible軟件YUM源

> 控制節點==服務端
>
> 被控節點==客戶端

##### 前置部署(控制節點服務端操作):

??? ?安裝vsftpd軟件并設置開機自啟后開啟服務,配置網絡YUM以及開機自動掛載

??? ?刷新網絡YUM源,確保通信正常

```shell
yum clean all; yum repoinfo
```

??? ?從真機上傳ansible相關軟件到pubserver主機

```shell
[root@真機 ~]# scp /linux-soft/s2/zzg/ansible_soft/* root@192.168.88.240:/var/ftp/rpms/
```

##### 開始部署:

??? ?安裝createrepo命令包

```shell
yum -y install createrepo_c
```

??? ?創建軟件倉庫信息

```shell
createrepo /var/ftp/rpms/
```

??? ?驗證軟件倉庫下確保有repodata目錄

??? ?增加自定義YUM源配置,在文件最后追加ansible源

```shell
[ansible-rpms]
name=ansible-rpms
baseurl="ftp://192.168.88.241/rpms"
enabled=1
gpgcheck=0
```

??? ?刷新網絡YUM源

??? ?同步repo文件到所有被控節點

```shell
for i in 192.168.88.1{1..3}
?? ?do
?? ??? ?scp /etc/yum.repos.d/ftp_Yum.repo root@$i:/etc/yum.repos.d/
?? ?done
```

??? ?控制節點安裝Ansible(服務端)

```shell
yum -y install ansible
```

??? ?查看安裝版本

```shell
ansible --version
```

??? ?配置控制節點的hosts本地主機名解析文件,確保控制節點通過主機名訪問到被控節點

```shell
vim /etc/hosts

192.168.88.241 ?pubserver
192.168.88.11 ? web1
192.168.88.12 ? web2
192.168.88.13 ? db1
```

??? ?連接,測試hosts文件配置正確

```shell
for i in pubserver web1 web2 db1
?? ?do
?? ??? ?ping -c 2 $i
?? ?done
```

??? ?配置控制節點免密登錄被控節點

```shell
ssh-keygen -t rsa -f /root/.ssh/id_rsa -N '' ? ?#非交互生成秘鑰對
```

??? ?發送公鑰到被控節點

```shell
for i in web1 web2 db1
?? ?do
?? ??? ?ssh-copy-id root@$i
?? ?done
```

??? ?驗證免密登錄

```shell
for i in web1 web2 db1
?? ?do
?? ??? ?ssh root@$i "hostname"
?? ?done
#結果顯示web1,web2,db1
```

##### 被控節點Ansible管理環境配置

- 配置目標
? - 使用Ansible軟件管理多個環境,如開發環境、測試環境、生產環境
? - 多用戶使用同一個控制節點管理不同主機
? - 每個用戶有屬于自己的配置環境(工作目錄)
- Ansible配置文件查找順序
? - 首先檢測ANSIBLE_CONFIG變量定義的配置文件
? - 其次檢查當前目錄下的./ansible.cfg文件
? - 再次檢查當前用戶家目錄下的~/ansible.cfg文件
? - 最后檢查/etc/ansible/ansible.cfg文件
- 控制節點配置

> 創建自定義Ansible工作目錄,在root家目錄下創建ansible文件夾并進入可以自定義名稱,以后關于ansible操作均在此目錄下進行

??? ?配置ansible工具,在剛創建的工作目錄下創建ansible.cfg配置文件和inventory清單列表文件

??? ?ansible.cfg配置文件修改內容:

```shell
[defaults] ? ? ? ? ? ? ? ? ?#通用配置
inventory = inventory ? ? ? #主機清單列表文件名
host_key_checking = false ? #不檢查主機秘鑰,非交互式ssh連接
```

??? ?inventory清單列表文件修改內容:

```shell
[webservers] ? ? ? ?#定義主機組,名稱自定義
web[1:2] ? ? ? ? ? ?#[1:2]表示從1到2

[dbservers]
db1

[cluster:children] ?#cluster為組名,:children為固定寫法,表示為cluster的子組
webservers
dbservers
```

??? ?在工作目錄下確認配置結果

```shell
ansible all --list-hosts?? ??? ??? ?#查看所有被控主機列表
ansible webservers --list-hosts?? ??? ?#查看webservers組主機列表
ansible dbservers --list-hosts?? ??? ?#查看dbservers組主機列表
ansible cluster --list-hosts?? ??? ?#查看cluster組主機列表
```

#### 三、Ansible使用方法及常用模塊

##### 使用方法

- ad-hoc臨時命令
? - 在命令行下使用ansible命令調用Ansible模塊,實現被控節點遠程管理
? - 通常用于查詢信息或臨時簡易操作
- Playbook劇本
? - 把管理任務以特定的格式編輯在文件中,通過ansible-playbook命令遠程管理被控節點
? - 通常用于復雜任務設計及遠程執行

??? ?ad-hoc命令語法格式:ansible?? ?[主機、組列表或IP]?? ?[參數]

??? ?常用參數

| -m ? | 要執行的模塊,默認為command ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
| ---- | ------------------------------------------------------------ |
| -a ? | 模塊的參數 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| -u ? | ssh連接的用戶名,默認用root,ansible.cfg中可以配置 ? ? ? ? ? |
| -f ? | fork多少進程并發處理,默認為5個 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
| -i ? | 指定hosts主機清單列表文件路徑,默認default=/etc/ansible/hosts |
| -M ? | 要執行的模塊路徑,默認為/usr/share/ansible ? ? ? ? ? ? ? ? ? |
| -t ? | 日志輸出目錄,日志文件名以主機命名 ? ? ? ? ? ? ? ? ? ? ? ? ? |
| -k ? | 使用密碼登錄遠程主機,被控節點未做免密登錄時可用 ? ? ? ? ? ? |

??? ?eg:ansible all -m ping?? ?#ping模塊用于測試是否可以SSH遠程登錄被控節點主機

> 返回結果為綠色的SUCCESS狀態信息則為成功
>
> 返回結果為紅色的UNREACHABLE則為失敗
>
> 需要檢測管理節點與被控節點網絡和是否可以免密登錄

??? ?Playbook劇本:略——詳情看二階段/3.Ansible/3_Day02.md

##### 模塊簡介

- Ansible在使用過程中通過模塊來完成指定任務
- Ansible模塊的本質是一個文件,通常是為實現具體功能的Python腳本
- Ansible已經有很多開發好的模塊,可以直接調用,具備開發能力也可以自行開發
- 多數模塊都支持使用參數,需要使用的時候指定參數
- 主要學習已有的常用模塊的用途及常用參數

> 在Ansible中,模塊的冪等性指的是模塊執行操作時,如果目標狀態已經符合預期,再次執行相同的操作不會產生任何改變,也就是說,模塊的執行結果是可重復的,不會因為多次執行而產生不同的結果。這種特性非常重要,因為它可以確保自動化任務的可靠性,避免不必要的數據更改或資源消耗。

??? ?模塊查詢命令使用方法——ansible-doc

```shell
# 列出目前全部可用Ansible模塊,按空格鍵向下翻頁,按q退出返回命令行
ansible-doc -l

# 統計已有模塊數量,WARNING信息直接忽略即可
ansible-doc -l | wc -l
7214

# 查看包含yum的模塊
ansible-doc -l | grep yum

# 查看指定模塊的幫助文檔,按空格鍵向下翻頁,按q退出返回命令行
ansible-doc yum
```

??? ?相關模塊:

??? ?command模塊

> Ansible的默認模塊,用于在被控節點(客戶端)執行Linux命令,不支持bash特性,如管道、重定向

```shell
ansible web1 -m command -a "hostname" #獲取被控節點主機名
ansible web1 -a "ip a s" ? ? ? ? ? ? ?#獲取被控節點IP地址信息
```

??? ?shell模塊

> 于在被控節點執行Linux命令,支持bash特性

```shell
# 獲取IP信息前兩行
ansible web1 -m shell -a "ip a s | head -2"
# 將IP地址信息重定向保存到指定文件
ansible web1 -m shell -a "ip a s > /opt/ip.txt"
# 確認重定向結果
ansible web1 -m shell -a "cat /opt/ip.txt"
```

??? ?script模塊

> 用于在被控節點執行腳本,不局限于Shell腳本

```shell
ansible webservers -m script -a "test.sh" #執行test.sh腳本
```

-------------------------------------

---------------------

??? ?file模塊

> ?用于在被控節點創建文件、目錄、鏈接文件等,還可以修改權限、歸屬
>
> 冪等性

```shell
## 常用參數
?? ?path:指定文件路徑
? ? owner:設置文件所有者
? ? group:設置文件所屬組
? ? state:狀態
? ? ?? ?touch表示創建文件
? ? ?? ?directory表示創建目錄
? ? ?? ?link表示創建軟鏈接
? ? ?? ?absent表示刪除
? ? mode:設置權限
? ? src:source的簡寫,源
? ? dest:destination的簡寫,目標

#使用file模塊創建文件、目錄、軟鏈接,但touch特殊創建同一文件只會刷新時間戳
ansible webservers -m file -a "path=/tmp/file.txt state=touch"
ansible web1 -m shell -a "ls -l /tmp | grep txt"
ansible webservers -m file -a "path=/tmp/demo state=directory"
ansible webservers -m file -a "src=/etc/hosts dest=/tmp/hosts.txt state=link"
#使用file模塊修改文件權限和歸屬
ansible webservers -m file -a "path=/tmp/file.txt owner=sshd group=adm mode=0777"
#使用file模塊刪除被控節點指定文件、目錄、軟鏈接
ansible webservers -m file -a "path=/tmp/file.txt state=absent"
ansible webservers -m file -a "path=/tmp/demo state=absent"
ansible webservers -m file -a "path=/tmp/hosts.txt state=absent"
```

??? ?copy模塊

> 用于將控制節點指定文件發送被被控節點(服務端上傳、客戶端下載)

```shell
## 常用參數
? ? src:源。控制端的文件路徑
? ? dest:目標。被控制端的文件路徑
? ? content:內容。需要寫到文件中的內容

# 使用copy模塊發送控制節點指定文件到被控節點指定目錄并重命名(如果dest指定到目錄則文件名不變)
ansible webservers -m copy -a "src=test.sh dest=/tmp/adduser.sh"

# 使用copy模塊發送指定內容到被控節點并存儲在文件中
ansible webservers -m copy -a "content='Hello World' dest=/tmp/mytest.txt"
```

??? ?fetch模塊

> 用于將被控節點指定文件發送到控制節點(服務端下載、客戶端上傳)

```shell
## 常用參數
? ? src:源。被控制端的文件路徑
? ? dest:目標。控制端的文件路徑
? ? flat:不生成目錄結構,只保留文件到指定目錄

# 使用fetch模塊收集被控節點指定文件到控制節點(默認在控制節點生成/dest_path/主機名/src_path/file)
ansible webservers -m fetch -a "src=/etc/hostname dest=~/"

# 使用fetch模塊收集被控節點指定文件到控制節點(不生成目錄結構,只保留文件到指定目錄)
ansible web1 -m fetch -a "src=/etc/hosts dest=~/ flat=yes"
```

??? ?lineinfile模塊

> 用于確保被控節點指定文件內有指定行。用于在遠程主機上的文件中插入、替換或刪除行,適用于編輯配置文件、腳本等文本文件,確保某些配置或內容的一致性,如添加環境變量、修改配置項等

```shell
## 常用參數
? ? path:待修改的文件路徑
? ? line:寫入文件的一行內容
? ? regexp:正則表達式,用于查找文件中的內容

# 確保/etc/issue文件中有Hello World行,如果不存在則追加到文件末尾,存在就不會添加
ansible webservers -m lineinfile -a "path=/etc/issue line='Hello World'"

# 替換/etc/issue文件中最后一個帶Hello的整行替換成Hello Linux
ansible webservers -m lineinfile -a "path=/etc/issue regexp='Hello' line='Hello Linux'"
```

??? ?replace模塊

> 用于關鍵詞匹配替換

```shell
## 常用參數
? ? path:待修改的文件路徑
? ? replace:將正則表達式查到的內容,替換成replace的內容
? ? regexp:正則表達式,用于查找文件中的內容

# 替換/etc/issue文件中所有Hello的字符串為Hi
ansible webservers -m replace -a "path=/etc/issue regexp='Hello' replace='Hi'"
```

-----------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------

??? ?user模塊

> 用于實現Linux用戶管理

```shell
## 常用參數
? ? name:待創建的用戶名
? ? uid:用戶ID
? ? group:設置主組
? ? groups:設置附加組
? ? home:設置家目錄
? ? password:設置用戶密碼
? ? state:狀態。present表示創建,它是默認選項。absent表示刪除
? ? remove:刪除家目錄、郵箱等。值為yes或true都可以

# 使用user模塊創建用戶
ansible webservers -m user -a "name=tom"

# 使用user模塊創建用戶并設置用戶屬性,group是屬組,groups是附加組
ansible webservers -m user -a "name=jim uid=1010 group=adm groups=daemon,root home=/home/jim"

# {{}}是固定格式,表示執行命令
# password_hash()是函數,sha512是加密算法
ansible webservers -m user -a "name=tom password={{'123456'|password_hash('sha512')}}"
ansible webservers -m user -a "name=tom state=absent"
ansible webservers -m user -a "name=jim state=absent remove=true"
```

??? ?group模塊

> 用于實現Linux組管理

```shell
## 常用參數
? ? name:待創建的組名
? ? gid:組的ID號
? ? state:present表示創建,它是默認選項。absent表示刪除

# 使用group模塊創建devops組
ansible webservers -m group -a "name=devops"

# 使用group模塊刪除devops組
ansible webservers -m group -a "name=devops state=absent"
```

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

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

相關文章

C++ 提高編程:模板與 STL 深度剖析

摘要:本文深入探討 C 提高編程中的模板編程與標準模板庫(STL)相關內容。詳細闡述模板編程中函數模板和類模板的概念、語法、特性及應用案例;對 STL 的誕生背景、基本概念、六大組件進行剖析,并對常用容器、函數對象、常…

C++(類模板的運用)

使用vector實現一個簡單的本地注冊登錄系統 注冊&#xff1a;將賬號密碼存入vector里面&#xff0c;注意防重復判斷 登錄&#xff1a;判斷登錄的賬號密碼是否正確 #include <iostream> #include <vector> #include <fstream> #include <sstream> usi…

【大模型】DeepSeek+藍耕MaaS平臺+海螺AI生成高質量視頻實戰詳解

目錄 一、前言 二、藍耘智能云MaaS平臺介紹 2.1 藍耘智算平臺是什么 2.2 平臺優勢 2.3 平臺核心能力 三、海螺AI視頻介紹 3.1 海螺AI視頻是什么 3.2 海螺AI視頻主要功能 3.3 海螺AI視頻應用場景 3.4 海螺AI視頻核心優勢 3.5 項目git地址 四、藍耘MaaS平臺DeepSeek海…

接口自動化學習二:session自動管理cookie

session自動管理cookie&#xff1a; cookie中的數據&#xff0c;都是session提供的 實現步驟&#xff1a; 1.創建session對象&#xff1b;my_sessionrequests.Session() 2.使用session實例&#xff0c;調用get方法&#xff0c;發送獲取驗證碼請求&#xff08;不需要提取cookie&…

C++類型轉換詳解

目錄 一、內置 轉 內置 二、內置 轉 自定義 三、自定義 轉 內置 四、自定義 轉 自定義 五、類型轉換規范化 1.static_case 2.reinterpret_cast 3.const_cast 4.dynamic_cast 六、RTTI 一、內置 轉 內置 C兼容C語言&#xff0c;在內置類型之間轉換規則和C語言一樣的&am…

QEMU源碼全解析 —— 塊設備虛擬化(17)

接前一篇文章:QEMU源碼全解析 —— 塊設備虛擬化(16) 本文內容參考: 《趣談Linux操作系統》 —— 劉超,極客時間 《QEMU/KVM源碼解析與應用》 —— 李強,機械工業出版社 《KVM實戰 —— 原理、進階與性能調優》—— 任永杰 程舟,機械工業出版社

mac 卸載流氓軟件安全助手

之前個人電腦在公司使用過一段時間&#xff0c;為了使用網線聯網安裝了公司指定的 聯軟上網助手&#xff0c;誰知安裝容易卸載難&#xff0c;后來找運維來卸載&#xff0c;輸入管理員密碼后&#xff0c;也無反應&#xff0c;最后不了了之了&#xff0c;這個毒瘤軟件長期在后臺駐…

Java 大視界 -- Java 大數據機器學習模型在智能客服多輪對話系統中的優化策略(179)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

極氪汽車云原生架構落地實踐

云原生架構落地實踐的背景 隨著極氪數字業務的飛速發展&#xff0c;背后的 IT 技術也在不斷更新迭代。極氪極為重視客戶對服務的體驗&#xff0c;并將系統穩定性、業務功能的迭代效率、問題的快速定位和解決視為構建核心競爭力的基石。 為快速響應用戶的需求&#xff0c;例如…

Python?判斷循環

????˙?˙? ? 判斷??常用的判斷符號(比較運算符)andor括號notin 和 not inif-elif-else循環??計數循環 forrange()函數簡易倒計時enumerate()函數zip()函數遍歷列表遍歷元組遍歷字符串遍歷字典條件循環 while提前跳轉 continue跳出循環 break能量站??判斷?? …

FreeRTOS與RT-Thread深度對比:從入門到精通的全面解析

FreeRTOS與RT-Thread深度對比&#xff1a;從入門到精通的全面解析 在嵌入式系統開發領域&#xff0c;實時操作系統(RTOS)扮演著至關重要的角色。FreeRTOS和RT-Thread作為兩款主流的開源RTOS&#xff0c;各有特色&#xff0c;適用于不同的應用場景。本文將從小白到大神的角度&a…

OpenCV 圖形API(18)用于執行兩個矩陣(或數組)的逐元素減法操作函數sub()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 描述 計算兩個矩陣之間的逐元素差值。 sub 函數計算兩個矩陣之間的差值&#xff0c;要求這兩個矩陣具有相同的尺寸和通道數&#xff1a; dst ( I ) src…

LeetCode刷題SQL筆記

系列博客目錄 文章目錄 系列博客目錄1.distinct關鍵字 去除重復2.char_length()3.group by 與 count()連用4.date類型有個函數datediff()5.mod 函數6.join和left join的區別1. **JOIN&#xff08;內連接&#xff0c;INNER JOIN&#xff09;**示例&#xff1a; 2. **LEFT JOIN&a…

其他合成方式介紹

在 SurfaceFlinger 的 Layer 處理邏輯中&#xff0c;除了常見的 Client Composition&#xff08;GPU合成&#xff09; 和 Device Composition&#xff08;HWC合成&#xff09;&#xff0c;還存在一些特殊的合成方式&#xff0c;比如 Sideband、Solid Color 和 Display Decorati…

GraphRAG與知識圖譜

一、GraphRAG介紹 1.1 什么是 Graph RAG&#xff1f; Graph RAG&#xff08;Retrieval-Augmented Generation&#xff09;&#xff0c;是一種基于知識圖譜的檢索增強技術&#xff0c; 通過構建圖模型的知識表達&#xff0c;將實體和關系之間的聯系用圖的形式進行展示&#xff…

一個開源的 VS Code 大模型聊天插件:Light-at

這篇文章是一個開發雜談。對于有經驗的開發者來說&#xff0c;可能這個項目并不算特別復雜或者高技術&#xff0c;只是對我個人來說算一個里程碑&#xff0c;因此寫篇雜談文章記錄一下。也許也能給起步者一些參考。 項目地址&#xff1a;https://github.com/HiMeditator/light-…

SQL121 創建索引

-- 普通索引 CREATE INDEX idx_duration ON examination_info(duration);-- 唯一索引 CREATE UNIQUE INDEX uniq_idx_exam_id ON examination_info(exam_id);-- 全文索引 CREATE FULLTEXT INDEX full_idx_tag ON examination_info(tag);描述 現有一張試卷信息表examination_in…

【Pandas】pandas DataFrame set_flags

Pandas2.2 DataFrame Attributes and underlying data 方法描述DataFrame.index用于獲取 DataFrame 的行索引DataFrame.columns用于獲取 DataFrame 的列標簽DataFrame.dtypes用于獲取 DataFrame 中每一列的數據類型DataFrame.info([verbose, buf, max_cols, …])用于提供 Dat…

Linux終止進程(kill process)的一些玩法

經常運行一個程序時&#xff0c;表面上已經終止了&#xff0c;實際上還在后臺運行。一來呢&#xff0c;它可能占據端口&#xff0c;導致端口復用的時候報錯。二來呢&#xff0c;它可能占用GPU&#xff0c;讓你顯存直接少一塊。 尤其是在多進程程序&#xff0c;假如運行“python…

《比特城傳奇:公鑰、私鑰與網絡安全的守護之戰》

點擊下面圖片帶您領略全新的嵌入式學習路線 &#x1f525;爆款熱榜 88萬閱讀 1.6萬收藏 第一章&#xff1a;雙鑰之謎 比特城的清晨總是籠罩著一層薄霧&#xff0c;仿佛這座城市本身就是由無數個0和1編織而成的幻境。在這里&#xff0c;信息如同空氣般無處不在&#xff0c;但…