ansible之文件的批量分發

 

python語言是運維人員必會的語言!
ansible是一個基於Python開發的自動化運維工具
ansible的功能實現基於SSH遠程鏈接服務
ansible能夠實現批量系統配置,批量軟件部署,批量文件拷貝,批量運行命令等功能python

特色
1)不須要單獨安裝客戶端,基於系統自帶的sshd服務,sshd就至關於ansible的客戶端
2)不須要服務端
3)須要依靠大量的模塊實現批量管理
4)配置文件/etc/ansible/ansible.cfglinux

開始安裝ansible

yum -y install ansibleshell

全部被管理端須要安裝也能夠不安裝

yum -y install libselinux-python  ruby

ansible基礎配置

ansible的配置文件:bash

[root@m01 ~]# tree /etc/ansible/ /etc/ansible/ ├── ansible.cfg #ansible配置文件 ├── hosts #被ansible管理的主機名單(分組) └── roles 1 directory, 2 files

編輯ansible的主機配置文件hosts,添加主機組chensiqi運維

[root@m01 ~]# cp /etc/ansible/hosts{,.bak} #改前備份但是個好習慣 [root@m01 ~]# tail -6 /etc/ansible/hosts [chensiqi] 172.16.1.31 172.16.1.41 172.16.1.61 172.16.1.7 172.16.1.8

若是設置了ssh密鑰鏈接的話,hosts文件到這裏就算配置完畢了。可是咱們尚未設置,所以還須要對ansible的主機映射文件/etc/ansible/hosts繼續加工ssh

[root@m01 ~]# tail -6 /etc/ansible/hosts [chensiqi] 172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=登陸密碼 172.16.1.41 ansible_ssh_user=root ansible_ssh_pass=登陸密碼 172.16.1.61 ansible_ssh_user=root ansible_ssh_pass=登陸密碼 172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=登陸密碼 172.16.1.8 ansible_ssh_user=root ansible_ssh_pass=登陸密碼 命令說明: ansible_ssh_user:ssh鏈接的用戶名 ansible_ssh_pass:ssh鏈接的密碼

注意:
若是沒有作密鑰認證,hosts又沒有如上方式配置的話,ansible進行遠程鏈接是會失敗的。工具

利用ansible遠程批量執行命令

語法:測試

ansible chensiqi -m command -a 'uptime'
ansible 主機組 -m ansible內置功能模塊名 -a 命令ui

ansible命令測試

示例1:獲取172.16.1.8的主機的w信息

[root@m01 ~]# ansible 172.16.1.8 -m command -a "w" 172.16.1.8 | SUCCESS | rc=0 >> 13:44:07 up 5:32, 3 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - Sat09 14:16 0.07s 0.07s -bash root pts/0 172.16.1.1 Mon23 13:29m 0.08s 0.00s -bash root pts/1 m01 13:44 0.00s 0.14s 0.00s /bin/sh -c /usr [root@m01 ~]# 

示例2:獲取整個chensiqi主機組的對應的「w」信息

[root@m01 ~]# ansible chensiqi -m command -a "w" 172.16.1.8 | SUCCESS | rc=0 >> 13:45:12 up 5:33, 3 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - Sat09 15:21 0.07s 0.07s -bash root pts/0 172.16.1.1 Mon23 13:30m 0.08s 0.00s -bash root pts/1 m01 13:45 0.00s 0.12s 0.00s /bin/sh -c /usr 172.16.1.61 | SUCCESS | rc=0 >> 21:05:58 up 6:34, 3 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - 14:41 4:22m 0.07s 0.07s -bash root pts/0 172.16.1.1 16:44 2.00s 1.11s 0.67s /usr/bin/python root pts/8 m01 21:05 1.00s 0.10s 0.00s /bin/sh -c /usr 172.16.1.7 | SUCCESS | rc=0 >> 12:05:07 up 1:05, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - 11:00 26:21 0.09s 0.09s -bash root pts/0 m01 12:05 0.00s 0.30s 0.00s /bin/sh -c /usr 172.16.1.41 | SUCCESS | rc=0 >> 22:36:51 up 18:39, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - 03:58 58:54 0.11s 0.11s -bash root pts/0 m01 22:36 0.00s 0.32s 0.00s /bin/sh -c /usr 172.16.1.31 | SUCCESS | rc=0 >> 13:45:13 up 6:49, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - Mon20 13:42 0.15s 0.15s -bash root pts/0 m01 13:45 0.00s 0.30s 0.00s /bin/sh -c /usr [root@m01 ~]# 

示例3:調用ansible內置的copy模塊

[root@m01 ~]# ansible 172.16.1.8 -m copy -a "src=/etc/hosts dest=/tmp" #輸入命令 172.16.1.8 | SUCCESS => { "changed": true, "checksum": "dba0126bf49ea8d4cdc476828f9edb37085c6afe", "dest": "/tmp/hosts", "gid": 0, "group": "root", #文件複製過去之後的屬組 "md5sum": "09bad48d0c62411850fd04b68f836335", "mode": "0644", #文件複製過去之後的權限 "owner": "root", #文件複製過去之後的屬主 "secontext": "unconfined_u:object_r:admin_home_t:s0", "size": 294, "src": "/root/.ansible/tmp/ansible-tmp-1489411262.1-267125154401179/source", "state": "file", "uid": 0 } [root@m01 ~]# ansible 172.16.1.8 -m command -a "ls /tmp" #查看一下對方主機目錄下有啥 172.16.1.8 | SUCCESS | rc=0 >> ansible_0qlGau hosts #在這裏呢,拷貝成功 pulse-d3qHAaSjkIhZ pulse-PbcqlrG9QxEK virtual-root.yrc60j yum.log [root@m01 ~]# ssh root@172.16.1.8 "ls /tmp" #用ssh再看一下 `root@172.16.1.8's password: ` hosts #在這裏呢拷貝成功 pulse-d3qHAaSjkIhZ pulse-PbcqlrG9QxEK virtual-root.yrc60j yum.log [root@m01 ~]# 命令說明: -m:調用ansible內置模塊 copy 拷貝模塊 -a:接命令。因爲調用了copy模塊,命令格式發生改變。src=本地文件路徑 dest=目的地所在路徑

示例4:調用copy模塊實現保存文件的屬性改變

[root@m01 ~]# ansible 172.16.1.8 -m copy -a "src=/etc/hosts dest=/tmp owner=chensiqi group=chensiqi mode=600" 172.16.1.8 | SUCCESS => { "changed": true, "checksum": "dba0126bf49ea8d4cdc476828f9edb37085c6afe", "dest": "/tmp/hosts", "gid": 502, "group": "chensiqi", "mode": "0600", "owner": "chensiqi", "path": "/tmp/hosts", "secontext": "unconfined_u:object_r:admin_home_t:s0", "size": 294, "state": "file", "uid": 502 } [root@m01 ~]# ssh root@172.16.1.8 "ls -l /tmp/hosts" `root@172.16.1.8's password: ` -rw-------. 1 chensiqi chensiqi 294 3月 14 14:00 /tmp/hosts 命令說明: 對於ansible內置模塊的使用,你們參考命令執行後的返回信息裏看就能夠了。寫的很清楚。

備註:
copy模塊,若是複製的對方主機路徑下沒有目錄,那麼會遞歸建立

特別提示:

ansible的部分模塊並不支持
1)管道符 「|」
2)重定向 「> < >> <<」
3)相似top,tail -f這種不能即刻返回明確信息的命令
4)*

 利用ansible遠程執行各種腳本

3.3.1 先將腳本分發到各個機器上去

[root@m01 ~]# echo "echo '測試成功!'" >> /server/scripts/test.sh

ansible chensiqi -m copy -a "src=/server/scripts/yum.sh dest=/server/scripts/ mode=0755 backup=yes"

注意:dest路徑的寫法,如果不存在的目錄,結尾要加斜線(/server/scripts/),不然默認不會建立目標目錄

3.3.2 遠程批量執行腳本

ansible chensiqi -m shell -a "/server/scripts/yum.sh"

示例:

[root@m01 ~]# ansible chensiqi -m command -a "sh /server/scripts/test.sh" 172.16.1.41 | SUCCESS | rc=0 >> 測試成功! 172.16.1.31 | SUCCESS | rc=0 >> 測試成功! 172.16.1.7 | SUCCESS | rc=0 >> 測試成功! 172.16.1.8 | SUCCESS | rc=0 >> 測試成功! 172.16.1.61 | SUCCESS | rc=0 >> 測試成功! 

 經常使用模塊:每一個模塊就是一個功能

模塊名 做用
command 執行命令模塊(重要)
copy 文件拷貝模塊(重要)
shell 執行shell腳本模塊(重要)
script 執行shell腳本模塊(重要)
file 設定文件屬性模塊
service 系統服務管理模塊
cron 計劃任務管理模塊
yum yum軟件包安裝管理模塊
synchronize 使用rsync同步文件模塊

 查看Ansible的幫助

ansible-doc -l 查看全部的模塊ansible-doc -s service 查看指定模塊用法

相關文章
相關標籤/搜索