Ansible的常用模組
阿新 • • 發佈:2021-08-10
Ansible的常用模組
Ansible的常用模組
ansible的執行
- ad-hoc
- playbook
ansible ad-hoc的基本概述
什麼是ansible ad-hoc
ad-hoc:臨時的命令,執行後結束,不會儲存
ad-hoc模式的使用場景
比如在多臺機器上檢視某個程序是否啟動,或拷貝指定檔案到本地,等等
ad-hoc模式的命令使用
# 1.語法 ansible 主機名(主機清單中的主機名或主機組) -m 模組名 [-a 動作] [root@m01 ~]# ansible web_group -m shell -a 'free -m' web01 | CHANGED | rc=0 >> total used free shared buff/cache available Mem: 972 196 310 41 465 553 Swap: 1023 0 1023 web02 | CHANGED | rc=0 >> total used free shared buff/cache available Mem: 972 191 429 43 351 567 Swap: 1023 0 1023
ad-hoc結果返回顏色
- 綠色: 被管理端執行成功,並且結果不會發生改變
- 黃色: 被管理端執行成功,但是結果是變化的
- 紅色: 執行失敗,注意看報錯
Ansible常用模組
ansible 檢視模組的命令
ansible-doc 模組名
[root@m01 ~]# ansible-doc yum
Ansible命令模組:command、shell、script
command模組
# 語法 ansible web_group -m command -a '命令'(不帶特殊符號) # 舉例 [root@m01 ~]# ansible web_group -m command -a 'df -h' web01 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on /dev/sda3 19G 1.7G 17G 10% / devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.7M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 497M 120M 378M 25% /boot tmpfs 98M 0 98M 0% /run/user/0 web02 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on /dev/sda3 19G 1.9G 17G 10% / devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.7M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 497M 120M 378M 25% /boot tmpfs 98M 0 98M 0% /run/user/0
shell模組
# 語法 ansible web_group -m shell -a '命令' [root@m01 ~]# ansible web_group -m shell -a 'free -m' web01 | CHANGED | rc=0 >> total used free shared buff/cache available Mem: 972 196 310 41 465 553 Swap: 1023 0 1023 web02 | CHANGED | rc=0 >> total used free shared buff/cache available Mem: 972 191 429 43 351 567 Swap: 1023 0 1023
script模組(遠端執行指令碼)
# ansible遠端執行指令碼
ansible web_group -m script -a '指令碼路徑'
# 建立指令碼
[root@m01 ~]# cat test.sh
#!/bin/bash
mkdir /root/dsr -p
echo 123 > /root/dsr/text
#在本地執行模組,等同於在遠端執行,不需要將指令碼檔案進行推送目標主機執行
[root@m01 ~]# ansible web_group -m script -a '/root/test.sh'
[root@web01 ~]# cat /root/dsr/1.txt
123
[root@web02 ~]# cat /root/dsr/1.txt
123
ansible軟體管理模組:yum、yum_repository
yum模組(安裝,刪除軟體)
# 語法
ansible web_group -m yum -a 'name=包名 state=安裝或刪除'
# 選項
- name:
-直接指定包名:從倉庫安裝
-http:// 從指定URL安裝
-file:// 從本地安裝 類似於 yum
- state:
-present 安裝軟體包
-absent 刪除軟體包
-latest 安裝最新軟體包
- download_only:
-true: 只下載不安裝
-false: 下載並安裝
[root@m01 ~]# ansible-doc yum
exclude=kernel*,foo* #排除某些包
list=ansible #類似於yum list檢視是否可以安裝
disablerepo="epel,ol7_latest" #禁用指定的yum倉庫
download_only=true #只下載不安裝 yum install d
# 同時在web01和web02安裝tree
[root@m01 ~]# ansible web_group -m yum -a 'name=tree state=present'
web01 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"changes": {
"installed": [
"tree"
]
},
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\nResolving Dependencies\n--> Running transaction check\n---> Package tree.x86_64 0:1.6.0-10.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n tree x86_64 1.6.0-10.el7 base 46 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 46 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : tree-1.6.0-10.el7.x86_64 1/1 \n Verifying : tree-1.6.0-10.el7.x86_64 1/1 \n\nInstalled:\n tree.x86_64 0:1.6.0-10.el7 \n\nComplete!\n"
]
}
yum_repository模組(建立,追加,刪除yum倉庫
# 語法
ansible 主機名 -m yum_repository -a ‘name=倉庫名 description=描述 baseurl=倉庫url gpgcheck=yes或no enabled=yes或no file=倉庫的檔名’
# 選項
yum_repository
- name:倉庫名字(如果有file,只是倉庫名,如果沒有file,檔名和倉庫名)
- file:指定倉庫的檔名
- description:倉庫的描述(name)
- baseurl:倉庫的url
- gpgcheck:
- no:不開啟 0
- yes:開啟 1(預設)
- enabled:
- no:不開啟 0
- yes:開啟 1 (預設)
- state:
-present:建立倉庫(預設可寫可不寫)
-absent : 刪除倉庫
## 建立新的倉庫配置檔案
[root@m01 ~]# ansible lb_group -m yum_repository -a 'name=dsr description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'
[root@lb01 ~]# cat /etc/yum.repos.d/dsr.repo
[dsr]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx
[root@lb02 ~]# cat /etc/yum.repos.d/dsr.repo
[dsr]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx
## 建立新的倉庫配置,並且檔名和倉庫名不同
ansible web01 -m yum_repository -a 'name=local file=zls_local description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'
[root@m01 ~]# ansible web01 -m yum_repository -a 'name=local file=zls_local description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'
web01 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"repo": "local",
"state": "present"
}
[root@web01 ~]# cat /etc/yum.repos.d/zls_local.repo
[local]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx
## 追加倉庫
[root@m01 ~]# ansible web01 -m yum_repository -a 'name=test2 file=zls_local description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'
[root@web01 ~]# cat /etc/yum.repos.d/zls_local.repo
[local]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx
[test2]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx
## 刪除倉庫
[root@m01 ~]# ansible web01 -m yum_repository -a 'name=test2 file=zls_local state=absent'
web01 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"repo": "test2",
"state": "absent"
}
[root@web01 ~]# cat /etc/yum.repos.d/zls_local.repo
[local]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx
Ansible檔案管理模組:copy、file、get_url
copy模組(遠端推送、將命令變成cp命令,拷貝軟連結)
# 語法
ansible 主機名 -m 模組名 -a 'src=原始檔 dest=目標路徑'
# 選項
copy
- src:指定原始檔的路徑
- dest:指定目標路徑
- owner:指定屬主
- group:指定屬組
- mode:指定許可權
- backup:
- yes:如果目標路徑,存在同名檔案,就將目標檔案備份
- no:不備份直接覆蓋(預設)
- content:將指定文字內容覆蓋到目標檔案中
- remote_src:將命令變成cp
- yes:將原始檔,程式設計遠端的原始檔(ansible被管理端)
- no:原始檔還是本地檔案(ansible管理端 預設)
- follow:拷貝軟連線
- yes:會將軟連線一起拷貝
- no:會生成一個新的軟連線檔案
## 遠端推送檔案
[root@m01 ~]# ansible lb01 -m copy -a 'src=/etc/passwd dest=/tmp'
[root@lb01 ~]# ll /tmp/
-rw-r--r-- 1 root root 1022 Aug 11 04:15 passwd
## 遠端有同名檔案時,想把同名檔案備份
[root@m01 ~]# ansible lb01 -m copy -a 'src=/etc/passwd dest=/tmp backup=yes'
[root@lb01 ~]# ll /tmp/
total 8
-rw-r--r-- 1 root root 1022 Aug 11 04:24 passwd
-rw-r--r-- 1 root root 1041 Aug 11 04:24 passwd.63406.2021-08-11@04:24:59~