24.15 ansible介紹

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
相關文章
相關標籤/搜索