如何让 cmd.run 回答 salt-stack 中的提示?

如何让 cmd.run 回答 salt-stack 中的提示?

我有一个正在按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 模块。

相关内容