如何在多主机Beaker作业中将命令的退出状态从一个配方传递到另一个配方?

时间:2014-04-15 05:26:21

标签: beaker-testing

我正在Beaker中进行多主机测试,其中一个配方正在等待另一个配方中的命令完成。我想根据其他配方中的命令是成功还是失败来改变行为。

有什么方法可以将命令的退出状态从一个食谱传达给另一个食谱?

(根据2014年3月的邮件列表讨论。)

1 个答案:

答案 0 :(得分:1)

Beaker没有提供任何在食谱集中的食谱之间传递任意数据的机制。只有rhts-sync-set / rhts-sync-block才能进行同步。

然而,您仍然可以(ab)使用它们来实现您想要的效果。诀窍是使用两个单独的同步状态。我们称之为CMD_SUCCEEDEDCMD_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提出的。)