2013-01-18 9 views
12

Ho uno script di provisioning della shell che richiama un comando che richiede l'input dell'utente, ma quando eseguo vagrant provision, il processo si blocca in quel punto dello script, poiché il comando è in attesa del mio input, ma non c'è un posto dove darlo. C'è un modo per aggirare questo - vale a dire per forzare lo script per l'esecuzione in qualche modalità interattiva?Come posso interagire con uno script di provisioning della shell di Vagrant?

Le specifiche sono che la creazione di un ambiente pulito Ubuntu VM, e poi invocare il Heroku CLI per scaricare un backup del database (questo è nel mio script di provisioning):

curl -o /tmp/db.backup `heroku pgbackups:url -a myapp` 

Tuttavia, perché questo è un VM pulito , e quindi questa è la prima volta che eseguo un comando CLI Heroku, mi vengono richieste le credenziali di accesso. Poiché lo script è gestito da Vagrant, non è stata allegata alcuna shell interattiva, quindi lo script è semplicemente appeso lì.

+0

qual è stata la soluzione? – Mathieu

risposta

2

Suppongo che non si vogliano codificare le credenziali in testo normale, tentando così di forzare una modalità interattiva. La cosa è proprio come tu non vedo questa opzione nel documento di disposizione vagante (http://docs.vagrantup.com/v1/docs/provisioners/shell.html) quindi in un modo o nell'altro devi incorporare l'autenticazione all'interno del tuo script. Hai mai pensato di usare qualcosa come ottenere un token e usare l'herpes REST di heroku al posto della CLI? https://devcenter.heroku.com/articles/authentication

+2

Hai ragione - Sto costruendo un box generico per un gruppo di sviluppatori, ognuno dei quali ha bisogno di fornire le proprie credenziali. Ho lavorato attorno al problema per ora. –

+11

Come hai lavorato intorno ad esso? –

+0

@JoeBlock è possibile aggirare il problema utilizzando un file di configurazione che gli utenti immettono i dati in modo preventivo e si aspettano: http://linux.die.net/man/1/expect – SgtPooki

1

Se volete passare ingresso temporaneo o variabili a uno script Vagrant, potete averli immettere le credenziali come variabili di ambiente temporanee per quel comando, ponendo loro in primo luogo sulla stessa linea:

username=x password=x vagrant provision 

e accedervi dall'interno Vagrantfile come

$u = ENV['username'] 
$p = ENV['password'] 

Poi li si può passare come argomento allo script bash:

config.vm.provision "shell" do |s| 
    s.inline: "echo username: $1, password: $2" 
    s.args: [$u, $p] 
end 

È possibile installare qualcosa di simile al vm per gestire il passaggio di tali variabili al comando di arricciatura.

Problemi correlati