目錄
Ansible常用模塊
1.1、Ansible Ad-hoc
什么事ad-hoc???就是臨時的命令,不會保存,ansible的模式有兩種,分別是ad-hoc(命令行模式)和playbook模式。ad-hoc主要用於日常查詢和拷貝文件的常用操作。
ad-hoc命令行格式:
ansible bgx -m command -a 'df -h'
命令 主機名稱 指定模塊 模塊名稱 模塊動作 具體命令
ad-hoc執行的狀態返回信息:
- 綠色:執行成功並且不需要做改變的動作
- 黃色:執行成功並且對目標主機做變更
- 紅色:執行失敗
ad-hoc的執行過程:
- 加載自己的配置文件,默認/etc/ansible/ansible.cfg
- 加載自己對應的模塊文件,如command ping
- 通過ansible將模塊或命令生成對應的臨時py文件,並將該文件傳輸至遠程服務器
- 給文件+x權限
- 執行並返回結果
- 刪除臨時py文件,sleep 10 退出
1.2、Ansible的基礎命令
ansible ansible-doc ansible-playbook ansible-vault ansible-console ansible-galaxy ansible-pull
Ansible-doc 顯示模塊幫助
ansible-doc [options] [module...]
-a 顯示所有模塊的文檔
-l --list 列出可用模塊
-s --snippet 顯示制定模塊的playbook片段
示例:
ansible-doc -l 列出所有模塊
ansible-doc ping 查看制定模塊幫助用法
ansible-doc -s ping 查看制定模塊幫助用法
Ansible命令用法
ansible <host-pattern> [-m module_name] [-a args]
--version 顯示版本
-m module 制定模塊默認為 command
-v 詳細過程 -vv -vvv更詳細
--list-hosts 顯示主機列表 可以簡寫為--list
-k --ask-pass 提示數據ssh連接密碼 默認key驗證
-K --ask-become-pass 提示輸入sodu的口令
-C check 檢查並不執行
-T --timeout=TIMEOUT 執行命令的超時時間 默認10s
-u --user=REMOTE_USER 執行遠程執行的用戶
-b --become 代替舊版的sudo切換
1.3、常用模塊
1.3.1、command模塊
# 默認模塊,執行命令
[root@ansible ~]# ansible web -m command -a "hostname"
192.168.0.135 | CHANGED | rc=0 >>
ansible
192.168.0.101 | CHANGED | rc=0 >>
localhost.localdomain
1.3.2、shell模塊
# 和command類似,但是在執行帶有管道命令執行時,則需要用shell模塊,如下
[root@ansible ~]# ansible web -m shell -a "ifconfig eth0 | awk 'NR==2 {print $2}'"
192.168.0.101 | CHANGED | rc=0 >>
inet 192.168.0.101 netmask 255.255.255.0 broadcast 192.168.0.255
192.168.0.135 | CHANGED | rc=0 >>
inet 192.168.0.135 netmask 255.255.255.0 broadcast 192.168.0.255
1.3.3、script模塊
[root@ansible ~]# mkdir ansible
[root@ansible ~]# cd ansible/
[root@ansible ansible]# ls
[root@ansible ansible]# vim 1.sh
#!/bin/bash
hostname
[root@ansible ansible]# chmod +x 1.sh
#在本地運行模塊,等同於在遠程執行,不需要將腳本文件進行推送目標主機執行
[root@ansible ansible]# ansible web -m script -a 1.sh
1.3.4、copy模塊
#拷貝文件模塊
[root@ansible ~]# ansible web -m copy -a "src=/etc/hosts dest=/tmp/test.txt"
[root@ansible ~]# ansible web -a "ls /tmp/test.txt"
192.168.0.135 | CHANGED | rc=0 >>
/tmp/test.txt
192.168.0.116 | CHANGED | rc=0 >>
/tmp/test.txt
#除了基礎的拷貝,還可以在拷貝的時候對目標主機的文件進行備份,更改所屬和權限等等。
src #推送數據的源文件信息
dest #推送數據的目標路徑
backup #對推送傳輸過去的文件,進行備份
content #直接批量在被管理端文件中添加內容
group #將本地文件推送到遠端,指定文件屬組信息
owner #將本地文件推送到遠端,指定文件屬主信息
mode #將本地文件推送到遠端,指定文件權限信息
[root@ansible ~]# ansible web -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup=yes mode=755 owner=bin"
[root@ansible ~]# ansible web -a 'ls -l /tmp/test.txt'
192.168.0.135 | CHANGED | rc=0 >>
-rwxr-xr-x 1 bin root 158 Nov 15 13:56 /tmp/test.txt
192.168.0.116 | CHANGED | rc=0 >>
-rwxr-xr-x 1 bin root 158 Nov 15 13:56 /tmp/test.txt
1.3.5、fetch模塊
#從客戶端取文件到服務端,與copy相反
[root@ansible ~]# ansible web -m fetch -a 'src=/root/2.sh dest=/tmp/'
[root@ansible ~]# tree /tmp/192.168.0.1*
/tmp/192.168.0.116
└── root
└── 2.sh
/tmp/192.168.0.135
└── root
└── 2.sh
#默認只支持單個文件,不支持多個文件或目錄,做個文件建議放進目錄內tar打包后進行拉取
1.3.6、file模塊
# 更改文件屬性
[root@ansible ~]# ansible web -m file -a 'path=/root/2.sh mode=755'
# 創建文件
[root@ansible ~]# ansible web -m file -a "path=/tmp/22.txt state=touch"
# 創建目錄
[root@ansible ~]# ansible web -m file -a "path=/tmp/textdir state=directory"
# 創建軟鏈接
[root@ansible ~]# ansible web -m file -a "src=/tmp/textdir path=/tmp/textdir_link state=link"
#這里的path也可以使用dest或者是name關鍵字進行代替,都是一樣的效果,具體可以查看ansible-doc file的幫助文檔
path #指定遠程主機目錄或文件信息
recurse #遞歸授權
state
directory #在遠端創建目錄
touch #在遠端創建文件
link #link或hard表示創建鏈接文件
absent #表示刪除文件或目錄
mode #設置文件或目錄權限
owner #設置文件或目錄屬主信息
group #設置文件或目錄屬組信息
1.3.7、hostname模塊
[root@ansible ~]# ansible 192.168.0.116 -m hostname -a "name=node01"
[root@ansible ~]# ansible 192.168.0.116 -a "hostname"
192.168.0.116 | CHANGED | rc=0 >>
node01
1.3.8、cron模塊
# 創建計划任務
[root@ansible ~]# ansible web -m cron -a 'minute=* weekday=1,3,5 job="ntpdate ntp1.aliyun.com" name=update_time'
[root@ansible ~]# ansible web -m shell -a "crontab -l"
192.168.0.135 | CHANGED | rc=0 >>
#Ansible: update_time
* * * * 1,3,5 ntpdate ntp1.aliyun.com
192.168.0.116 | CHANGED | rc=0 >>
#Ansible: update_time
* * * * 1,3,5 ntpdate ntp1.aliyun.com
# 取消計划任務,必須是在全部命令加上disabled,否則就是新建的另一個計划任務
[root@ansible ~]# ansible web -m cron -a 'disabled=true minute=* weekday=1,3,5 job="ntpdate ntp1.aliyun.com" name=update_time'
# 再次打開計划任務
[root@ansible ~]# ansible web -m cron -a 'disabled=false job="ntpdate ntp1.aliyun.com" name=update_time'
# 刪除計划任務
[root@ansible ~]# ansible web -m cron -a 'job="ntpdate ntp1.aliyun.com" name=update_time state=absent'
1.3.9、yum模塊
[root@ansible ~]# ansible web -m yum -a "name=vsftpd"
name #指定要安裝的軟件包名稱
state #指定使用yum的方法
installed,present #安裝軟件包
removed,absent #移除軟件包
latest #安裝最新軟件包
[root@ansible ~]# ansible web -m shell -a "rpm -q vsftpd"
1.3.10、service模塊
# 設置服務的啟動、關閉、重啟以及開機自啟
[root@ansible ~]# ansible web -m service -a "name=vsftpd state=started enabled=yes"
[root@ansible ~]# ansible web -m shell -a "netstat -tulnp |grep 21"
name # 定義要啟動服務的名稱
state # 指定服務狀態
started #啟動服務
stopped #停止服務
restarted #重啟服務
reloaded #重載服務
enabled #開機自啟
1.3.11、group模塊
[root@ansible ~]# ansible web -m group -a "name=testing gid=1010"
name #指定創建的組名
gid #指定組的gid
state
absent #移除遠端主機的組
present #創建遠端主機的組(默認)
1.3.12、user模塊
[root@ansible ~]# ansible web -m user -a "name=kobe uid=1012 group=1010 shell=/sbin/nologin create_home=no"
uid #指定用戶的uid
group #指定用戶組名稱
groups #指定附加組名稱
password #給用戶添加密碼
shell #指定用戶登錄shell
create_home #是否創建家目錄