How to puppetize gem install specific to puppet’s ruby

gempuppetruby

The Puppet Azure module requires specific gems to be installed. The directions https://github.com/puppetlabs/puppetlabs-azure show the following example:

/opt/puppetlabs/puppet/bin/gem install azure azure_mgmt_compute azure_mgmt_storage azure_mgmt_resources azure_mgmt_network  hocon retries --no-ri --no-rdoc

The specific gem binary /opt/puppetlabs/puppet/bin/gem is used to ensure the gems are installed to the puppet install directory and use puppet's bundled version of ruby.

Puppet's package resource has a gem provider but it will install using the system ruby.

How can I puppetize the gem install specific to puppet? I prefer not to use an exec resource. Is there a resource for puppet-agent to install gems?

Best Answer

I found the answer on https://docs.puppetlabs.com/references/4.0.0/type.html#package-provider-puppet_gem

New for Puppet v4 is a puppet_gem provider to the package resource.

package { 'azure' :
  provider => 'puppet_gem',
  ensure   => installed,
}