【问题标题】:Salt: Pass parameters to custom module executed inside a pillarSalt:将参数传递给在支柱内执行的自定义模块
【发布时间】:2016-03-18 16:09:20
【问题描述】:

我正在编写一个在支柱内执行的自定义模块(以设置支柱变量),但我需要它来检索外部参数。

这个想法是从主服务器检索参数。例如,如果我执行

salt 'myminion' state.highstate

自定义模块将被调用,它应该检索一个参数来生成柱子。

我正在研究以下选项:

  1. 使用环境变量:它不起作用,因为执行模块似乎无法访问 salt 命令的 shell 环境。

  2. 使用命令行参数:我什至不知道这是否可行,因为我找不到任何文档。

  3. 在命令行中使用额外的支柱:它不起作用,因为执行模块在支柱评估期间执行,因此它无权访问 __pillar____salt__['pillar.get'](均为空)。

  4. 从标准输入读取:不适用于自定义模块。

  5. 使用文件读取信息:我什至没有尝试过,因为出于安全原因,这不是我的选择。我不想存储这些信息。

任何想法是否或如何做到这一点?

非常感谢!

【问题讨论】:

    标签: module salt-stack


    【解决方案1】:

    作者:

    在柱子内执行的自定义模块(设置柱子变量)

    你的意思是external pillar吗?

    如果是这样,传递它的参数包含在该文档中:

    您可以将单个参数、参数列表或参数字典传递给您的支柱:

    ext_pillar:
      - example_a: some argument
      - example_b:
        - argumentA
        - argumentB
      - example_c:
        keyA: valueA
        keyB: valueB
    

    外部支柱将它们的数据合并到支柱字典中,并且是“自定义模块”,所以我认为这适合您的情况。

    如果这不是您想要做的,您可以更新问题吗?这个参数是从哪里来的?是否因 minion 不同而不同(minion_id 总是传递给外部支柱)?

    (编辑)添加几个关于安全存储机密的链接:

    【讨论】:

    • 不一定是外部支柱,但我不希望它存储在文件中。该参数将是敏感信息,我不希望将其存储在任何地方,仅在执行期间存储在内存中。
    • 您是否担心信息在 master 上的文件中?还是在奴才身上?如果是前者,这意味着有人必须在启动后登录主服务器并手动重新输入数据?如果攻击者已经拥有了主人,那么一切都结束了。用几个可能有用的链接更新我的答案。
    • 我同意,如果你的主人被攻破了,你就完了。但我在想的是,通常如果你的主服务器的备份受损可能没什么大不了的(取决于你在那里存储的内容)。出于这个原因,我不想存储一些信息,所以主服务器的备份更安全。最佳解决方案需要在启动时添加密码,以便它可以从那时起运行。不幸的是,使用文件系统加密对我来说不是一个选项,因为我正在使用 LXC。我真正想要的是将一些信息提供给 salt 模块,以了解它在 master 中的执行情况。
    猜你喜欢
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多