我需要从角色定义中对主机进行排序,以便它们可以按特定顺序运行这些任务。
我正在实施 PostgreSQL BDR ( http://2ndquadrant.com/en-us/resources/bdr/ ) 部署程序。为了成功,您需要在主机中创建一个 BDR 组,然后才加入所有其他主机中的 BDR 组。
用户需要从列表中选择哪个是第一个主机。
----已编辑----
我尝试动态设置 env.hosts 但它不起作用。
env.roledefs = {
'array1': [],
}
env.hostsdefs = {
'array1': [
{'host': 'data-03', 'server': 'root@data-03'},
{'host': 'data-01', 'server': 'root@data-01'},
],
}
@serial
def sort_and_echo(default_host):
sort_host(default_host)
echoing()
@serial
def sort_host(default_host):
hostnames = env.hostsdefs[env.roles[0]]
new_hosts = []
for host in (hostnames):
if (host['host'] != default_host):
new_hosts.append(host['server'])
else:
new_hosts = [host['server']] + new_hosts
env.hosts = new_hosts
@serial
def echoing():
print env.hosts
print('current host: %s' % (env.host_string))
这样,如果我尝试:
fab -R array1 sort_and_echo:default_host=data-03
['root@data-03', 'root@data-01']
current host: None
Done.
它不会为列表中的每个服务器运行回显。
但是,如果我尝试一种然后在同一命令中回显:
fab -R array1 sort_host:default_host=data-03 echoing
它将提供预期的输出:
[root@data-03] Executing task 'echoing'
['root@data-03', 'root@data-01']
current host: root@data-03
[root@data-01] Executing task 'echoing'
['root@data-03', 'root@data-01']
current host: root@data-01
Done.
如何在运行时更改主机列表?