Ansible 常用基礎模組
阿新 • • 發佈:2021-08-10
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:會生成一個新的軟連線檔案