在 ruby​​ 类中调用 Knife

2024-01-03

我想围绕刀创建一个很好的包装类,以允许程序以可读的方式运行刀命令。我目前正在尝试使用 Chef gem 中的 Knife.rb 文件作为取得成功的指南。但是,我在关闭编辑器时遇到问题。如果我运行以下代码:

    require 'chef/knife'
    knife = Chef::Knife.new
    knife.run(['client', 'create', 'new-client'], '--disable-editing')

它会导致以下错误:

    NoMethodError: undefined method `merge!' for "--disable-editing":String

有人对如何成功做到这一点有任何想法吗?是否有一个已经存在的库可以满足我的需要?


所以我能够解决这个问题。它确实需要一个哈希值,但它希望它成为 Mixlib::CLI 类的子集。因此,这是通过 Knife 以编程方式创建客户端所需的代码:

    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)

这不是最优雅的解决方案,但它确实通过命令行使用 Knife,并且使某人不必使用系统调用来使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ruby​​ 类中调用 Knife 的相关文章

随机推荐