在提供厨师时提示

时间:2014-07-29 16:49:53

标签: vagrant chef perforce

我写的主厨食谱的一部分是配置perforce,这需要用户输入他们的密码(以免他们以明文形式保存在"属性"文件中)。是否可以通过交互式提示中断配置?

2 个答案:

答案 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