使用一个需要用户输入的脚本与流浪汉厨师食谱



我正在写一本定制的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脚本将要求输入几个密码,但当我通过流浪运行这个脚本时,密钥永远不会生成,因为密码永远不会被输入。有没有办法告诉chef,如果脚本需要用户输入,只使用一些ENV变量作为值?我真的不需要它停下来向用户索要inupt。事实上,我宁愿它不要那样做。我只想指定一些值,并告诉它使用该值。

通常,您需要假设Chef在无人值守的情况下运行。您可以使用expect或pexpect(python版本)等工具来驱动绝对需要交互式输入的脚本,但请检查是否可以通过环境变量或类似的方式提供密码。

有一个名为ruby_expect的gem,可以添加到食谱中来处理这个问题。

在烹饪书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的位置。

相关内容

  • 没有找到相关文章

最新更新