在 Puppet 提供程序之外使用“命令”ruby Puppet 函数

在 Puppet 提供程序之外使用“命令”ruby Puppet 函数

为了让我更容易地调试我的提供商,我有时想在我自己的 ruby​​ 代码中使用“命令”。

试图弄清楚问题出在哪里。

以下是我在提供程序中使用它的方式:

commands :wget    => '/usr/bin/wget',
         :cp      => '/bin/cp'

稍后我可以用简单的命令运行该命令:

wget('http://example.com')

现在,我尝试这样做:

something = Puppet::Provider.commands({:wget => '/usr/bin/wget'})
something.wget('http://example.com')

但是,我明白了:

test.rb:15: undefined method `wget' for {:wget=>"/usr/bin/wget"}:Hash (NoMethodError)

我也尝试过跑步:

wget = Puppet::Provider::Command.new('wget', '/usr/bin/wget', Puppet::Util, Puppet::Util::Execution)
puts Puppet::Util::Execution.execute(['wget','http://example.com'],{})

但输出是空白的......

有任何想法吗?

答案1

我不相信这会起作用。

命令方法依赖于另一种提供程序类方法最后使用meta_def创建方法,然后可以使用在 Provider 类中

因此该功能仅适用于 的实际子类Puppet::Provider

我认为,实现这一目标的最佳方法是将整个功能拉入 mixin 模块,然后类Provider就可以extend实现。那么你自己的类也可以做到这一点。(不过,不确定这在 Puppet 中是否真的有效。)

相关内容