複数の並列タスク間でホストを動的に変更する方法はありますか? これは私がこれまでに持っているものです。
def init_hosts():
env.hosts = [host1,host2,host3,host4]
@parallel
def task_1():
if condition is False:
env.hosts.remove(env.host)
@parallel
def task_2():
run('uname -s')
明らかに、いくつかのパラメータが不足していますが、 の条件を満たすホストでenv
のみ実行したいと考えています。で定義された初期リスト内のすべてのホストで実行されているため、 のホスト リストは起動時に初期化されているようです。また、roledef を動的に変更して構築しようとしましたが、同じ結果になりました。task_2
task_1
task_2
env.hosts
init_hosts()
編集:また、複数の並列タスクが順次ではなく並列に実行されるように、並列実行キューを設定する方法はありますか?
編集:各タスクに出力を返させ、出力を解析してexecute()に渡す新しいホストリストを作成することで、目的の最終結果を得ることができました:
def init_hosts():
env.hosts = [host1,host2,host3,host4]
@parallel
def task_1():
if condition is False:
return False
else:
return True
@parallel
def task_2():
run('uname -s')
def run_tests():
results = execute(task_1)
successful_hosts = [k for k in results.iterkeys() if results[k]]
execute(test_2, hosts=successful_hosts)
これは機能しますが、多くの理由でひどいものです。より良い方法はありますか?