1. 程式人生 > 其它 >Ansible 常用基礎模組

Ansible 常用基礎模組

Ansible 常用基礎模組

Ansible 常用基礎模組

目錄

Ansible的執行

  • ad-hoc
  • playbook

Ansible ad-hoc

ad-hoc:簡而言之就是“臨時命令”,執行完即結束,並不會儲存

ad-hoc模式的使用場景

比如在多臺機器上檢視某個程序是否啟動,或拷貝指定檔案到本地,等等

ad-hoc模式的命令使用

語法:
ansible 主機名(主機清單中的主機名或主機組) -m 模組名 [-a 動作]

ad-hoc結果返回顏色

  • 綠色:被管理端執行成功,代表被管理端主機沒有被修改
  • 黃色:被管理端執行成功,但是結果是變化的
  • 紅色:執行失敗,注意看報錯

ad-hoc常用模組

command             # 執行shell命令(不支援管道等特殊字元)
shell               # 執行shell命令
scripts             # 執行shell指令碼
yum_repository      # 配置yum倉庫
yum                 # 安裝軟體
copy                # 變更配置檔案
file                # 建立目錄或檔案
service             # 啟動與停止服務
mount               # 掛載裝置
cron                # 定時任務
get_url             #下載軟體
firewalld           #防火牆
selinux             #selinux

Ansible-doc幫助手冊

ansible-doc 模組名
ansible-doc -l        # 檢視所有模組說明
ansible-doc copy      # 檢視指定模組方法
ansible-doc -s copy   # 檢視指定模組引數

Ansible命令模組

command模組

# 執行shell命令(不支援管道等特殊字元)
ansible web_group -m command -a '命令(不帶特殊符號)'

shell模組

# 執行shell命令
ansible web_group -m command -a '命令'

script模組

# 在本地執行模組,等同於在遠端執行指令碼,不需要將指令碼檔案進行推送目標主機執行
[root@m01 ~]$ ansible web_group -m script -a "/root/a.sh"

Ansible軟體管理模組

yum模組

# 遠端安裝tree命令
[root@m01 ~]$ ansible lb_group -m yum -a 'name=tree state=present'
# 遠端檢測tree命令是否安裝
[root@m01 ~]$ ansible lb_group -m yum -a 'list=tree'
選項:
-name:包名
	-直接指定包名:				從倉庫安裝(類似yum install httpd)
	-http://   :				從指定的URL安裝
	-file://   :				從本地安裝(類似:yum localinstall /root/http-1.rpm)
	
-state:動作,指定使用yum的方法
	-absent(removed,不推薦):	  		 解除安裝
	-present(installed,不推薦):			 安裝
	-latest:			  		安裝最新版本
	
-download_only
	-true:				 只下載不安裝
	-false:			 下載並安裝
	
-list
	-包名:			 檢測軟體包是否安裝		
	"yumstate": "available"  證明包可以安裝但是沒裝
	"yumstate": "installed"  已經安裝了

[root@m01 ~]$ ansible-doc yum
exclude=kernel*,foo*            #排除某些包
list=ansible                    #類似於yum list檢視是否可以安裝
disablerepo="epel,ol7_latest"   #禁用指定的yum倉庫

yum_repository模組

# 建立新的倉庫配置檔案,檔名和倉庫名叫nginx,描述是xxxx,倉庫的URL是baidu.com
[root@m01 ~]$ ansible lb_group -m yum_repository -a 'name=nginx description=xxxx baseurl=http://www.baidu.com gpgcheck=no enabled=yes'
[root@lb01 /etc/yum.repos.d]$ ll
-rw-r--r--  1 root root   77 Aug 10 17:45 nginx.repo

# 建立新的倉庫配置檔案,且檔名不和倉庫名一樣
[root@m01 ~]$ ansible lb_group -m yum_repository -a 'name=nginx file=wj_nginx description=xxxx baseurl=http://www.baidu.com gpgcheck=no enabled=yes'
[root@lb01 /etc/yum.repos.d]$ cat wj_nginx.repo 
[nginx]
baseurl = http://www.baidu.com
enabled = 1
gpgcheck = 0
name = xxxx

# 追加倉庫至檔案中
[root@m01 ~]$ ansible lb01 -m yum_repository -a 'name=httpd file=wj_nginx description=123456 baseurl=http://www.jd.com gpgcheck=no enabled=yes'
[root@lb01 /etc/yum.repos.d]$ cat wj_nginx.repo 
[nginx]
baseurl = http://www.baidu.com
enabled = 1
gpgcheck = 0
name = xxxx

[httpd]
baseurl = http://www.jd.com
enabled = 1
gpgcheck = 0
name = 123456

# 刪除倉庫檔案中的指定倉庫,如果倉庫刪完,倉庫檔案也會消失
[root@m01 ~]$ ansible lb01 -m yum_repository -a 'name=nginx file=wj_nginx state=absent'
[root@lb01 /etc/yum.repos.d]$ cat wj_nginx.repo 
[httpd]
baseurl = http://www.jd.com
enabled = 1
gpgcheck = 0
name = 123456

yum_repository模組詳解

yum_repository
	-name:倉庫名稱
	-file:指定倉庫的檔名
	-description:倉庫的描述(name)
	-baseurl:倉庫的url 
	-gpgcheck:是否檢查公鑰私鑰
		-no:不開啟 0
		-yes:開啟 1 (不配置預設開啟)
	-enabled:是否開啟倉庫
		-no:不開啟 0
		-yes:開啟 1(不配置預設開啟)

Ansible檔案管理模組

對於檔案管理,我們在學習Linux基礎的時候,就學習了很多命令,比如建立,刪除,移動,拷貝,下載等

copy模組

# 推送管理端優化檔案至被管理端
[root@m01 ~]$ ansible lb01 -m copy -a 'src=/root/a.txt dest=/root'
[root@lb01 ~]$ ll
-rw-r--r--  1 root root    7 Aug 10 18:15 a.txt
[root@lb01 ~]$ cat a.txt 
123456

# 將管理端的b.txt檔案也推到被管理端,並且也叫a.txt
[root@m01 ~]$ ansible lb01 -m copy -a 'src=/root/b.txt dest=/root/a.txt'
[root@lb01 ~]$ ll
-rw-r--r--  1 root root   11 Aug 10 18:19 a.txt
## 原檔案內容被覆蓋
[root@lb01 ~]$ cat a.txt
xxxxxxxxxx

# 推送管理端檔案至被管理端,被管理端檔名依然是a.txt,但是開啟備份
[root@m01 ~]$ ansible lb01 -m copy -a 'src=/root/a.txt dest=/root/a.txt backup=yes'
[root@lb01 ~]$ ll
## 最新推送過來的檔案
-rw-r--r--  1 root root    7 Aug 10 18:23 a.txt
## 原始檔被備份,以時間戳為名
-rw-r--r--  1 root root   11 Aug 10 18:19 a.txt.98672.2021-08-10@18:23:33~
[root@lb01 ~]$ cat a.txt.98672.2021-08-10@18\:23\:33~ 
xxxxxxxxxx
[root@lb01 ~]$ cat a.txt
123456

# 直接推送資訊到遠端指定檔案,原檔案內容會被覆蓋
[root@m01 ~]$ ansible lb01 -m copy -a "content='111111111' dest=/root/a.txt"
[root@lb01 ~]$ cat a.txt
111111111

# 推送管理端檔案至被管理端,指定被管理端檔案屬主屬組為nginx,許可權是777,並且如果有重名檔案就備份原檔案再覆蓋
[root@m01 ~]$ ansible lb01 -mcopy -a 'src=/root/a.txt dest=/root owner=nginx group=nginx mode=777 backup=yes'
[root@lb01 ~]$ ll
-rwxrwxrwx  1 nginx nginx    7 Aug 10 19:47 a.txt

copy模組詳解

copy
	-src:指定被推送原始檔的路徑
	-dest:指定目標路徑
	-owner:指定屬主 
	-group:指定屬組
	-mode:指定許可權
	-backup:
		-yes:如果目標路徑,存在同名檔案,就將目標檔案備份        
		-no:不備份直接覆蓋(預設)
	 -content:將指定文字內容覆蓋到目標檔案中    
	 -remote_src:將命令變成cp,相當於將遠端的原始檔拷貝到遠端的目標檔案
	 	-yes:將原始檔,變成遠端的原始檔(ansible被管理端)        
	 	-no:原始檔還是本地檔案(ansible管理端  預設)
	 -follow:拷貝軟連線
	  	- yes:會將軟連線一起拷貝        
	  	-no:會生成一個新的軟連線檔案