【问题标题】:How to do user interaction on commands in Chef?如何在 Chef 中对命令进行用户交互?
【发布时间】:2016-01-19 22:30:19
【问题描述】:

我有一些需要用户交互的命令,所以我想Enter 使用默认值或从厨师本身提供一些输入,这样我的实例就不会在运行时失败。比如……

./build-ca        # The command I am executing
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [IN]: 
State or Province Name (full name) [KA]:

在这里按enter 将完成这项工作(使用默认值),同时手动执行它,但是我如何使用 Chef 自动执行此操作,有时我还需要按 y 或其他值。任何帮助将不胜感激。

【问题讨论】:

标签: ruby chef-infra


【解决方案1】:

如果您没有其他选择(例如,将参数或输入文件传递给命令或脚本,正如其他人已经建议的那样),您可以使用 expect 编写交互脚本并使用 bash 资源从您的厨师食谱中运行它.

How to automate user interactive command in chef recipe

【讨论】:

    【解决方案2】:

    我认为您正在使用Easy RSA 脚本来生成 OpenVPN 证书。

    一种解决方案是生成./vars 文件并调用pkitool (which is called by the old build-ca script):

    easy_rsa_path = '/usr/share/easy-rsa' # or whatever
    
    template "#{easy_rsa_path}/vars" # [...]
    
    bash 'build-ca' do
      cwd easy_rsa_path
      code <<-EOH
        source ./vars && \
        ./clean-all && \
        ./pkitool --batch --initca
      EOH
      creates "#{easy_rsa_path}/keys/ca.crt"
    end
    

    更好的方法是使用 OpenSSL 生成证书。你可以在openvpn cookbook看到一个实现示例:

    bash 'openvpn-initca' do
      environment('KEY_CN' => "#{node['openvpn']['key']['org']} CA")
      code <<-EOF
        openssl req -batch -days #{node["openvpn"]["key"]["ca_expire"]} \
          -nodes -new -newkey rsa:#{key_size} -sha1 -x509 \
          -keyout #{node["openvpn"]["signing_ca_key"]} \
          -out #{node["openvpn"]["signing_ca_cert"]} \
          -config #{key_dir}/openssl.cnf
      EOF
      not_if { ::File.exists?(node['openvpn']['signing_ca_cert']) }
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 2013-02-21
      • 1970-01-01
      • 2015-02-12
      • 2019-06-22
      • 2018-07-08
      • 2019-05-25
      相关资源
      最近更新 更多