Используйте функцию марионетки рубина 'команд' за пределами марионеточного поставщика

чтобы разрешить мне более легкой отладке моих поставщиков, я иногда хочу использовать 'команду' в своем собственном коде 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'],{})

но вывод является пробелом...

Какие-либо идеи?

0
задан 13 September 2014 в 17:34
1 ответ

Я не верю, что это может сработать.

Метод commands основан на другом методе класса провайдера , который, наконец, использует meta_def для создания метода, который затем становится доступным внутри класса Provider .

Таким образом, функциональность доступна только фактическим подклассам Puppet :: Provider .

] Я думаю, что лучший способ выполнить эту работу - это объединить всю функциональность в модуль миксина, который класс Provider расширил бы . Тогда ваши собственные классы тоже могут это сделать. (Хотя не уверен, действительно ли это будет работать в Puppet.)

1
ответ дан 4 December 2019 в 17:11

Теги

Похожие вопросы