【发布时间】:2017-02-14 02:37:15
【问题描述】:
我正在寻找有关 saltstack 中是否或如何可能运行需要输入的状态的答案,或者是否存在让 salt 交互执行 kinit 的方法。
具体来说,我有一些状态,我试图在所有节点上运行测试,其中一些需要有效的 kerberos 票证。
- “ipa”工具,用于验证 IPA 策略设置
- NFS4 kerberised 文件系统访问
- 其他需要有效 kerberos 票证的测试
目前,我们有一个提示登录的脚本(运行 kinit),如果登录成功,则使用 salt 启动测试,然后销毁票证。
我想改进这一点,因为:
- 我们希望我们的整个配置都在 salt 内,除了 配置初始盐集群的最小引导程序,我们更喜欢 不要在盐州/支柱之外维护单独的脚本 树。
- 此解决方案仅适用于一台主机,我们希望跨多个节点运行多个测试
- 使用包装脚本,我们必须有额外的状态才能在至少一台主机上安装包装脚本
我们可能可以解决 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),并且连接终端到盐进程,例如它可用于调用 kinit 的 cmd.run。
或者,也许有一个 kerberos 支持模块,它可以在执行 salt 时需要票证,然后将高状态分发给 minions,(并且可能以某种方式在支柱数据中提供票证)?
我查看了 salt 文档并没有找到任何东西,但是我可能遗漏了一些东西,因此我提出了问题。
感谢您的宝贵时间。
如果您有更好的自动化/实施方式,请考虑回答,如果可以接受,我会将其标记为已接受,除非其他人有使用盐的解决方案(如果它仍然有用,我仍然会支持它即使有一个特定于盐的解决方案作为公认的答案)。
如果您是盐专家并且认为我是正确的,目前没有办法这样做,请告诉我,如果没有其他答案可以帮助我,我会在之后将您的答案标记为已接受等待1周的答案,因为不可能的信息也很有用,所以我没有花更多时间搜索。
【问题讨论】:
标签: kerberos interactive salt-stack