如何将位置参数传递给我的函数别名?

时间:2014-11-19 23:19:02

标签: salt-stack

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

mine_functions:
  cmd.run: [echo hello]

然后,在盐主人身上,我可以看到我的'测试'小兵从矿井中取回“你好”:

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 

将论证作为“args”列表传递:

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

但是这些都没有产生预期的结果,通过say_hello别名访问“你好”,即:

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

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

2 个答案:

答案 0 :(得分:4)

找到了可行的解决方案!

诀窍是使用列表作为我的函数别名的值,将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

答案 1 :(得分:0)

我认为实际解决方案是:

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

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

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

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