fabric是一個python(2.7,3.4+)的庫,用來經過SSH遠程執行shell命令,並返回有用的python對象。
它創建在「invoke」和「paramiko」庫之上,同時擴展了他們的API以提供更多的功能。html
fabric的Connection方法繼承自INVOKE,實現對單個主機的SSh鏈接,返回一個該主機的鏈接對象。經過該對象,對主機進行操做和管理。python
下面來看一下connectin方法參數。web
def __init__( self, host, user=None, port=None, config=None, gateway=None, forward_agent=None, connect_timeout=None, connect_kwargs=None, inline_ssh_env=None, ):
user@host
, host:port
, user@host:port
下面是一個簡單例子:shell
from fabric import Connection con = Connection(host='xxx.xxx.xxx.xxx', user='root', connect_kwargs={'password': '***'}) print(con) >> <Connection host=xxx.xxx.xxx.xxx user=root>
goup是一個部分抽象類,須要經過具象的子類(SerialGroup或者ThreadingGroup)來使用,不然python會拋出一個NotImplimentError。api
不少狀況下,咱們須要同時操做多臺服務器。最直接的辦法天然是經過迭代的方法遍歷整個主機列表。服務器
>>> from fabric import Connection >>> for host in ('web1', 'web2', 'mac1'): >>> result = Connection(host).run('uname -s') ... print("{}: {}".format(host, result.stdout.strip())) ... web1: Linux web2: Linux mac1: Darwin
但有些時候會想將全部的主機鏈接合併在一個對象當中,這就須要SerialGroup這樣的子類。ssh
>>> from fabric import SerialGroup as Group >>> results = Group('web1', 'web2', 'mac1').run('uname -s') >>> print(results) <GroupResult: { <Connection 'web1'>: <CommandResult 'uname -s'>, <Connection 'web2'>: <CommandResult 'uname -s'>, <Connection 'mac1'>: <CommandResult 'uname -s'>, }>
group方法和Connection在參數上有不少不一樣。spa
class fabric.group.Group(*hosts, **kwargs)
user@host
, host:port
,user@host:port
速寫方式。group = SerialGroup( "host1", "host2", "host3", user="admin", forward_agent=True, )
執行shell命令,經過invoke.runners.Runner.run來實現。代理
run(command, **kwargs)
run的結果返回一個resul的實例。code
這個實例在group和Connection之間不盡相同。
>>> from fabric import SerialGroup as Group >>> results = Group('web1', 'web2', 'mac1').run('uname -s') >>> print(results) <GroupResult: { <Connection 'web1'>: <CommandResult 'uname -s'>, <Connection 'web2'>: <CommandResult 'uname -s'>, <Connection 'mac1'>: <CommandResult 'uname -s'>, }> >>> for connection, result in results.items(): ... print("{0.host}: {1.stdout}".format(connection, result)) ... ... web1: Linux web2: Linux mac1: Darwin
group獲得一個字典;connection獲得一個單個數據。