24.15 ansible介紹html
24.16 ansible安裝python
24.17 ansible遠程執行命令linux
24.18 ansible拷貝文件或目錄git
24.19 ansible遠程執行腳本github
24.20 ansible管理任務計劃web
24.15 ansible介紹shell
不須要安裝客戶端,經過sshd去通訊vim
基於模塊工做,模塊能夠由任何語言開發centos
不只支持命令行使用模塊,也支持編寫yaml格式的playbook,易於編寫和閱讀瀏覽器
安裝十分簡單,centos上可直接yum安裝
playbook相似於saltstack的top.sls,top.sls又指向了一些子配置文件
有提供UI(瀏覽器圖形化)www.ansible.com/tower,收費的
官方文檔 http://docs.ansible.com/ansible/latest/index.html
ansible已經被redhat公司收購,它在github上是一個很是受歡迎的開源軟件,github地址https://github.com/ansible/ansible
一本不錯的入門電子書 https://ansible-book.gitbooks.io/ansible-first-book/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24.16 ansible安裝
1.準備兩臺機器,前面咱們作實驗的兩臺機器aming-01,aming-02
2.只須要在aming-01上安裝ansible
yum list |grep ansible 能夠看到自帶源裏就有2.4版本的ansible
yum install -y ansible
3.aming-01上生成密鑰對 ssh-keygen -t rsa(表示-t生成類型爲rsa)
4.把公鑰放到aming-02上,設置密鑰認證
5.vi /etc/ansible/hosts //增長(配置主機組)。管理機器的時候能夠把他們分紅多個組,好比web組、db組,每個組裏面都要若干個機器。後期能夠針對主機組去作操做
[testhost]
127.0.0.1
192.168.208.130
說明: testhost爲主機組名字,自定義的。 下面兩個ip爲組內的機器ip。
實例: [root@axinlinux-01 ~]# yum list |grep ansible ansible.noarch 2.7.4-1.el7 epel ansible-doc.noarch 2.7.4-1.el7 epel #文檔 [root@axinlinux-01 ~]# yum install -y ansible ansible-doc #兩個都安裝上 [root@axinlinux-01 ~]# ls /root/.ssh/ #由於以前有作過,有這兩個文件。若是沒有就ssh-keygen來生成 authorized_keys id_rsa id_rsa.pub known_hosts [root@axinlinux-01 ~]# cat /root/.ssh/id_rsa.pub #複製01機器的公鑰 [root@axinlinux-02 ~]# vim /root/.ssh/authorized_keys #將複製的公鑰放到這裏 [root@axinlinux-01 ~]# vim /root/.ssh/authorized_keys #本機上也要公鑰 [root@axinlinux-01 ~]# ssh axinlinux-02 #登陸是否成功 [root@axinlinux-01 ~]# vim /etc/ansible/hosts #配置主機組 [testhost] 127.0.0.1 axinlinux-02 #此處也能夠是ip,主機名的話要設置一下/etc/hosts
24.17 ansible遠程執行命令
1.ansible testhost -m command -a 'w'
#testhost爲主機組裏的機器
-m指的是模塊
-a指的是什麼命令
2.這樣就能夠批量執行命令了。這裏的testhost 爲主機組名,-m後邊是模塊名字,-a後面是命令。固然咱們也能夠直接寫一個ip,針對某一臺機器來執行命令。
ansible 127.0.0.1 -m command -a 'hostname'
錯誤: "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
解決: yum install -y libselinux-python
3.還有一個模塊就是shell一樣也能夠實現 (好比遠程執行一個shel腳本,也支持想要一個命令)
ansible testhost -m shell -a 'w'
實例: [root@axinlinux-01 ~]# ansible testhost -m command -a 'w' [root@axinlinux-01 ~]# ansible testhost -m command -a 'hostname' axinlinux-02 | CHANGED | rc=0 >> axinlinux-02 axinlinux-01 | CHANGED | rc=0 >> axinlinux-01 [root@axinlinux-01 ~]# ansible axinlinux-02 -m command -a 'hostname' #也能夠僅看一臺機器 axinlinux-02 | CHANGED | rc=0 >> axinlinux-02 [root@axinlinux-01 ~]# ansible testhost -m shell -a 'hostname' #shell模塊也能夠寫一個命令 axinlinux-02 | CHANGED | rc=0 >> axinlinux-02 axinlinux-01 | CHANGED | rc=0 >> axinlinux-01
24.18 ansible拷貝文件或目錄
1.ansible aming-02 -m copy -a "src=/etc/ansible dest=/tmp/ansibletest owner=root group=root mode=0755" (拷貝目錄)
#copy是拷貝模塊,能夠拷貝文件、目錄
src指定來源的文件或目錄是誰
dest目標,來源是文件,那目標也要是文件
owner指定屬主
mode權限,也能夠寫755
注意:源目錄會放到目標目錄下面去,若是目標指定的目錄不存在,它會自動建立。若是拷貝的是文件,dest指定的名字和源若是不一樣,而且它不是已經存在的目錄,至關於拷貝過去後又重命名。但相反,若是desc是目標機器上已經存在的目錄,則會直接把文件拷貝到該目錄下面。
2.ansible testhost -m copy -a "src=/etc/passwd dest=/tmp/123" (拷貝文件)
這裏的/tmp/123和源機器上的/etc/passwd是一致的,但若是目標機器上已經有/tmp/123目錄,則會再/tmp/123目錄下面創建passwd文件
實例: [root@axinlinux-01 ~]# ansible axinlinux-02 -m copy -a "src=/etc/ansible dest=/tmp/ansibletest owner=root group=root mode=755" axinlinux-02 | CHANGED => { "changed": true, "dest": "/tmp/ansibletest/", "src": "/etc/ansible" } [root@axinlinux-02 ~]# ls /tmp/ansibletest/ansible/ #看一下02機器是否有。被建立了目標目錄 ansible.cfg hosts roles/ [root@axinlinux-02 ~]# ls -ld /tmp/ansibletest/ drwxr-xr-x 3 root root 21 12月 9 22:32 /tmp/ansibletest/ [root@axinlinux-02 ~]# date 2018年 12月 09日 星期日 22:34:07 CST [root@axinlinux-01 ~]# ansible axinlinux-02 -m copy -a "src=/etc/passwd dest=/tmp owner=root group=root mode=755" axinlinux-02 | CHANGED => { "changed": true, "checksum": "eea17158509c38ed0c80faae566407c920c47c31", "dest": "/tmp/passwd", "gid": 0, "group": "root", "md5sum": "4a6c40d0208f75636981b494f55109ea", "mode": "0755", "owner": "root", "size": 2374, "src": "/root/.ansible/tmp/ansible-tmp-1544366308.12-248977953608911/source", "state": "file", "uid": 0 } [root@axinlinux-02 ~]# ls -ld /tmp/passwd -rwxr-xr-x 1 root root 2374 12月 9 22:38 /tmp/passwd [root@axinlinux-02 ~]# date 2018年 12月 09日 星期日 22:40:06 CST [root@axinlinux-01 ~]# ansible axinlinux-02 -m copy -a "src=/etc/passwd dest=/tmp/1.txt owner=root group=root mode=755" #更名字的話,直接指定目標文件的名字便可。跟cp命令差很少 [root@axinlinux-02 ~]# ls -ld /tmp/1.txt -rwxr-xr-x 1 root root 2374 12月 9 22:42 /tmp/1.txt
24.19 ansible遠程執行腳本
1.首先建立一個shell腳本
vim /tmp/test.sh //加入內容
#!/bin/bash
echo `date` > /tmp/ansible_test.txt #將系統時間輸出到這個文件裏
2.而後把該腳本分發到各個機器上(ansible須要將腳本放在相應的機器上才能夠執行)
ansible testhost -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"
#腳本的權限要是755才能夠執行
3.最後是批量執行該shell腳本
ansible testhost -m shell -a "/tmp/test.sh"
shell模塊,還支持遠程執行命令而且帶管道 #command不支持
ansible testhost -m shell -a "cat /etc/passwd|wc -l "
實例: [root@axinlinux-01 ~]# vim /tmp/test.sh #!/bin/bash echo `date` > /tmp/ansible_test.txt [root@axinlinux-01 ~]# ansible testhost -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755" #將腳本分發到各個機器上去 [root@axinlinux-01 ~]# ansible testhost -m shell -a "/tmp/test.sh" #執行各個機器上的test.sh腳本 axinlinux-02 | CHANGED | rc=0 >> axinlinux-01 | CHANGED | rc=0 >> [root@axinlinux-01 ~]# ls /tmp/ansible_test.txt #檢查是否建立了腳本里的文件 /tmp/ansible_test.txt [root@axinlinux-01 ~]# cat !$ #內容 cat /tmp/ansible_test.txt 2018年 12月 09日 星期日 22:53:17 CST [root@axinlinux-01 ~]# ansible testhost -m command -a "cat /etc/passwd|wc -l" #command不支持管道 axinlinux-02 | FAILED | rc=1 >> cat:無效選項 -- l Try 'cat --help' for more information.non-zero return code axinlinux-01 | FAILED | rc=1 >> cat:無效選項 -- l Try 'cat --help' for more information.non-zero return code [root@axinlinux-01 ~]# ansible testhost -m shell -a "cat /etc/passwd|wc -l" #shell支持管道 axinlinux-02 | CHANGED | rc=0 >> 31 axinlinux-01 | CHANGED | rc=0 >> 46
24.20 ansible管理任務計劃
1.ansible testhost -m cron -a "name='test cron' job='/bin/touch /tmp/1212.txt' weekday=6"
#-m cron 用到了cron模塊
name指定任務計劃的名字
job指定命令是什麼
weekday=6就是星期六,也就是這裏指定分時日月周,不指定的話就是星
2.若要刪除該cron 只須要加一個字段 state=absent
ansible testhost -m cron -a "name='test cron' state=absent"
3.其餘的時間表示:分鐘 minute 小時 hour 日期 day 月份 month
4.不要手動的crontab -e去更改裏面的東西,一旦更改了,就無法利用ansible去管理使用了。
實例: [root@axinlinux-01 ~]# ansible axinlinux-02 -m cron -a"name='test cron' job='/bin/touch /tmp/1212.txt' weekday=6" axinlinux-02 | CHANGED => { "changed": true, "envs": [], "jobs": [ "test cron" ] } [root@axinlinux-02 ~]# crontab -l # Lines below here are managed by Salt, do not edit #Ansible: test cron #這就是咱們定義的名字 * * * * 6 /bin/touch /tmp/1212.txt [root@axinlinux-01 ~]# ansible axinlinux-02 -m cron -a"name='test cron' state=absent" #刪除這個任務計劃 axinlinux-02 | CHANGED => { "changed": true, "envs": [], "jobs": [] } [root@axinlinux-02 ~]# crontab -l # Lines below here are managed by Salt, do not edit [root@axinlinux-01 ~]# ansible axinlinux-02 -m cron -a"name='test cron' job='/bin/touch /tmp/1212.txt' minute=20 hour=10 weekday=6" axinlinux-02 | CHANGED => { "changed": true, "envs": [], "jobs": [ "test cron" ] } [root@axinlinux-02 ~]# crontab -l # Lines below here are managed by Salt, do not edit #Ansible: test cron 20 10 * * 6 /bin/touch /tmp/1212.txt