macos環(huán)境下ansible學(xué)習(xí)筆記

簡(jiǎn)介

ansible是一種自動(dòng)化運(yùn)維工具,基于Python開(kāi)發(fā),集合了眾多運(yùn)維工具(puppet、cfengine、chef、func、fabric)的優(yōu)點(diǎn),實(shí)現(xiàn)了批量系統(tǒng)配置、批量程序部署、批量運(yùn)行命令等功能。


安裝

本機(jī)環(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 目錄,需要手動(dòng)添加,并從源碼中將example目錄中的文件拷貝到創(chuàng)建的 /etc/ansible 目錄下。


主機(jī)免秘鑰連接

生成本地ssh秘鑰

ssh-keygen

將本地秘鑰發(fā)給遠(yuǎn)端服務(wù)器(例:用戶名為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)? 時(shí),輸入yes,之后輸入目標(biāo)服務(wù)器的密碼,大功告成。

再次測(cè)試連接遠(yuǎn)端服務(wù)器,不需要密碼連接上就表明成功


ansible的簡(jiǎn)單使用

當(dāng)我們需要使用ansible直接向遠(yuǎn)端服務(wù)器發(fā)送指令時(shí),一般需要以下步驟:

配置hosts文件,默認(rèn)的hosts文件在 /etc/ansible 目錄下

vim /etc/ansible/hosts

hosts文件基本格式(將需要控制的遠(yuǎn)端服務(wù)器ip地址寫入,后面也可寫入?yún)?shù))

[hostname] #可以隨意命名
192.168.1.2
192.168.1.3
[hostname1]#可以有多個(gè)分組
192.168.1.4
192.168.1.5

測(cè)試能否ping通

ansible all -m ping 
192.168.1.2 | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "ping": "pong"
}
ansible命令參數(shù)及說(shuō)明
ansible遠(yuǎn)程批量命令

遠(yuǎn)程執(zhí)行命令的模塊有command、shell、scripts、以及raw模塊;

command模塊

command模塊為ansible默認(rèn)模塊,不指定-m參數(shù)時(shí),使用的就是command模塊;comand模塊比較簡(jiǎn)單,常見(jiàn)的命令都可以使用,但其命令的執(zhí)行不是通過(guò)shell執(zhí)行的,所以,像這些 "<", ">", "|", and "&"操作都不可以,當(dāng)然,也就不支持管道;示例:顯示遠(yuǎn)程路徑:

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

缺點(diǎn):不支持管道,就沒(méi)法批量執(zhí)行命令;

shell模塊

使用shell模塊,在遠(yuǎn)程命令通過(guò)/bin/sh來(lái)執(zhí)行;所以,我們?cè)诮K端輸入的各種命令方式,都可以使用; 但是我們自己定義在.bashrc/.bash_profile中的環(huán)境變量shell模塊由于沒(méi)有加載,所以無(wú)法識(shí)別;如果需要使用自定義的環(huán)境變量,就需要在最開(kāi)始,執(zhí)行加載自定義腳本的語(yǔ)句;
對(duì)shell模塊的使用可以分成兩塊:1) 如果待執(zhí)行的語(yǔ)句少,可以直接寫在一句話中:

ansible hostname  -a ". .bash_profile;ps -fe |grep sa_q" -m shell
  1. 如果在遠(yuǎn)程待執(zhí)行的語(yǔ)句比較多,可寫成一個(gè)腳本,通過(guò)copy模塊傳到遠(yuǎn)端,然后再執(zhí)行;但這樣就又涉及到兩次ansible調(diào)用;對(duì)于這種需求,ansible已經(jīng)為我們考慮到了,script模塊就是干這事的;
script模塊

使用scripts模塊可以在本地寫一個(gè)腳本,在遠(yuǎn)程服務(wù)器上執(zhí)行(遠(yuǎn)程服務(wù)器不需要python環(huán)境):

ansible hostname -m script -a "/home/test/test.sh"

ansible playbook

playbook就是把上述在命令行的操作,以yml格式寫在文件中來(lái)執(zhí)行而已。復(fù)雜的playbook只是更多的命令行操作的集合。

例:將本機(jī)的某個(gè)文件拷貝到遠(yuǎn)端服務(wù)器

 vim copytest.yml   #創(chuàng)建yml執(zhí)行文件
---
- hosts: hostname  # hosts中指定
  remote_user: root  # 如果和當(dāng)前用戶一樣,則無(wú)需指定
  tasks:
      - name: copyfile   #建議每個(gè)任務(wù)指定一個(gè)name,方便出錯(cuò)時(shí)檢查
        copy: src=/root/test.txt dest=root/test.txt  #  本地拷貝到遠(yuǎn)端

注解:
tasks定義了playbook中要執(zhí)行的任務(wù),包括任務(wù)名name以及具體的任務(wù)內(nèi)容,tasks只有一個(gè),而任務(wù)可以有多個(gè).

---
- 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    #主機(jī)名、執(zhí)行命令都已在yml中指定了。

小測(cè)試

目標(biāo):通過(guò)連接git倉(cāng)庫(kù)的方法,遠(yuǎn)端服務(wù)器將本機(jī)的bash配置文件分發(fā)給其他指定的服務(wù)器,并執(zhí)行生效。

1.創(chuàng)建yml文件編寫task,并上傳到git倉(cāng)庫(kù)

- 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腳本,交給遠(yuǎn)端服務(wù)器執(zhí)行

# !bin/bash
mypath="User/root/itservercontrol"
if [ ! -d "$mypath"]; then
  git clone git@example.git #填寫git倉(cāng)庫(kù)地址
    sudo ansible-playbook Change_Profile.yml
else
    cd itservercontrol
    git pull
    sudo ansible-playbook Change_Profile.yml
fi

3.向遠(yuǎn)端服務(wù)器發(fā)送本地編寫的腳本,并執(zhí)行

ansible hostname -m script -a "/root/itservertest.sh"

運(yùn)行成功!


本筆記僅供參考,水平較低,還望包涵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • ansible介紹ansible常用模塊使用playbooktemplates,模板條件測(cè)試和循環(huán)迭代roles,...
    哈嘍別樣閱讀 1,422評(píng)論 0 3
  • 本文主要內(nèi)容均收集于網(wǎng)絡(luò)上的博文資料,僅以此文作為學(xué)習(xí)總結(jié)。BTW,目前Ansible對(duì)python3的支持還不是...
    qiuyi943閱讀 18,330評(píng)論 1 15
  • 在項(xiàng)目中有很多地方用到ansible。最初使用ansible只是為了方便代碼部署和模板配置,畢竟手動(dòng)去30+臺(tái)機(jī)器...
    __七把刀__閱讀 10,787評(píng)論 6 79
  • ansible-playbook playbook簡(jiǎn)介 playbook是ansible用于配置,部署,和管理被控...
    bdslinux閱讀 10,987評(píng)論 1 12
  • 第二章 走上生存模擬課去,小牛拍著夏明的腦袋喊到。 嗯,這就來(lái)。夏明立刻清醒了起來(lái)。生存模擬也就是以前的體育課。為...
    夏日明媚閱讀 294評(píng)論 0 0