我写的主厨食谱的一部分是配置perforce,这需要用户输入他们的密码(以免他们以明文形式保存在"属性"文件中)。是否可以通过交互式提示中断配置?
答案 0 :(得分:4)
我们会从Vagrantfile中提示用户,然后将该值设置为Chef属性。提示真的只对开发盒有意义,所以它们真的不应该成为Chef配方的一部分:
Vagrant.configure('2') do |config|
config.vm.provision :chef_client do |chef|
chef.add_role 'dev'
chef.chef_server_url = 'https://api.opscode.com/organizations/myorg'
chef.node_name = "vagrant-#{ENV['USER']}-dev.example.com"
chef.validation_key_path = 'example-validator'
chef.json = {
'mysvc' => {
'password' => MySvc.password()
}
}
end
end
module MySvc
def self.password
begin
system 'stty -echo'
print 'MySvc Password: '
; pass = $stdin.gets.chomp; puts "\n"
ensure
system 'stty echo'
end
pass
end
end
答案 1 :(得分:3)
如果我误解了你的问题,如果你想阅读用户输入,请纠正我:
您可以使用内置的SHELL命令“read”。
示例:
[myprompt]$ read -p "Insert text : " IN_TEXT
Insert text : user input
[myprompt]$ echo $IN_TEXT
user input
ps:如果您对密码使用read命令,则可以使用“-s”选项隐藏来自终端的输入。
example2:
[myprompt]$ read -sp "Insert text : " IN_TEXT
Insert text : //stdin <<"user input"
[myprompt]$ echo $IN_TEXT
user input