Como eu faço o cmd.run responder a um prompt na pilha de sal?

3

Eu tenho um script salt que está sendo executado com state.sls assim:

salt '*' state.sls foo.bar

No meu script eu tenho isto:

foo-bar:
  cmd.run:
    - php foo.php bar --delete
    - cwd: /srv/foo

O --delete flag fará com que o script trunque um banco de dados primeiro. Meu problema é que ele faz uma pergunta e espera uma entrada.

root@host:/srv/foo# php foo.php bar --delete
This is going to remove all data in the database. Are you sure? [y/n]:

Porque o sal não sabe como responder que vai expirar e abortar e fazer coisas que eu não pretendia.

Os documentos de sal em cmd.run não dizer qualquer coisa sobre isso e não tenho certeza o que procurar no Google exatamente. Eu sei que em uma implementação do Perl eu usaria o Expect para fazer isso.

Como posso dizer ao sal para responder com y ?

    
por simbabque 05.02.2015 / 18:19

1 resposta

3

Em versões recentes do salt você pode fornecer 'stdin' para cmd.run:

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'

Você pode criar um script para fazê-lo e executá-lo via cmd.script ou até criar um módulo Python personalizado.

    
por 05.02.2015 / 19:55

Tags