Ok, a maneira "fácil" é implementar o próprio provedor de pacotes. Felizmente, pode-se herdar tudo do gem-provider existente, sobrescrevendo apenas o próprio comando gem.
Como o rh-ruby22 da SCL é tão retardado, você não pode invocar seu ruby ou gem diretamente - sem definir LD_LIBRARY_PATH primeiro - nós criamos wrappers para eles em /usr/bin . O /usr/bin/gem2 , por exemplo, define o caminho da biblioteca (e PATH ) e, em seguida, exec s o% real/opt/rh/rh-ruby22/root/usr/bin/gem com seus próprios argumentos ( "$@" ).
Meu novo provedor usa o script gem2 wrapper para fazer o seu trabalho.
Eu criei o arquivo gem2.rb em modules/SOMEMODULE/lib/puppet/provider/package/ com o seguinte conteúdo (testado com o Puppet-3.8.7):
require 'puppet/provider/package'
Puppet::Type.type(:package).provide File.basename(__FILE__, ".rb"),
:parent => :gem, :source => :gem do
desc "Ruby Gem support using #{@name}-executable"
commands :gemcmd => @name.to_s
end
Embora eu esperasse, minha implementação permitiria especificar o comando gem como um parâmetro no manifesto puppet, é impossível fazer isso sem reescrever completamente o gem-provider existente. Meu caminho é muito mais fácil e eficiente.
Como bônus, copiar o arquivo para outro nome (como gem19.rb ) criará automaticamente o novo provedor - apenas certifique-se de que gem19 esteja no $PATH .
O módulo, sob o qual você salvará este arquivo, pode ser qualquer módulo usado pela (s) máquina (s) que precisam do novo provedor.