Python利用ansible分發處理任務

來源:互聯網
上載者:User
其實對python熟悉的人都可以自己用paramiko來寫任務的分發系統,再結合gevent的協程就能實現非同步處理。

如果只想用工具的朋友可以使用一些工具,類似{puppet,saltstack,fabric,ansible,chef}等,其實這些工具的都是很好用的,不過於學習的成本,我建議大家使用ansible,這個模組封裝的不錯,功能也很齊全。

我們首先先安裝ansible把

代碼如下:

pip install ansible #其實我建議大家用ubuntu的系統,ubuntu的系統對開源的東西都支援的很好,而且apt的功能要比yum強不少。

代碼如下:

mkdir -p /etc/ansible/ #給ansible建立一個設定檔的目錄

more hosts [Web]192.168.6.210:22 ansible_ssh_user=root ansible_ssh_pass=123 [Dubbo+Zookeeper]192.168.6.212:22 ansible_ssh_user=root ansible_ssh_pass=123[Mysql]192.168.6.213:22 ansible_ssh_user=root ansible_ssh_pass=123

如果你的機器沒有做無密碼訪問,那麼就在後面加上密碼吧,如果你的SSH連接埠做過改動,那麼請在IP後面加上連接埠號碼。如果有報錯的話,你先安裝一下apt-get install sshpass

做完上面這些準備工作,我們的ansible就可以運行了

ansible Boss+Merchant+Web -m shell -a "hostname;ip a"                這裡的Boss+Merchant+Web是我在hosts檔案中定義的主機群組  -m後面是接的模組 -a 就、後面是索要執行的命令192.168.6.210 | success | rc=0 >>Pay-Boss+Merchant+Web1: lo:  mtu 16436 qdisc noqueue   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  inet 127.0.0.1/8 scope host lo2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000  link/ether 00:0c:29:96:06:4e brd ff:ff:ff:ff:ff:ff  inet 192.168.6.210/24 brd 192.168.6.255 scope global eth0

模組的資訊可以從官網的教程下仔細查看,反正我一般都用shell。。。

現在來玩玩playbook,其實就是把命令儲存到檔案中,再執行,也就是一回事,不必非要用這個東西,我們自己也能寫代碼來封裝這些命令

mkdir -p /etc/ansible/playbookstouch boss.ymlmore boss.yml- hosts : Boss+Merchant+Web        hosts 檔案中的主機群組 remote_user : root tasks :    - name : update_boss       任務代號     shell : source /etc/profile;whoami;uptime;cat /etc/issue        模組+命令#     shell : echo "xxxxxxxxxxxxxxxxx"

執行

ansible-playbook boss.yml __________________________< PLAY [Boss+Merchant+Web] > --------------------------    \  ^__^     \ (oo)\_______      (__)\    )\/\        ||----w |        ||   || _________________< GATHERING FACTS > -----------------    \  ^__^     \ (oo)\_______      (__)\    )\/\        ||----w |        ||   ||ok: [192.168.6.210] ___________________< TASK: update_boss > -------------------    \  ^__^     \ (oo)\_______      (__)\    )\/\        ||----w |        ||   ||changed: [192.168.6.210] ____________< PLAY RECAP > ------------    \  ^__^     \ (oo)\_______      (__)\    )\/\        ||----w |        ||   ||192.168.6.210       : ok=2  changed=1  unreachable=0  failed=0

這個是結果,不過這個 cowsay是怎麼列印出來的,我了個去,這是什麼情況?

利用-vvvv來查看具體的執行情況

ansible Boss+Merchant+Web -m shell -a "hostname;ip a" -vvvv<192.168.6.210> ESTABLISH CONNECTION FOR USER: root<192.168.6.210> REMOTE_MODULE command hostname;ip a #USE_SHELL<192.168.6.210> EXEC sshpass -d6 ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o GSSAPIAuthentication=no -o PubkeyAuthentication=no -o ConnectTimeout=10 192.168.6.210 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440 && echo $HOME/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440'<192.168.6.210> PUT /tmp/tmpRfkD3R TO /root/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440/command<192.168.6.210> EXEC sshpass -d6 ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o GSSAPIAuthentication=no -o PubkeyAuthentication=no -o ConnectTimeout=10 192.168.6.210 /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440/command; rm -rf /root/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440/ >/dev/null 2>&1'192.168.6.210 | success | rc=0 >>Pay-Boss+Merchant+Web1: lo:  mtu 16436 qdisc noqueue   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  inet 127.0.0.1/8 scope host lo2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000  link/ether 00:0c:29:96:06:4e brd ff:ff:ff:ff:ff:ff  inet 192.168.6.210/24 brd 192.168.6.255 scope global eth0

類似於debug。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.