ansible基礎-模組
ansible 簡介
ansible首次釋出於2012年,作者michael DeHaan,michael DeHaan也是cobbler的作者,於2015年被redhat收購
ansible是一款自動化運維工具,給予python開發
批量系統配置
批量程式部署
批量執行命令等動能
ansible產品特色:
基於ssh架構 模組豐富
社群活躍 支援自定義模組
支援異構IT架構 部署簡單,容易上手
部署Ansible
ansible原理:
控制端主機自帶很多模組(模組就是指令碼);
ansible通過ssh遠端被管理主機,將控制端的模組(指令碼)或命令傳輸到被管理主機;
在被管理端主機執行模組(指令碼)或命令,執行不同的模組或命令可以實現不同的功能;
最後ansible退出ssh遠端。
絕大多數模組(指令碼)都需要引數才能執行成功!!!類似於shell指令碼的位置變數!
問題:要求先快速搭建好一個Ansible平臺,並測試環境,要求如下:
建立實驗主機(控制端和被控制端)
配置SSH實驗環境
安裝Ansible自動化軟體
修改Ansible配置
方案:
實驗環境,作業系統為RHEL8,配置主機名稱、IP地址、YUM源。
步驟一:準備基礎環境
(1)域名解析(為了方便後期操作,可以不做)
(2)配置SSH金鑰(ansible是基於ssh實現遠端控制)
(3)安裝Ansible軟體(僅在control主機操作)
# tar -xf ansible_soft.tar.gz
# cd ansible_soft
# dnf -y install *
注意:
被控制節點要求:
Ansible預設通過SSH協議管理機器
被管理主機要開啟SSH服務,並允許控制主機登入
被管理主機需要安裝有Python
步驟二:修改配置檔案
主配置檔案說明:
主配置檔案ansible.cfg(主配置檔案的內容可以參考/etc/ansible/ansible.cfg)
ansible配置檔案查詢順序
首先檢測ANSIBLE_CONFIG變數定義的配置檔案(預設沒有這個變數)
其次檢查當前目錄下的./ansible.cfg檔案
再次檢查當前使用者家目錄下~/ansible.cfg檔案
最後檢查/etc/ansible/ansible.cfg檔案
(1)修改主配置檔案。
# mkdir ~/ansible
# vim ~/ansible/ansible.cfg
[defaults]
inventory = ~/ansible/inventory
#主機清單配置檔案(inventory可以是任意檔名),英語詞彙:inventory(清單、財產清單)
#forks = 5 #ssh併發數量
#ask_pass = True #使用金鑰還是密碼遠端,True代表使用密碼
#host_key_checking = False #是否校驗金鑰(第一次ssh時是否提示yes/no)
(2)修改主機清單檔案(清單檔名必須與主配置檔案inventory定義的一致)
# vim ~/ansible/inventory
[test] #定義主機組(組名稱任意)
node1 #定義組中的具體主機,組中包括一臺主機node1
[proxy] #定義主機組(組名稱任意),英語詞彙:proxy(代理人,委託人)
node2 #proxy組中包括一臺主機node2
[webserver]
node[3:4] #這裡的node[3:4]等同於node3和node4
[database]
node5
[cluster:children] #巢狀組(children為關鍵字),不需要也可以不建立巢狀組
webserver #巢狀組可以在組中包含其他組
database
Ansible ad-hoc具體應用
測試主機列表中的主機是否可以ping通
檢視被管理主機的伺服器資訊(如時間、版本、記憶體等)
學習ansible-doc命令的用法
測試command與shell模組的區別
使用script模組在遠端主機執行指令碼(裝軟體包、啟服務)
通過ansible-doc獲取幫助
# ansible-doc -l #列出所有模組
# ansible-doc -l | grep yum #在所有模組中過濾關鍵詞
# ansible-doc yum #檢視模組幫助
1.測試環境
(1)檢視主機列表
# cd ~/ansible #非常重要
# ansible all --list-hosts #檢視所有主機列表
(2)測試遠端主機是否能ping通。
# ansible node1 -m ping #呼叫ping模組
# ansible node1,webserver -m ping
(3)模組就是指令碼(多數為Python指令碼),多數指令碼都支援引數,預設模組為command。
# ansible node1 -m command -a "uptime" #檢視CPU負載
# ansible node1 -m command -a "uname -r" #檢視核心版本
# ansible node1 -a "ip a s" #檢視網路卡資訊
# ansible all -a "date" #檢視時間
(4)Shell模組。
command和shell模組的區別,command不支援bash的特性(bash有哪些特性可以參考Shell課程第一天的PPT),如管道和重定向等功能,但是shell模組可以支援。
不可以使用shell模組執行互動命令,如vim、top等。
# ansible test -m command -a "ps | wc -l" #報錯
# ansible test -m command -a "ls &" #報錯
# ansible test -m shell -a "ps aux | wc -l" #程式數量
# ansible test -m shell -a "who" #登陸資訊
ansible test -m shell -a "touch /tmp/txt.txt"
#使用shell模組建立檔案會有Warning警告提示,正常!!!
(5)script模組
script模組會把-a後面的指令碼拷貝到被管理端主機,然後執行這個指令碼。
# vim ~/ansible/test.sh
#!/bin/bash
dnf -y install httpd
systemctl start httpd
# ansible test -m script -a "./test.sh"
#test是主機組的名稱,-m呼叫script模組,-a後面的./test.sh是上面建立指令碼的相對路徑和檔名
#./是當前目錄的意思,在當前目錄下有個指令碼叫test.sh
(6)file模組
file模組可以建立檔案、目錄、連結;修改許可權與屬性等(ansible-doc file)
# ansible test -m file -a "path=/tmp/file.txt state=touch" #遠端test組中所有主機,新建檔案,path後面指定要建立的檔案或目錄的名稱
#state=touch是建立檔案,state=directory是建立目錄
## 驗證: 到node1主機,使用ls /tmp/file.txt看看檔案是否被建立成功
(7)copy模組
copy模組可以將檔案拷貝到遠端主機 (ansible-doc copy)。
# echo AAA > ~/a3.txt #新建測試檔案
# ansible test -m copy -a "src=~/a3.txt dest=/root/"
#把管理端本機的a3.txt檔案,拷貝到test組中所有主機的/root/目錄
#src代表原始檔,dest代表目標檔案
## 驗證:到node1主機使用ls /root/a3.txt檢視是否有該檔案
(8)fetch模組
fetch模組與copy類似,但是作用相反,可以將其他主機的檔案拷貝到本地(ansible-doc fetch)。
#將遠端test組中所有主機的hostname檔案下載到本地家目錄
#src代表原始檔,dest代表目標檔案
# ls ~/ #使用ls檢視下是否下載成功
#不能下載目錄,如果需要下載目錄,可以先打包後再下載
(9)lineinfile模組
在修改單個檔案的單行內容時可以使用lineinfile模組(ansible-doc lineinfile)。
# ansible test -m lineinfile -a "path=/etc/issue line='hello world'
#在/etc/issue檔案中新增一行內容hello world,預設新增到最後,line後面跟的是需要新增的檔案內容
## 驗證:到node1主機執行命令cat /etc/issue檢視檔案內容是否正確
# ansible test -m lineinfile -a "path=/etc/issue line='hello world'"
#基於冪等原則,重複執行,不會建立多行內容
# ansible test -m lineinfile -a "path=/etc/issue line='insert' insertafter='Kernel'"
#將line後面的內容插入到/etc/issue檔案中Kernel行的後面
#英語詞彙:insert(插入),after(在…後面)
## 驗證:到node1主機執行命令cat /etc/issue檢視檔案內容是否正確
(10)replace模組
lineinfile會替換一整行,replace可以替換關鍵詞(ansible-doc replace)。
# ansible test -m replace -a "path=/etc/issue.net regexp=Kernel replace=Ocean"
#將node1主機中/etc/issue.net檔案全文所有的Kernel替換為Ocean
#regexp後面是需要替換的舊內容;replace後面是需要替換的新內容
## 驗證:到node1主機執行命令cat /etc/issue.net檢視檔案內容是否正確
(11)user模組
user模組可以實現Linux系統賬戶管理(ansible-doc user)
# ansible test -m user -a "name=tuser1"
#遠端test組中的所有主機並建立系統賬戶tuser1,預設state的值為present,代表建立使用者
## 驗證:到node1主機執行命令id tuser1檢視是否有該使用者
# ansible test -m user -a "name=tuser2 uid=1010 group=adm groups=daemon,root home=/home/tuser2"
#建立賬戶並設定對應的賬戶屬性,uid指定使用者ID號,group指定使用者屬於哪個基本組
#groups指定使用者屬於哪些附加組,home指定使用者的家目錄
## 驗證: 到node1主機執行命令id tuser2檢視是否有該使用者
# ansible test -m user -a "name=tuser1 password={{'abc'| password_hash('sha512')}}"
#修改賬戶密碼,使用者名稱是tuser1,密碼是abc,密碼經過sha512加密
# ansible test -m user -a "name=tuser1 state=absent"
#刪除賬戶tuser1,state=absent代表刪除賬戶的意思,name指定要刪除的使用者名稱是什麼
#賬戶的家目錄不會被刪除,相當於執行userdel tuser1
# ansible test -m user -a "name=tuser2 state=absent remove=true"
#刪除tuser2賬戶同時刪除家目錄、郵箱,相當於執行userdel -r tuser2
(12)yum_repository模組
使用yum_repository可以建立或修改yum源配置檔案(ansible-doc yum_repository)。
# ansible test -m yum_repository -a "name=myyum description=hello baseurl=ftp://192.168.4.254/centos gpgcheck=no"
#新建一個yum源配置檔案/etc/yum.repos.d/myyum.repo
#yum原始檔名為myyum,該檔案的內容如下:
[myyum]
baseurl = ftp://192.168.4.254/centos
gpgcheck = 0
name = hello
## 驗證:到node1主機ls /etc/yum.repos.d/檢視該目錄下是否有新的yum檔案
# ansible test -m yum_repository -a "name=myyum description=test baseurl=ftp://192.168.4.254/centos gpgcheck=yes gpgkey=…"
#修改yum原始檔內容
# ansible test -m yum_repository -a "name=myyum state=absent"
#刪除yum原始檔myyum
(13)yum模組
使用yum模組可以安裝、解除安裝、升級軟體包(ansible-doc yum),
state: present(安裝)|absent(解除安裝)|latest(升級)。
# ansible test -m yum -a "name=unzip state=present"
#安裝unzip軟體包,state預設為present,也可以不寫
## 驗證:到node1主機執行命令rpm -q unzip檢視是否有該軟體
# ansible test -m yum -a "name=unzip state=latest"
#升級unzip軟體包,軟體名稱可以是*,代表升級所有軟體包
# ansible test -m yum -a "name=unzip state=absent"
#呼叫yum模組,解除安裝unzip軟體包,state=absent代表解除安裝軟體
## 驗證:到node1主機執行命令rpm -q unzip檢視該軟體是否已經被解除安裝
(14)service模組(ansible-doc service)
service為服務管理模組(啟動、關閉、重啟服務等),
state:started|stopped|restarted,
enabled:yes設定開機啟動。
# ansible test -m yum -a "name=httpd"
#呼叫yum模組,安裝httpd軟體包
## 驗證:到node1主機執行命令rpm -q httpd檢視該軟體是否被安裝
# ansible test -m service -a "name=httpd state=started"
#呼叫service模組,啟動httpd服務
## 驗證:到node1主機執行命令systemctl status httpd檢視服務狀態
# ansible test -m service -a "name=httpd state=stopped"
#呼叫service模組,關閉httpd服務
## 驗證:到node1主機執行命令systemctl status httpd檢視服務狀態
# ansible test -m service -a "name=httpd state=restarted"
#呼叫service模組,重啟httpd服務
# ansible test -m service -a "name=httpd enabled=yes"
#呼叫service模組,設定httpd服務開機自啟
(15)lvg模組
建立、刪除卷組(VG),修改卷組大小,
state:present(建立)|absent(刪除)。
# ansible test -m yum -a "name=lvm2"
#安裝lvm2軟體包,安裝了lvm2軟體後,才有pvcreate、vgcreate、lvcreate等命令
# ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1"
#建立名稱為myvg的卷組,該卷組由/dev/sdb1組成
#注意:這裡的磁碟名稱要根據實際情況填寫
## 驗證:到node1主機執行命令pvs和vgs檢視是否有對應的PV和VG
# ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1,/dev/sdb2"
#修改卷組大小,往卷組中新增一個裝置/dev/sdb2
(16)lvol模組
建立、刪除邏輯卷(LV),修改邏輯卷大小,
state:present(建立)|absent(刪除)。
# ansible test -m lvol -a "lv=mylv vg=myvg size=2G"
#使用myvg這個卷組建立一個名稱為mylv的邏輯卷,大小為2G
## 驗證:到node1主機執行命令lvs檢視是否有對應的LV邏輯卷
# ansible test -m lvol -a "lv=mylv vg=myvg size=4G"
#修改LV邏輯卷大小
# ansible test -m lvol -a "lv=mylv vg=myvg state=absent force=yes"
#刪除邏輯卷,force=yes是強制刪除
# ansible test -m lvg -a "vg=myvg state=absent"
#刪除卷組myvg
相關文章
- 二、Ansible基礎之模組篇
- Ansible——模組
- ansible模組
- ansible常用模組
- ansible自定義模組
- Python基礎——模組Python
- kolla-ansible-----rally模組
- 阿里雲Ansible 模組文件阿里
- Python基礎12(模組與datetime模組)Python
- 前端模組化基礎前端
- Python基礎之模組Python
- Ansible 基礎入門
- python 基礎之模組與包Python
- python基礎學習16—-模組Python
- Javascript模組化開發基礎JavaScript
- python 基礎筆記——常用模組Python筆記
- Python基礎:常用系統模組Python
- 【python基礎】os模組的使用Python
- OpenWrt 基礎軟體模組之procd
- Python基礎(九) 常用模組彙總Python
- Python pip(管理模組工具)基礎用法Python
- 這5個Ansible 模組你喜歡嗎
- 一、Ansible基礎之入門篇
- 任務中心之Ansible基礎篇
- python基礎之-sys模組、os模組基本介紹(未完成)Python
- Django基礎八之認證模組---authDjango
- Vue.JS基礎- 外掛、模組化Vue.js
- [Linux]Ansible自動化運維② - 工具與模組Linux運維
- Ansible學習筆記——基礎與配置筆記
- python基礎--自定義模組、import、from......import......PythonImport
- SRAM的基礎模組存有三種情況
- Python基礎(八) 模組的引入與定義Python
- Swoole 原始碼分析——基礎模組之 Pipe 管道原始碼
- node基礎(2.1)-----手寫一個require模組UI
- Python基礎入門(8)- Python模組和包Python
- Node.js基礎知識之Path模組Node.js
- Python中常用模組有哪些?Python基礎教程Python
- Ansible 2.7.5 支援模組總表(中文翻譯施工中)