我有一些需要用户交互的命令,所以我想要Enter
使用默认值或者从chef本身输入一些输入,这样我的实例就不会在运行时失败。例如......
./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
或其他值。任何帮助将受到高度赞赏。
答案 0 :(得分:0)
我认为您正在使用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
答案 1 :(得分:0)
如果您没有其他选择(例如,将参数或输入文件传递给命令或脚本,如其他人已经建议的那样),您可以编写与expect
的交互脚本,并使用{{从您的厨师食谱运行它1}}资源。