I don't know why I can't find anything on the interwebs about this.
I basically want to write a recipe that prompts a user for their github username/password, then posts to the github API to add an ssh key.
I'm sure I can prompt a user with normal ruby methods (ie gets) but this doesn't seem natural given all the utilities chef provides.
Can someone tell me a 'chef' way of prompting a user for input to store in vars for later use?
I'd like to first output some instructions for the user to read, then get the username, then password, I guess for safety reasons, the password should not be shown on the console as they type
I'd say chef is not made for such user input.
You might use ruby code that is executed during the compile phase of the chef run, but I'd suggest the following:
What about reading it from an environment variable?
It feels super dirty, but this actually works. Maybe some things can be tuned so that it feels a bit more clean:
file "/tmp/ans" do
puts "Enter something useful!"
content ::STDIN.readline
end
You can apply such a recipe with chef-apply
, note that using Vagrant will not work.
Still, I would recommend do it differently. Another way would be to not call chef directly, but through a wrapper script. This could read the data from the user and write it into a json file, which is then given to chef via the -j PATH, --json-attributes PATH
parameter (see chef-solo parameters).