我正在Beaker中进行多主机测试,其中一个配方正在等待另一个配方中的命令完成。我想根据其他配方中的命令是成功还是失败来改变行为。
有什么方法可以将命令的退出状态从一个食谱传达给另一个食谱?
(根据2014年3月的邮件列表讨论。)
答案 0 :(得分:1)
Beaker没有提供任何在食谱集中的食谱之间传递任意数据的机制。只有rhts-sync-set / rhts-sync-block才能进行同步。
然而,您仍然可以(ab)使用它们来实现您想要的效果。诀窍是使用两个单独的同步状态。我们称之为CMD_SUCCEEDED
和CMD_FAILED
(如果您愿意,可以使用更具体的名称)。
如果命令成功,则第一个配方设置CMD_SUCCEEDED
;如果命令失败,则设置CMD_FAILED
。
do_something_important
if [ $? -eq 0 ] ; then
rhts-sync-set -s CMD_SUCCEEDED
else
rhts-sync-set -s CMD_FAILED
fi
然后你的另一个食谱可以等待 状态(通过传递两个-s
选项),然后测试到达哪一个(通过传递--timeout 0
):
rhts-sync-block -s CMD_SUCCEEDED -s CMD_FAILED $CLIENTS
if rhts-sync-block -s CMD_SUCCEEDED --timeout 0 $CLIENTS ; then
# command succeeded
else
# command failed
fi
(这个想法最初是由Nick Coghlan提出的。)