Ansible 中文權威指南:http://www.ansible.com.cn/html
Ansible 官方文檔:http://docs.ansible.com/python
這裏不過多描述,ansible的工做原理、playbook。不少信息能夠從文檔中獲取。git
在一個公司項目中選用什麼樣的輔助工具,徹底看我的的喜愛和項目需求。我也但願,各位在選擇工具的時候;不要浪費太多時間。一個好的工具,不是最熱、最火、最主流纔是最好的;而是合適纔是最好的。shell
Puppet、SaltStack、Ansible簡單比較。ubuntu
Puppet:vim
優勢歷史悠久,比較成熟,功能強,可遠程可本地。批量執行功能沒有,配置比較複雜,並且有服務端、客戶端bash
SaltStack:服務器
和ansible都是python流的,並且就功能上來說,二者也極爲類似,不一樣之處是salt stack是有客戶端的,而且execution模塊還用0MQ實現了pub-sub,命令和執行結果所以能夠高效並行傳輸,運維
不過成也蕭何敗也蕭何,第一個sub階段(將querystring下發到全部機器,而後收集機器響應的階段)太依賴與客戶端返回了,若是客戶端未能及時返回或未響應的話,playbook執行階段可能會直接漏掉這部分機器而沒有任何提示,ssh
這對於運維來講是不可接受的
Ansible:
與前面的相比,沒有什麼特別明顯的特性。配置管理方面絕對比不上puppet。批量執行也沒有SaltStack高尚。可是ansible僅依賴ssh,與登陸受權管理系統自然集成,簡單即有效,沒有比這更美妙的事情了。
爲何我選擇用ansible,由於ansible,不須要客戶端、部署簡單、上手極其容易。全部我如今了ansible。就這麼簡單。
項目需求簡單介紹,爲了研發簡單本身上傳代碼到業務服務器。在本地創建了jenkins+ansible集成平臺,控制線上跳板機將代碼推送到業務服務器。
1、本地實例配置:
說明:
一、ubuntu14.04 X64
二、安裝省略
三、遠程使用playbook配置
四、這裏只用的哦hosts文件和playbook目錄
五、全部的登陸方式都是ssh+key,這裏省略
2、配置文件配置
一、hosts配置:
#主機和組的配置
#定義一個主機 指定ssh_ip ssh_port ssh_user 這裏爲了顧及所有使用內網ip
onlinemaster ansible_ssh_host=192.168.1.241 ansible_ssh_port=22 ansible_ssh_user=root
[online]
onlinemaster
二、playbook配置:
這裏涉及幾個操做:
A、將代碼更新到OnlineMaster本地、
B、生成當前時間到OnlineMaster ansible log
C、控制OnlineMaster ansible執行操做(將OnlineMaster上的代碼推進到業務服務器)結果輸出到 OnlineMaster ansible log
2016-05-30 17:06:53
D、取回OnlineMaster的 ansible log回Local 本地打印出來、
E、清空OnlineMaster的ansible log
註明:以上全部操做分爲兩個文件 【A】【B C D E】最終使用腳原本作構建:
#!/bin/bash
case "$1" in
online.yml)
cd /etc/ansible && ansible-playbook -i hosts playbooks/upCode/$1
;;
*)
echo $"Usage: $0 {online.yml}"
exit 3
;;
esac
case "$2" in
online_rsync.yml)
cd /etc/ansible && ansible-playbook -i hosts playbooks/rsync/$2
;;
*)
echo $"Usage: $0 {online_rsync.yml}"
exit 3
;;
esac
# 在Local本地打印出取回來的狀態opera.log文件
echo ""
echo "\033[41;37m################在本地打印出取回來的狀態opera.log文件,此文件是遠端ansible執行的結果##########################\033[0m"
cat playbooks/log/opera.log
echo "\033[41;37m#############################################################################################################\033[0m"
echo ""
# 清空Local本地的up.log文件
rm -rf playbooks/log/opera.log
exit 0
配置A:
目錄playbooks/upCode/
vim online.yml
#####################################
--- #YAML特有的開頭格式
- name: hosts or group #調用hosts中配置的host或者host_group
hosts: online
tasks: #定義一下任務下面的是包含一個文件進來,這個好處是方面管理、擴展
- include: tasks/updateCode.yml
vim tasks/updateCode.yml
#####################################
---
- name: 更新代碼到本地 #這裏用shell command均可以
shell: "cd /var/www/project && git pull >> /etc/ansible/playbooks/log/opera.log"
配置B C D E:
目錄playbooks/rsync/
vim online_rsync.yml
#############################################
---
- name: hosts or gropu
hosts: master
tasks:
- include: tasks/cDate.yml #建立時間
- include: tasks/rsync_test.yml #控制遠程的ansible推進代碼
- include: tasks/fetchRe.yml #獲取log文件回本地
- include: tasks/cleanLog.yml #清空遠程的log文件
#############################################
tasks下面的文件:
cDate.yml
*******************
--
- name: 當前時間
shell: date +"%Y-%m-%d %H:%M.%S" >> /etc/ansible/playbooks/log/opera.log
*******************
rsync_test.yml
*******************
---
- name: 控制遠端ansible執行操做
shell: "cd /etc/ansible && ansible-playbook -i hosts playbooks/gamec/rsync.yml >> /etc/ansible/playbooks/log/opera.log"
*******************
*******************
fetchRe.yml
*******************
---
- name: 獲取遠程節點生成的opera.log文件,回到本地
fetch: src=/etc/ansible/playbooks/log/opera.log dest=/etc/ansible/playbooks/log/ flat=yes fail_on_missing=yes
# src是遠端,dest是本地目錄
*******************
*******************
cleanLog.yml
*******************
---
- name: 清空遠端控制端opera.log文件
shell: echo "" > /etc/ansible/playbooks/log/opera.log
*******************
下回文檔: ansible簡單現網配置