2017-02-14 108 views
0

我正在寻求答案,以确定在saltstack中是否可能运行需要输入的状态,或者是否存在盐交互式执行kinit的现有方法。Saltstack状态需要交互式输入

具体来说,我有我试图跨我们所有节点运行测试的状态,其中一些节点需要有效的kerberos票证。

  • 的 'IPA' 的工具,用于验证IPA策略设置
  • NFS4 kerberised文件系统访问
  • 需要一个有效的Kerberos

目前其他测试中,我们有一个脚本提示登录(运行kinit),然后如果登录成功则使用salt启动测试,然后销毁票证。

我想改善这一点,因为:

  1. ,我们希望我们的整个配置是盐中,除了一个 最小引导配置初始盐集群,我们宁愿 不在盐状态/支柱 树之外维护单独的脚本。
  2. 这种解决方案仅适用于一台主机,我们想在很多节点
  3. 与包装脚本运行的许多测试中,我们则必须有额外的状态到至少一台主机上安装包装脚本

我们也许可以解决2,通过创建一个盐状态到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-call),并将终端连接到salt进程,在那里它可用于调用kinit的cmd.run。

或者,也许有一个kerberos支持模块,它可以在执行salt时需要一张票,然后将highstate分发给minions,(也许可以使支票以某种方式在支柱数据中提供)?

我看过盐文档,但没有发现任何东西,但我可能错过了一些东西,因此我的问题。

谢谢你的时间。

如果您有更好的自动化/实现方式,请考虑回答,如果可以接受,我会将其标记为Accepted,除非其他人有使用盐的解决方案(如果它仍然有用,我仍然会upvote即使有一个特定的盐溶液作为公认的答案)。

如果你是盐专家,并且认为我是正确的,目前没有办法做到这一点,请让我知道,如果没有其他答案帮助我,我会将你的标记为已接受在等待1周的答案后,因为它不可能的信息也是有用的,所以我不花更多的时间搜索。

回答

1

我不是Salt的真正专家,但现在看来在这个州没有这种可能性。 Salt状态中的包装脚本是几个解决方法选项之一,另一个将调用cmdmod.run模块(其参数为stdin)。但是,你可能最终会得到Salt发布本身的另一个包装脚本。

自2014年以来有一个open issue关于添加发送一些输入到cmd.run状态的能力。