jso*_*iki 3 ruby chef-infra knife
我想围绕刀创建一个很好的包装类,以允许程序以可读的方式运行刀命令.我目前正在尝试使用chef gem中的knife.rb文件作为一些成功的指南.但是,我在关闭编辑器时遇到了问题.如果我运行以下代码:
require 'chef/knife'
knife = Chef::Knife.new
knife.run(['client', 'create', 'new-client'], '--disable-editing')
Run Code Online (Sandbox Code Playgroud)
它会导致以下错误:
NoMethodError: undefined method `merge!' for "--disable-editing":String
Run Code Online (Sandbox Code Playgroud)
任何人都有关于如何成功做到这一点的想法?是否有一个偶然存在的库可以满足我的需求?
所以我能够解决这个问题.它确实需要一个哈希,但它希望它是Mixlib :: CLI类的一个子集.因此,这是以编程方式通过刀创建客户端所需的代码:
class MyCLI
include Mixlib::CLI
end
#Add the option for disable editing. If you look in knife help, it's --disable-editing
MyCLI.option(:disable_editing, :long => "--disable-editing", :boolean => true)
#instantiate knife object and add the disable-editing flag to it
knife = Chef::Knife.new
knife.options=MyCLI.options
#set up client creation arguments and run
args = ['client', 'create', 'new_client', '--disable-editing' ]
new_client = Chef::Knife.run(args, MyCLI.options)
Run Code Online (Sandbox Code Playgroud)
它不是最优雅的解决方案,但它确实通过命令行使用刀并节省了必须使用系统调用来使用它.