【问题标题】:Saltstack states requiring interactive entrySaltstack 状态需要交互式输入
【发布时间】:2017-02-14 02:37:15
【问题描述】:

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

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

  • “ipa”工具,用于验证 IPA 策略设置
  • NFS4 kerberised 文件系统访问
  • 其他需要有效 kerberos 票证的测试

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

我想改进这一点,因为:

  1. 我们希望我们的整个配置都在 salt 内,除了 配置初始盐集群的最小引导程序,我们更喜欢 不要在盐州/支柱之外维护单独的脚本 树。
  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),并且连接终端到盐进程,例如它可用于调用 kinit 的 cmd.run。

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

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

感谢您的宝贵时间。

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

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

【问题讨论】:

    标签: kerberos interactive salt-stack


    【解决方案1】:

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

    自 2014 年以来,open issue 就添加了向cmd.run 状态发送一些输入的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多