我有一个正在按state.sls
如下方式执行的盐脚本:
salt '*' state.sls foo.bar
在我的脚本中我有这个:
foo-bar:
cmd.run:
- php foo.php bar --delete
- cwd: /srv/foo
该--delete
标志将导致脚本首先截断数据库。我的问题是它提出一个问题并期望输入。
root@host:/srv/foo# php foo.php bar --delete
This is going to remove all data in the database. Are you sure? [y/n]:
因为 salt 不知道如何回答,它会超时、中止并做一些我不打算做的事情。
这盐文档没有cmd.run
提到如何做这件事,我也不知道该在 Google 上搜索什么。我知道在 Perl 实现中我会使用 Expect 来做这件事。
我该如何告诉盐请回答y
?
答案1
在最新版本的 salt 中,您可以向 cmd.run 提供“stdin”:
A string of standard input can be specified for the command to be run using the ``stdin`` parameter. This can be useful in cases where sensitive information must be read from standard input.: salt '*' cmd.run "grep f" stdin='one\ntwo\nthree\nfour\nfive\n'
您可以创建一个脚本来执行它并通过它运行它,cmd.script
甚至可以创建一个自定义的 python 模块。