批量執行命令:fabric

Fabric 能夠經過 SSH 在多臺客戶端主機上批量執行任務,是基於 paramiko 封裝開發的,paramiko 更底層一些,安裝方法以下:python

[root@localhost ~]$ yum install -y gcc python-pip python-devel     # 安裝基礎軟件包
[root@localhost ~]$ pip install pycrypto==2.3       # 安裝 paramiko 的依賴包,paramiko 使用 ssh 登陸須要用到 pycrypto 來提供加密算法,保證 ssh 安全性
[root@localhost ~]$ pip install paramiko==1.12.4    # 安裝 Fabric 的依賴包,Fabric 是基於 paramiko 封裝的
[root@localhost ~]$ pip install fabric==1.8.3       # 最後安裝 Fabric,安裝以後會提供 fab 命令,也會提供不少 Fabric 的 API


Fabric 簡單用法:算法

[root@localhost ~]$ cat fabfile.py     # 須要定義一個fabfile.py文件,文件名是固定的

from fabric.api import run # 使用Fabric提供的API,run用來遠程執行命令 def getHostname(): # 定義一個函數,用來獲取主機名 run('hostname')
[root@localhost ~]$ fab -H 192.168.216.130 getHostname    # 經過 fab 命令來調用 fabfile.py 文件
[192.168.216.130] Executing task 'getHostname'            # -H 192.168.216.130 用於指定對哪一個遠程主機進行操做
[192.168.216.130] run: hostname                           # getHostname 表示執行 fabfile.py 文件裏的哪一個函數
[192.168.216.130] out: localhost.localdomain              # 注意:使用 Fabric 的前提是保證 ssh 能夠經過密鑰登陸
[192.168.216.130] out: Done.
Disconnecting from 192.168.216.130... done.


Fabric 使用環境變量:api

[root@localhost ~]$ cat fabfile.py    # 能夠在 fabfile.py 裏經過 env 自定義環境變量
                                      # 這些環境變量的變量名是固定的,使用 fab 命令去執行的時候會自動讀取這些環境變量
from fabric.api import run, env       

env.hosts = ['192.168.216.130', '192.168.216.131']    # 定義要操做的遠程主機  
env.user = 'root'                                     # 定義使用哪一個用戶登陸遠程主機

def getHostname():
    run('hostname')
[root@localhost ~]$ fab getHostname
[192.168.216.130] Executing task 'getHostname'
[192.168.216.130] run: hostname
[192.168.216.130] out: localhost.localdomain
[192.168.216.130] out: 

[192.168.216.131] Executing task 'getHostname'
[192.168.216.131] run: hostname
[192.168.216.131] out: localhost.localdomain
[192.168.216.131] out: 

Done.
Disconnecting from 192.168.216.131... done.
Disconnecting from 192.168.216.130... done.


Fabric 經常使用環境變量:安全

env.hosts            # 定義目標主機
env.exclude_hosts    # 排除指定主機
env.user             # 定義用戶名
env.port             # 定義端口,默認爲 22
env.password         # 定義密碼
env.roledefs         # 定義角色


Fabric 經常使用 API:dom

run      # 遠程執行命令,如 run('hostname')
env      # 用於定義內置屬性,如 env.hosts = ['ip1', 'ip2', 'ip3', ...]
put      # 上傳本地文件到遠程主機,如 put('/etc/passwd', '/tmp/passwd')
get      # 從遠程主機下載文件到本地,如 get('/etc/passwd', '/tmp/passwd')
prompt   # 得到用戶輸入信息,如 prompt('please input user password: ')
confirm  # 得到提示信息確認,如 confirm('Test failed, Continue[Y/N]: ')


fab 命令:ssh

-H    # 指定對哪臺遠程主機進行操做,若是有多臺用逗號隔開
-R    # 指定對哪一種角色的主機進行操做,角色須要在fabfile.py文件中自定義
-f    # 指定fab入口文件,默認入口文件名爲fabfile.py
-t    # 指定鏈接到遠程主機的超時時間
-T    # 指定鏈接到遠程主機後命令執行的超時時間

 
擴展:Fabric 打印顏色函數

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from fabric.colors import *

print red('Hello World')
print blue('Hello World')
print cyan('Hello World')
print white('Hello World')
print green('Hello World')
print yellow('Hello World')
print magenta('Hello World')
print magenta('Hello World', bold=True)

相關文章
相關標籤/搜索