我正在寻找关于盐栈中是否或如何运行需要输入的状态的答案,或者是否存在盐以交互方式执行kinit的现有方法。
具体来说,我的状态是我试图在所有节点上运行测试,其中一些节点需要有效的kerberos票。
目前,我们有一个提示登录的脚本(运行kinit),然后如果登录成功则使用salt启动测试,然后销毁故障单。
我想改进这个,因为:
我们可以解决2,通过创建一个salt状态来首先将kerberos票证复制到所有节点,并在调用测试状态之前先调用该状态,但这并不能解决1.
虽然我们现在只需要设施来运行测试,但是通过管理员帐户,我们可以预见到将来运行需要其他kerberos票的其他州的愿望,可能由被允许进入该州的用户运行已配置的salt ACL。
现有代码在bash脚本中,看起来像这样,并且需要在每个单独的节点上运行,以便在本地获取票证:
if kinit <adminaccount>
then
salt-call state.test.suites
kdestroy
fi
要解决2:我认为我们可以使用这样的东西,但仍然需要额外的包装脚本:
export KRB5CCNAME="/path/to/test/ticket"
if kinit <adminaccount>
then
salt-call state.sls state.test.util.distribute_ticket pillar="{ticket: '${KRB5CCNAME}'}"
salt <hostpattern> state.sls state.test.suites
kdestroy
fi
理想情况下,我们可以在salt主配置或salt状态本身内定义一个方法,即状态需要交互式输入,只能通过终端调用(例如salt-call)并连接在salt进程的终端,例如对于调用kinit的cmd.run可以使用它。
或者,也许有一个kerberos支持模块,在执行salt之前需要一张票,然后将高状态分配给minions,(并且可能以某种方式在支柱数据中提供票证)?
我查看了盐文档并没有找到任何东西,但我可能错过了什么,因此我的问题。
感谢您的时间。
如果您有更好的自动化/实现方法,请考虑回答,如果可以接受,我会将其标记为已接受,除非其他人有使用盐的解决方案(如果它仍然有用,我仍然会支持它即使有特定盐的解决方案作为公认的答案)。
如果您是盐专家并且认为我没有办法解决这个问题,请告诉我,如果没有其他答案可以帮助我,我会将您的标记视为已接受等待1周的答案,因为不可能的信息也很有用所以我不会花更多的时间来搜索。
答案 0 :(得分:1)
我不是Salt的真正专家,但现在似乎在各州都没有这种可能性。
Salt状态中的包装器脚本是一些解决方法选项之一,另一个是调用cmdmod.run
模块(具有stdin
参数)。但是,你可能最终会为Salt发布本身提供另一个包装脚本。
自2014年以来,有一个open issue关于添加向cmd.run
州发送一些输入的功能。