python三大神器之fabric(2.0新特性)
阿新 • • 發佈:2018-12-04
fabric經常出現在自動化運維領域,批量處理一些運維工作。fabric是在paramiko之上又封裝了一層,操作起來更加簡單易用。
本來只是想寫個部落格記錄一下,然後發現之前寫的程式碼不能運行了,報以下錯誤:No module named 'fabric.api'
Traceback (most recent call last): File "D:/PycharmProjects/TestTool/Publish/fabric_sample.py", line 3, in <module> from fabric.api import * ModuleNotFoundError: No module named'fabric.api'
然後百度了下,說是2.0以上的fabric版本已經移除了fabric.api,解決方法是指定安裝2.0以下的版本,比如pip install fabric==1.14.0 ~_~ ,但都並沒有介紹新的特性。然後去官網看了下文件,使用方法如下:
1.連線伺服器
通過fabric.Connection方法連線伺服器:
conn = fabric.Connection(host , user = 'root',port = 22, config = None, geteway = None, connect_kwargs={"password": "123456"})
Connection引數的含義:
def __init__( self, host, #主機ip user=None, #使用者名稱 port=None, #ssh埠,預設是22 config=None, #登入配置檔案 gateway=None, #連線閘道器 forward_agent=None, #是否開啟agent forwardingconnect_timeout=None, #設定超時 connect_kwargs=None, #設定 密碼登入connect_kwargs={"password": "123456"}) 還是 金鑰登入connect_kwargs={"key_filename": "/home/myuser/.ssh/private.key"} inline_ssh_env=None, )
2.通過fabric安裝軟體
下面通過一段程式碼實現在Ubuntu上批量安裝docker,順序取走列表中的ip。
import fabric def docker_install(): for host in ['10.1.4.24', '10.1.15.154', '10.1.14.106']: conn = fabric.Connection(host , user = 'root', connect_kwargs={"password": "123456"}) print("%s:" % host) conn.run("echo Y|apt-get remove docker.io") docker_install()
是不是很簡單,幾行程式碼就解決了~
其他方法使用:
run: #執行遠端命令,如:run('uname -a');
local: #執行本地命令,如:local('uname -a');
lcd: #切換本地目錄,如:lcd('/root');
cd: #切換遠端目錄,如:cd('/root'); with conn.cd('/root'):繼承這個狀態
put: #上傳本地檔案到遠端主機,如:put('/root/test.py','/root/test.py');
sudo: #sudo方式執行遠端命令,如:sudo('service docker start');
reboot: #重啟遠端主機,如:reboot();
prompt: #獲得使用者輸入資訊,如:prompt('please input user password:');
confirm: #獲得提示資訊確認,如:confirm("Continue[Y/N]?");