Как я могу взаимодействовать с настройкой оболочки Vagrant script?
У меня есть оболочка script, которая вызывает команду, требующую ввода пользователя, но когда я запускаю vagrant provision
, процесс зависает в этой точке в script, так как команда ждет моего ввода, но его негде дать. Есть ли способ обойти это, т.е. Заставить script работать в некотором интерактивном режиме?
Специфика заключается в том, что я создаю чистую Ubuntu VM, а затем вызываю CLI Heroku для загрузки резервной копии базы данных (это в моем обеспечении script):
curl -o /tmp/db.backup `heroku pgbackups:url -a myapp`
Однако, поскольку это чистая виртуальная машина, и поэтому это первый раз, когда я запустил команду CLI Heroku, мне будет предложено ввести учетные данные для входа. Поскольку script управляется Vagrant, интерактивная оболочка не подключена, поэтому script просто висит там.
Ответы
Ответ 1
Я предполагаю, что вы не хотите жестко кодировать свои учетные данные в виде простого текста, тем самым пытаясь заставить интерактивный режим.
Вещь так же, как вы, я не вижу такого варианта в dag-благах (http://docs.vagrantup.com/v1/docs/provisioners/shell.html), так что так или иначе вам нужно внедрить аутентификации в вашем script.
Вы думали о том, чтобы использовать что-то вроде получения токена и использовать героя REST Api вместо CLI?
https://devcenter.heroku.com/articles/authentication
Ответ 2
Если вы хотите передать временный ввод или переменные в Vagrant script, вы можете ввести их учетные данные в качестве временных переменных среды для этой команды, поместив их сначала в одну строку:
username=x password=x vagrant provision
и получить доступ к ним из Vagrantfile как
$u = ENV['username']
$p = ENV['password']
Затем вы можете передать их в качестве аргумента в свой bash script:
config.vm.provision "shell" do |s|
s.inline: "echo username: $1, password: $2"
s.args: [$u, $p]
end
Вы можете установить что-то вроде expect в vm для обработки этих переменных в команде curl.