2013-01-18 4 views
12

Mam skrypt obsługi administracyjnej powłoki, który wywołuje polecenie wymagające wprowadzenia przez użytkownika - ale kiedy uruchamiam vagrant provision, proces zawiesza się w tym momencie skryptu, ponieważ polecenie oczekuje na moje wejście, ale nie ma gdzie go podać. Czy jest jakiś sposób obejścia tego - tj. Zmusić skrypt do uruchomienia w jakimś interaktywnym trybie?Jak mogę komunikować się ze skryptem obsługi powłoki programu Vagrant?

specyfiką jest to, że ja tworząc czystą Ubuntu VM, a następnie powołując się na Heroku CLI pobrać kopię zapasową bazy danych (to jest w moim skrypcie rezerw):

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

Jednak, ponieważ jest to czysty VM , i dlatego po raz pierwszy uruchomiłem polecenie CLI w Heroku. Zostałem poproszony o podanie danych logowania. Ponieważ skryptem zarządza Vagrant, nie ma dołączonej powłoki interaktywnej, więc skrypt po prostu się zawiesił.

+0

jakie było Twoje rozwiązanie? – Mathieu

Odpowiedz

2

Domyślam się, że nie chcesz, aby twoje hasło było twarde, ale w zwykłym tekście próbujesz wymusić tryb interaktywny. Thing jest tak samo jak ty nie widzisz takiej opcji w Dokumencie dotyczącym prowokatorów (http://docs.vagrantup.com/v1/docs/provisioners/shell.html), tak czy inaczej musisz osadzić uwierzytelnianie w swoim skrypcie. Czy zastanawiałeś się nad użyciem czegoś takiego jak zdobycie tokena i używanie Roku Api zamiast interfejsu CLI? https://devcenter.heroku.com/articles/authentication

+2

Masz rację - buduję ogólne pudełko dla grupy programistów, z których każdy musi podać własne dane uwierzytelniające. Pracowałem już nad problemem. –

+11

Jak się obejść? –

+0

@JoeBlock można obejść, używając pliku konfiguracyjnego, w którym użytkownicy wprowadzają dane z wyprzedzeniem i oczekują: http://linux.die.net/man/1/expect – SgtPooki

1

Jeśli chcesz przekazać tymczasowego wejścia lub zmiennych do skryptu Vagrant, można je wprowadzić swoje poświadczenia za czasowe zmiennych środowiskowych dla tego polecenia przez umieszczenie ich w pierwszej kolejności na tej samej linii:

username=x password=x vagrant provision 

i dostęp do nich z poziomu Vagrantfile jak

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

wtedy można przekazać je jako argument do skryptu bash:

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

Można zainstalować coś w stylu vm, aby obsłużyć przekazanie tych zmiennych do polecenia curl.