чтобы разрешить мне более легкой отладке моих поставщиков, я иногда хочу использовать 'команду' в своем собственном коде 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'],{})
но вывод является пробелом...
Какие-либо идеи?
Я не верю, что это может сработать.
Метод commands основан на другом методе класса провайдера , который, наконец, использует meta_def для создания метода, который затем становится доступным внутри класса Provider .
Таким образом, функциональность доступна только фактическим подклассам Puppet :: Provider
.
] Я думаю, что лучший способ выполнить эту работу - это объединить всю функциональность в модуль миксина, который класс Provider
расширил бы
. Тогда ваши собственные классы тоже могут это сделать. (Хотя не уверен, действительно ли это будет работать в Puppet.)