【问题标题】:How does one pass positional arguments to mine function aliases?如何将位置参数传递给我的函数别名?
【发布时间】:2015-01-17 16:24:34
【问题描述】:

使用 salt 2014.7.0,我可以将以下内容添加到 minion 配置中:

mine_functions:
  cmd.run: [echo hello]

然后,在 salt master 上,我可以看到我的“测试”仆从从矿井中检索“你好”:

salt 'test' mine.update
salt 'test' mine.get 'test' cmd.run
test:
    ----------
    test:
        hello

这一切都运作良好。但是,我想使用 mine function alias 而不是 cmd.run 句柄。文档不清楚如何执行此操作,到目前为止我尝试过的任何方法都不起作用。以下尝试失败:

在 mine_function 中传递参数:

mine_functions:
  say_hello:
    mine_function: 
      cmd.run: [echo hello]

将参数作为“名称”字段传递:

mine_functions:
  say_hello:
    mine_function: cmd.run 
    name: echo hello 

将参数作为“参数”列表传递:

mine_functions:
  say_hello:
    mine_function: cmd.run 
    args: [echo hello] 

但这些都不会产生预期的结果,通过 say_hello 别名访问“hello”,即:

salt 'test' mine.update
salt 'test' mine.get 'test' say_hello
test:
    ----------
    test:
        hello

使用 mine 函数别名时,将参数传递给 mine 函数的正确方法是什么?

【问题讨论】:

    标签: salt-stack


    【解决方案1】:

    找到一个可行的解决方案!

    诀窍是使用列表作为挖掘函数别名的值,将 mine_function 键作为第一个值,如下所示:

    mine_functions:
      say_hello:
        - mine_function: cmd.run 
        - echo hello
    

    这会产生所需的输出:

    salt 'test' mine.update
    salt 'test' mine.get 'test' say_hello
    test:
        ----------
        test:
            hello
    

    【讨论】:

      【解决方案2】:

      我相信这个问题的实际解决方案是:

      mine_functions:
        say_hello:
          - mine_function: cmd.run
          - cmd: echo test
      

      关键是指定cmd: echo test而不是name: echo test

      原因如下: mine_functions 执行盐模块,而不是盐状态(每个 this documentation)。这与在命令行上运行 salt <target> <module>.<method> [args] 时发生的情况相同。值得注意的是,命令模块不一定遵循将name 作为第一个参数的状态约定。

      如果您查看salt.modules.cmdmod 模块的documentation(由于某种原因,它用于引用cmd.run,而不是cmdmod.run),您会注意到它的第一个参数名为@ 987654332@ 而不是name。使用它作为键来做你需要它做的事情。

      【讨论】:

        猜你喜欢
        • 2019-01-23
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        • 2019-04-16
        • 1970-01-01
        • 1970-01-01
        • 2018-01-08
        • 2022-01-19
        相关资源
        最近更新 更多