在Fabric1中,可以在运行时在CLI上选择角色(fab some_task --roles = broker)。有什么方法可以传递Fabric2中的角色?
更新:如果有人感兴趣,作为临时解决方法,我正在使用:
@task
def broker(c):
c.config.run.env['role'] = 'broker'
c.config.run.env['conn'] = generate_group('hosts.json', c.config.run.env['role'])
以下功能从json文件加载已定义角色的主机:
def generate_group(filename, role):
with open(filename, 'r') as fh:
roles_file = json.loads(fh.read())
arguments = roles_file[role]
con_group = ThreadingGroup(*arguments, user='root', port=22, connect_kwargs={"password": "some_password"})
return con_group
然后像这样使用它:
fab2代理some_task
任务:
@task()
def some_task(c):
group = c.config.run.env['conn']
group.run('pkill -f "tail -f"')