我正在尝试将我的代码从Fabric 1.x移植到Fabric2。
在旧版本的Fabric中,我使用env.host
作为每台机器的id:
party_id = env.hosts.index(env.host)
我怎样才能在Fabric2中做到这一点?
=========== =========== UPDATE
我正在使用此代码段创建主机:
host_list = open('public_ips', 'r').read().splitlines()
self.connections = []
self.pool = Group()
for host in host_list:
self.pool.append(Connection(host, user='user', connect_kwargs={
'key_filename': ['mykey.pem']
}))
在运行时,我需要知道Connection
对象中每个ThreadingPool
对象的索引是什么。
env.host
不适用于Fabric2,当我用Connection
发现Fabric2
对象时,我遇到了完全相同的问题。使用Fabric2
,您可以使用connection
对象访问主机。
这是一个示例代码
>>> import fabric
>>> res = fabric.ThreadingGroup('test1', 'test2').run('uptime')
04:14:04 up 1 day, 16:20, 0 users, load average: 0.00, 0.00, 0.00
04:14:05 up 2 days, 1:55, 0 users, load average: 0.00, 0.00, 0.00
>>> res
{<Connection host=test1>: <Result cmd='uptime' exited=0>, <Connection host=test2>: <Result cmd='uptime' exited=0>}
>>> for i in res:
... print(i.host)
...
test1
test2
这是有关Fabric2 Connection的信息的链接