Saltstack声明要求互动进入

时间:2017-02-14 02:37:15

标签: kerberos interactive salt-stack

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

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

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

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

我想改进这个,因为:

  1. 除了a之外,我们希望我们的整个配置都在盐中 最小的bootstrap配置初始salt集群,我们更喜欢 不要在盐状态/支柱之外维护单独的脚本 树。
  2. 此解决方案仅适用于一个主机,我们希望在多个节点上运行多个测试
  3. 使用包装器脚本,我们必须有额外的状态来在至少一个主机上安装包装器脚本
  4. 我们可以解决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周的答案,因为不可能的信息也很有用所以我不会花更多的时间来搜索。

1 个答案:

答案 0 :(得分:1)

我不是Salt的真正专家,但现在似乎在各州都没有这种可能性。 Salt状态中的包装器脚本是一些解决方法选项之一,另一个是调用cmdmod.run模块(具有stdin参数)。但是,你可能最终会为Salt发布本身提供另一个包装脚本。

自2014年以来,有一个open issue关于添加向cmd.run州发送一些输入的功能。