使用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
使用我的函数别名时,将参数传递给我的函数的正确方法是什么?
答案 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
。使用它作为关键代替你需要做的事情。