Chef Solo получает пользовательский ввод

Не знаю, почему я ничего не могу найти в инете по этому поводу.

В основном я хочу написать рецепт, который запрашивает у пользователя имя пользователя/пароль github, а затем отправляет сообщение в API github, чтобы добавить ключ ssh.

Я уверен, что могу предложить пользователю обычные методы ruby ​​(например, gets), но это не кажется естественным, учитывая все утилиты, которые предоставляет шеф-повар.

Может ли кто-нибудь сказать мне, как «шеф-повар» предлагает пользователю ввести данные для сохранения в vars для последующего использования?

Я хотел бы сначала вывести некоторые инструкции для чтения пользователем, затем получить имя пользователя, затем пароль, я думаю, из соображений безопасности пароль не должен отображаться на консоли при вводе


person brad    schedule 03.11.2013    source источник
comment
Вы нашли решение этой проблемы? Это нормально, чтобы ответить на свой вопрос. Пожалуйста, не забудьте отметить ответ как правильный! :)   -  person sethvargo    schedule 03.01.2014
comment
Это может ответить на ваш вопрос: stackoverflow.com/questions/14730833/   -  person jkulak    schedule 18.11.2014


Ответы (2)


Я бы сказал, что шеф-повар не создан для такого пользовательского ввода.

Вы можете использовать код ruby, который выполняется на этапе компиляции запуска шеф-повара, но я бы предложил следующее:

Как насчет чтения из переменной среды?

person StephenKing    schedule 03.11.2013
comment
так что я думаю, что это не стандартное поведение тогда... Моя проблема в том, что мой скрипт шеф-повара сам запускается из автоматизированного скрипта, поэтому было бы немного раздражающе устанавливать переменные ENV перед этим - person brad; 03.11.2013

Это кажется очень грязным, но это действительно работает. Возможно, некоторые вещи можно настроить так, чтобы он казался немного более чистым:

file "/tmp/ans" do
  puts "Enter something useful!"
  content ::STDIN.readline
end

Вы можете применить такой рецепт с помощью chef-apply, обратите внимание, что использование Vagrant не сработает.

Тем не менее, я бы рекомендовал сделать это по-другому. Другой способ — вызывать шеф-повара не напрямую, а через скрипт-оболочку. Это может считывать данные от пользователя и записывать их в файл json, который затем передается шеф-повару через параметр -j PATH, --json-attributes PATH (см. параметры шеф-повара).

person StephenKing    schedule 03.11.2013
comment
О.. или этот скрипт может устанавливать переменные окружения :D (но использование параметров -j выглядит чище. - person StephenKing; 03.11.2013
comment
интересная идея ... Я попробую и вернусь к вам, спасибо! - person brad; 10.11.2013
comment
Если вам нужно задать этот вопрос, вам, вероятно, не следует использовать этот ответ. Если вы знаете о пользовательском вводе и ptys и можете написать свой собственный expect(1), вы можете свободно это делать. Если вы не можете, и у вас возникли проблемы с этим подходом, и вы ожидаете отправки ошибок шеф-клиенту, который хочет помочь с этим, мы, вероятно, скажем вам, что вам нужно использовать переменную ENV и скрипт-оболочку, который вызывает что-то больше подходит для пользовательского ввода, и мы не сможем научить вас, как исправить все ошибки в вашем ruby-скрипте. Вы застрянете в грязи, и мы не сможем вас вытащить. - person lamont; 01.09.2020
comment
Вы застряли в грязи на 7 лет, пока не смогли ответить? :D Шучу ;) - person StephenKing; 04.09.2020