fabric2 是乙個python(2.7,3.4+)的庫,用來通過ssh遠端執行shell命令,並返回有用的python物件。
它建立在 invoke 和 paramiko 庫之上,同時擴充套件了他們的api以提供更多的功能。
1.安裝
pip uninstall fabric
pip uninstall fabric3
pip install fabric2
2.connection類
實現對單個主機的ssh連線,返回乙個該主機的連線物件。通過該物件,對主機進行操作和管理。
類的屬性:
host:主機名或ip位址,可用格式:user@host, host:port, user@host:port
user:登入使用者名稱
port:(
int)登入埠
config:登入配置檔案
gateway:連線的閘道器或**
forword_agent:
(bool
)是否開啟agent_forwording
connect_timeout:
(int
)連線超時時間
connect_kwargs:(
dict
)提交連線引數的字典,多用於密碼,金鑰等。
inline_ssh_env:
(bool
)略
類的方法:
run:執行命令,返回結果的屬性有 stdout,exited,ok,command,connection 等
put:上傳檔案,put(src_path, remote= dst_path)
sudo:sudo遠端執行命令
sftp:返回乙個sftp物件
local:在本地執行shell命令
open
open_gateway
close
create_session
forward_local
forward_remote
例子
from fabric import connection
ssh_conn = connection(host=
'***.***.***.***'
, user=
'root'
, connect_kwargs=
)
3.group類
連線多個伺服器,組成乙個group,乙個group同時執行run命令時,會返回乙個 groupresult-dict,包含了每個伺服器的執行結果。
例子:
from fabric import serialgroup as group
hosts =
("[email protected]:22"
,"[email protected]:22"
)pool = group(
*hosts,connect_kwargs=
)results = pool.run(
'uname -s'
)for connection, result in results.items():
print
(": "
.format
(connection, result)
)
4.自動響應程式的輸出
比如執行sudo命令時,會要求輸入**,此時如果手動輸入則顯得很笨拙,fabric提供了自動響應輸入請求的功能:
from invoke import responder
from fabric import connection
c = connection(
'host'
)passwd = "1234
sudopass = responder(
pattern=r'\[sudo\] password:'
, response=
'\n'
,format
(passwd = passwd),)
c.run(
'sudo whoami'
, pty=
true
, watchers=
[sudopass]
)
5.將功能封裝成函式
def
upload_and_unpack
(ssh_conn )
: c.put(
'myfiles.tgz'
,'/opt/mydata'
) c.run(
'tar -c /opt/mydata -xzvf /opt/mydata/myfiles.tgz'
)
部署python自動化指令碼 搭建自動化指令碼執行環境
年前把平台的指令碼寫好了,準備在虛擬機器中全部執行一遍。沒想到在虛擬機器中配置了很長時間,才把環境搭好。為了不再犯這配置環境的苦,在這簡單說說環境的搭建吧。因為寫的指令碼是在win7上實現的,所以虛擬機器我安裝的也是win7系統。1 安裝python 2 配置環境變數 python安裝成功後,將安裝...
mysql自動化部署方案 什麼是自動化部署?
自動化部署將可交付產品,快速且安全地交付使用者使用的一套系統和工具。系統會自動構建 測試並準備 變更,以便將其發布到指定環境的過程,包括開發環境 預發布環境 生產環境等。自動化部署工具介紹 簡要介紹 該工具是資料庫自動化部署調優工具,支援mysql 8.0.17 8.0.18和postgresql ...
自動化部署job
bin sh the discription of start.sh echo e the script function 1 deploy the tomcat server if files exist.echo e 2 restart the tomcat server if files no...