Подтвердить что ты не робот

Как я могу взаимодействовать с настройкой оболочки 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 просто висит там.

4b9b3361

Ответ 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.