web-dev-qa-db-ja.com

cmd.runにsalt-stackのプロンプトに応答させるにはどうすればよいですか?

次のようにstate.slsで実行されているsaltスクリプトがあります。

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 docs on cmd.runはこれを行うことについて何も言っておらず、正確に何をグーグルで検索すればよいかわかりません。 Perlの実装では、Expectを使用してこれを行うことを知っています。

yで答えてくださいとsaltに指示するにはどうすればよいですか?

3
simbabque

最近のバージョンの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モジュールを作成することもできます。

4
Dan Garthwaite