簡介
ansible是一種自動化運維工具败砂,基于Python開發(fā),集合了眾多運維工具(puppet世落、cfengine淮腾、chef、func屉佳、fabric)的優(yōu)點谷朝,實現(xiàn)了批量系統(tǒng)配置、批量程序部署忘古、批量運行命令等功能徘禁。
安裝
本機環(huán)境:
macos high sierra 10.13
python 2.7.10
在macos下安裝ansible主要有三種方法,建議采用源碼安裝的方法安裝ansible髓堪。
1.brew安裝(需要安裝homebrew模塊)
brew install ansible
2.pip安裝
pip install ansible
3.源碼安裝
git clone https://github.com/ansible/ansible.git
cd ansible
sudo python setup.py install
安裝完成后 用 ansible --version
命令 檢查安裝是否成功
tips:mac下安裝后缺少 /etc/ansible 目錄,需要手動添加娘荡,并從源碼中將example目錄中的文件拷貝到創(chuàng)建的 /etc/ansible 目錄下干旁。
主機免秘鑰連接
生成本地ssh秘鑰
ssh-keygen
將本地秘鑰發(fā)給遠端服務器(例:用戶名為root ip地址為192.168.1.1)
ssh-copy-id root@192.168.1.1
出現(xiàn)Are you sure you want to continue connecting (yes/no)? 時,輸入yes,之后輸入目標服務器的密碼炮沐,大功告成争群。
再次測試連接遠端服務器,不需要密碼連接上就表明成功
ansible的簡單使用
當我們需要使用ansible直接向遠端服務器發(fā)送指令時大年,一般需要以下步驟:
配置hosts文件换薄,默認的hosts文件在 /etc/ansible 目錄下
vim /etc/ansible/hosts
hosts文件基本格式(將需要控制的遠端服務器ip地址寫入,后面也可寫入參數)
[hostname] #可以隨意命名
192.168.1.2
192.168.1.3
[hostname1]#可以有多個分組
192.168.1.4
192.168.1.5
測試能否ping通
ansible all -m ping
192.168.1.2 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
ansible命令參數及說明
ansible遠程批量命令
遠程執(zhí)行命令的模塊有command、shell翔试、scripts轻要、以及raw模塊;
command模塊
command模塊為ansible默認模塊垦缅,不指定-m參數時冲泥,使用的就是command模塊;comand模塊比較簡單,常見的命令都可以使用凡恍,但其命令的執(zhí)行不是通過shell執(zhí)行的志秃,所以,像這些 "<", ">", "|", and "&"操作都不可以嚼酝,當然浮还,也就不支持管道;示例:顯示遠程路徑:
ansible hostname -a 'pwd'
192.168.1.2 | success | rc=0 >>
/home/root
192.168.1.3 | success | rc=0 >>
/home/root
10.6.143.37 | success | rc=0 >>
/home/root
缺點:不支持管道闽巩,就沒法批量執(zhí)行命令碑定;
shell模塊
使用shell模塊,在遠程命令通過/bin/sh來執(zhí)行又官;所以延刘,我們在終端輸入的各種命令方式,都可以使用六敬; 但是我們自己定義在.bashrc/.bash_profile中的環(huán)境變量shell模塊由于沒有加載碘赖,所以無法識別;如果需要使用自定義的環(huán)境變量外构,就需要在最開始普泡,執(zhí)行加載自定義腳本的語句;
對shell模塊的使用可以分成兩塊:1) 如果待執(zhí)行的語句少审编,可以直接寫在一句話中:
ansible hostname -a ". .bash_profile;ps -fe |grep sa_q" -m shell
- 如果在遠程待執(zhí)行的語句比較多撼班,可寫成一個腳本,通過copy模塊傳到遠端垒酬,然后再執(zhí)行砰嘁;但這樣就又涉及到兩次ansible調用;對于這種需求勘究,ansible已經為我們考慮到了矮湘,script模塊就是干這事的;
script模塊
使用scripts模塊可以在本地寫一個腳本口糕,在遠程服務器上執(zhí)行(遠程服務器不需要python環(huán)境):
ansible hostname -m script -a "/home/test/test.sh"
ansible playbook
playbook就是把上述在命令行的操作缅阳,以yml格式寫在文件中來執(zhí)行而已。復雜的playbook只是更多的命令行操作的集合景描。
例:將本機的某個文件拷貝到遠端服務器
vim copytest.yml #創(chuàng)建yml執(zhí)行文件
---
- hosts: hostname # hosts中指定
remote_user: root # 如果和當前用戶一樣十办,則無需指定
tasks:
- name: copyfile #建議每個任務指定一個name,方便出錯時檢查
copy: src=/root/test.txt dest=root/test.txt # 本地拷貝到遠端
注解:
tasks定義了playbook中要執(zhí)行的任務超棺,包括任務名name以及具體的任務內容向族,tasks只有一個,而任務可以有多個.
---
- hosts: hostname
remote_user: root
tasks:
- name: copyfile
copy: src=~ dest=~
- name: testshell
shell: 'touch test.txt'
- name: testshell2
shell: 'touch test2.txt' #遵循這樣的格式
playbook執(zhí)行方法:
sudo ansible-playbook copytest.yml #主機名说搅、執(zhí)行命令都已在yml中指定了炸枣。
小測試
目標:通過連接git倉庫的方法,遠端服務器將本機的bash配置文件分發(fā)給其他指定的服務器,并執(zhí)行生效适肠。
1.創(chuàng)建yml文件編寫task霍衫,并上傳到git倉庫
- hosts: host
remote_user: root
tasks:
- name: copyprofile
copy: src=/root/.bash_profile dest=/root/.bash_profile owner=root mode=0600
- name: runprofile
shell: source /root/.bash_profile
2.編寫shell腳本,交給遠端服務器執(zhí)行
# !bin/bash
mypath="User/root/itservercontrol"
if [ ! -d "$mypath"]; then
git clone git@example.git #填寫git倉庫地址
sudo ansible-playbook Change_Profile.yml
else
cd itservercontrol
git pull
sudo ansible-playbook Change_Profile.yml
fi
3.向遠端服務器發(fā)送本地編寫的腳本侯养,并執(zhí)行
ansible hostname -m script -a "/root/itservertest.sh"
運行成功敦跌!
本筆記僅供參考,水平較低逛揩,還望包涵柠傍。