我正在编写一个自定义的Asterisk厨师食谱,我需要运行此脚本
bash 'create asterisk keys' do
user 'root'
cwd File.dirname(source_path)
code <<-EOH
cd asterisk-#{node.version}*
./contrib/scripts/ast_tls_cert -C #{node.host} -O "#{node.box_name}" -d #{node.keys_dir}
EOH
action :nothing
end
这个ast_tls_cert
脚本会要求输入几个密码,但是当我通过vagrant运行时,密码永远不会生成,因为密码永远不会被输入。有没有办法告诉厨师如果脚本需要用户输入只使用一些ENV变量作为值?我真的不需要它停下来并要求用户输入。实际上,我认为它没有做到这一点。我只想指定一些值并告诉它使用该值。
答案 0 :(得分:0)
通常,您需要假设Chef无人值守。您可以使用expect或pexpect(python版本)等工具来驱动绝对需要交互式输入的脚本,但请检查您是否可以通过环境变量或类似提供密码。
答案 1 :(得分:0)
有一个名为ruby_expect的宝石,可以添加到食谱中来处理这个问题。
在您的食谱default.rb
文件的顶部,您要添加chef_gem 'ruby_expect'
。接下来,我创建了一个ruby_block来处理这个问题。
ruby_block 'create asterisk keys' do
block do
require 'ruby_expect'
Dir.chdir(File.join(File.dirname(tarball_path), "asterisk-#{node.version}"))
exp = RubyExpect::Expect.spawn(%{./contrib/scripts/ast_tls_cert -C #{node.host} -O "#{node.box_name}" -d #{node.keys_dir}}, debug: true)
exp.procedure do
each do
expect %r{Enter pass phrase for /etc/asterisk/keys/ca.key:} do
send 'somepassword'
end
end
end
end
action :nothing
end
tarball_path
是您下载星号tar的地方。