Skip to main content

gem_package resource

This page is generated from the Chef source code.
To suggest a change, edit the gem_package.rb file and submit a pull request to the Chef repository.

Resources Reference page

Use the gem_package resource to manage gem packages that are only included in recipes. When a gem is installed from a local file, it must be added to the node using the remote_file or cookbook_file resources.


The gem_package resource must be specified as gem_package and cannot be shortened to package in a recipe.


The chef_gem and gem_package resources are both used to install Ruby gems. For any machine on which Chef Infra Client is installed, there are two instances of Ruby. One is the standard, system-wide instance of Ruby and the other is a dedicated instance that is available only to Chef Infra Client. Use the chef_gem resource to install gems into the instance of Ruby that is dedicated to Chef Infra Client. Use the gem_package resource to install all other gems (i.e. install gems system-wide).


The full syntax for all of the properties that are available to the gem_package resource is:

gem_package 'name' do
  clear_sources               true, false
  gem_binary                  String
  include_default_source      true, false
  options                     String, Hash, Array
  package_name                String
  source                      String, Array
  timeout                     String, Integer
  version                     String
  action                      Symbol # defaults to :install if not specified


  • gem_package is the resource.
  • name is the name given to the resource block.
  • action identifies which steps Chef Infra Client will take to bring the node into the desired state.
  • clear_sources, gem_binary, include_default_source, options, package_name, source, timeout, and version are the properties available to this resource.


The gem_package resource has the following actions:

Default. Install a package. If a version is specified, install the specified version of the package.
This resource block does not act unless notified by another resource to take action. Once notified, this resource block either runs immediately or is queued up to run at the end of a Chef Infra Client run.
Purge a package. This action typically removes the configuration files as well as the package.
Reconfigure a package. This action requires a response file.
Remove a package.
Install a package and/or ensure that a package is the latest version.


The gem_package resource has the following properties:

Ruby Type: true, false | Default Value: false

Set to true to download a gem from the path specified by the source property (and not from RubyGems).

Ruby Type: String

The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by Chef Infra Client will be used.

Ruby Type: true, false

Set to false to not include Chef::Config[:rubygems_url] in the sources.

New in Chef Client 13.0

Ruby Type: String, Hash, Array

Options for the gem install, either a Hash or a String. When a hash is given, the options are passed to, and the gem will be installed via the gems API. When a String is given, the gem will be installed by shelling out to the gem command. Using a Hash of options with an explicit gem_binary will result in undefined behavior.

Ruby Type: String

An optional property to set the package name if it differs from the resource block’s name.

Ruby Type: String, Array

Optional. The URL, or list of URLs, at which the gem package is located. This list is added to the source configured in Chef::Config[:rubygems_url] (see also include_default_source) to construct the complete list of rubygems sources. Users in an ‘airgapped’ environment should set Chef::Config[:rubygems_url] to their local RubyGems mirror.

Ruby Type: String, Integer

The amount of time (in seconds) to wait before timing out.

Ruby Type: String

The version of a package to be installed or upgraded.


The following examples demonstrate various approaches for using the gem_package resource in recipes:

The following examples demonstrate various approaches for using the gem_package resource in recipes:

Install a gem file from the local file system

gem_package 'loofah' do
  source '/tmp/loofah-2.7.0.gem'
  action :install

Use the ignore_failure common attribute

gem_package 'syntax' do
  action :install
  ignore_failure true