Saltstack 状态需要交互式输入

Saltstack states requiring interactive entry

我正在寻求关于在 saltstack 中是否或如何可能 运行 需要输入的状态的答案,或者是否存在让 salt 以交互方式执行 kinit 的现有方法。

具体来说,我在某些状态下寻求 运行 测试所有节点,其中一些节点需要有效的 kerberos 票证。

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

我想对此进行改进,因为:

  1. 我们希望我们的整个配置都在 salt 中,除了 最小 bootstrap 配置初始 salt 集群,我们更喜欢 不要在 salt 之外维护单独的脚本 state/pillar 树.
  2. 此解决方案仅适用于一台主机,我们希望 运行 跨多个节点进行多次测试
  3. 使用包装器脚本,我们必须有额外的状态才能在至少一台主机上安装包装器脚本

我们或许可以解决 2,方法是首先创建盐状态以将 kerberos 票证复制到所有节点,并在调用测试状态之前先调用该状态,但这不能解决 1。

虽然我们目前只需要 运行ning 测试的设施,但使用管理员帐户,我们可以预见将来 运行 需要其他 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 支持模块,在将高状态分发给 minions 之前,在执行 salt 时可能需要一个票据,(并且可能以某种方式在支柱数据中提供票据)?

我查看了 salt 文档,没有找到任何东西,但是我可能遗漏了一些东西,因此我的问题。

感谢您的宝贵时间。

如果你有更好的automating/implementing方法,请考虑回答,如果可以接受我会将其标记为已接受,除非其他人有使用盐的解决方案(如果它仍然有用我'即使有一个特定于盐的解决方案作为公认的答案,我仍然会投票给它。

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

我不是 Salt 的真正专家,但目前看来各州还没有这种可能性。 Salt state 中的包装脚本是几个解决方法之一,另一个是调用 cmdmod.run 模块(具有 stdin 参数)。但是你最终可能会得到另一个用于 Salt 启动本身的包装脚本。

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