У меня есть сценарий соли, который выполняется с 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]:
Потому что соль не знает, как ответить, что по истечении времени ожидания она прервется и сделает то, чего я не собирался.
В соль документы на cmd.run
ничего не сказал об этом, и я не уверен, что именно гуглить. Я знаю, что в реализации Perl я бы использовал для этого Expect.
Как сказать соли, чтобы она отвечала y
?
В последних версиях соли вы можете предоставить 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.