Skip to content
Development repository for Chef cookbook RabbitMQ
Latest commit de57b31 @jjasghar Merge pull request #337 from jjasghar/4.6.0
v4.6.0 prep work
Failed to load latest commit information.
attributes Enable chef setting for tcp_listen linger option
libraries Allow more flexibility in the ssl cipher formats
providers Merge pull request #331 from gerr1t/patch-1
recipes NO-REF Check chef client version before calling sensitive
resources Support rabbitmq_user with multiple vhosts.
spec Merge pull request #317 from XiangYao/NO-REF
templates/default Fix the missing comma in rabbitmq config
test Merge remote-tracking branch 'opscode/master' into fix_open_file_limit
.gitignore inital enforcement of Gemfile.lock removed cluster from cloud
.kitchen.yml Needed some logic around the apt-force
.rubocop.yml update rubocop
.travis.yml Updated .travis.yml
Berksfile updated and also added dependancies for metadata.rb v4.6.0 prep work add irc channel for testing
Gemfile remove version check on chefspec
Gemfile.lock inital enforcement of Gemfile.lock
Guardfile getting rubocop happy to travis passes
LICENSE Preparing repository for splitting cookbooks into their own repos. Improves the SSL section by giving examples
Rakefile updated rakefile updating opscode to chef
metadata.rb v4.6.0 prep work

rabbitmq Cookbook

Build Status

This is a cookbook for managing RabbitMQ with Chef. It is intended for RabbitMQ 2.6.1 or later releases. With Chef we have adopted support >= 11.14.0 for chef-client, and leaning heavily on chef-client 12 and above.


This cookbook depends on the erlang cookbook.

The release was tested with ( version), from the kitchen.yml.

  • CentOS 6.5
  • CentOS 7.0
  • Ubuntu 12.04
  • Ubuntu 14.04
  • Debian 7.0



Installs rabbitmq-server from via direct download of the installation package or using the distribution version. Depending on your distribution, the provided version may be quite old so they are disabled by default. If you want to use the distro version, set the attribute ['rabbitmq']['use_distro_version'] to true. You may override the download URL attribute ['rabbitmq']['package'] if you wish to use a local mirror.

The cluster recipe is now combined with the default and will now auto-cluster. Set the ['rabbitmq']['cluster'] attribute to true, ['rabbitmq']['cluster_disk_nodes'] array of node@host strings that describe which you want to be disk nodes and then set an alphanumeric string for the erlang_cookie.

To enable SSL turn ssl to true and set the paths to your cacert, cert and key files.

node['rabbitmq']['ssl'] = true
node['rabbitmq']['ssl_cacert'] = '/path/to/cacert.pem'
node['rabbitmq']['ssl_cert'] = '/path/to/cert.pem'
node['rabbitmq']['ssl_key'] = '/path/to/key.pem'

A full list of SSL attributes can be found in attributes/default.rb.


Default values and usage information of important attributes are shown below. More attributes are documented in metadata.rb.

Username and Password

The default username and password are guest/guest:

['rabbitmq']['default_user'] = 'guest'

['rabbitmq']['default_pass'] = 'guest'

Loopback Users

By default, the guest user can only connect via localhost. This is the behavior of RabbitMQ when the loopback_users configuration is not specified in it's configuration file. Also, by default, this cookbook does not specify loopback_users in the configuration file:

['rabbitmq']['loopback_users'] = nil

If you wish to allow the default guest user to connect remotely, you can change this to []. If instead you wanted to allow just the user 'foo' to connect over loopback, you would set this value to ["foo"]. More information can be found here:


Installs the rabbitmq_management and rabbitmq_management_visualiser plugins. To use https connection to management console, turn ['rabbitmq']['web_console_ssl'] to true. The SSL port for web management console can be configured by setting attribute ['rabbitmq']['web_console_ssl_port'], whose default value is 15671.


Enables any plugins listed in the node['rabbitmq']['enabled_plugins'] and disables any listed in node['rabbitmq']['disabled_plugins'] attributes.


Downloads, installs and enables pre-built community plugins binaries.

To specify a plugin, set the attribute node['rabbitmq']['community_plugins']['PLUGIN_NAME'] to 'DOWNLOAD_URL'. For example, to use the RabbitMQ priority queue plugin, set the attribute node['rabbitmq']['community_plugins']['rabbitmq_priority_queue'] to ''.


Enables any policies listed in the node['rabbitmq']['policies'] and disables any listed in node['rabbitmq']['disabled_policies'] attributes.


Enables any users listed in the node['rabbitmq']['enabled_users'] and disables any listed in node['rabbitmq']['disabled_users'] attributes.


Enables any vhosts listed in the node['rabbitmq']['virtualhosts'] and disables any listed in node['rabbitmq']['disabled_virtualhosts'] attributes.


Configure the cluster between the nodes in the node['rabbitmq']['clustering']['cluster_nodes'] attribute. It also, supports the auto or manual clustering.

Attributes that related to clustering

  • node['rabbitmq']['cluster'] : Default decision flag of clustering
  • node['rabbitmq']['erlang_cookie'] : Same erlang cookie is required for the cluster
  • node['rabbitmq']['clustering']['use_auto_clustering'] : Default is false. (manual clustering is default)
  • node['rabbitmq']['clustering']['cluster_name'] : Name of cluster. default value is nil. In case of nil or '' is set for cluster_name, first node name in node['rabbitmq']['clustering']['cluster_nodes'] attribute will be set for manual clustering. for the auto clustering, one of the node name will be set.
  • node['rabbitmq']['clustering']['cluster_nodes'] : List of cluster nodes. it required node name and cluster node type. please refer to example in below.

Attributes example

node['rabbitmq']['cluster'] = true
node['rabbitmq']['erlang_cookie'] = 'AnyAlphaNumericStringWillDo'
node['rabbitmq']['cluster_partition_handling'] = 'ignore'
node['rabbitmq']['clustering']['use_auto_clustering'] = false
node['rabbitmq']['clustering']['cluster_name'] = 'seoul_tokyo_newyork'
node['rabbitmq']['clustering']['cluster_nodes'] = [
        :name => 'rabbit@rabbit1',
        :type => 'disc'
        :name => 'rabbit@rabbit2',
        :type => 'ram'
        :name => 'rabbit@rabbit3',
        :type => 'disc'


There are 5 LWRPs for interacting with RabbitMQ.


Enables or disables a rabbitmq plugin. Plugins are not supported for releases prior to 2.7.0.

  • :enable enables a plugin
  • :disable disables a plugin


rabbitmq_plugin "rabbitmq_stomp" do
  action :enable
rabbitmq_plugin "rabbitmq_shovel" do
  action :disable


sets or clears a rabbitmq policy.

  • :set sets a policy
  • :clear clears a policy
  • :list lists policys


rabbitmq_policy "ha-all" do
  pattern "^(?!amq\\.).*"
  params ({"ha-mode"=>"all"})
  priority 1
  action :set
rabbitmq_policy "ha-all" do
  action :clear


Adds and deletes users, fairly simplistic permissions management.

  • :add adds a user with a password
  • :delete deletes a user
  • :set_permissions sets the permissions for a user, vhost is optional
  • :clear_permissions clears the permissions for a user
  • :set_tags set the tags on a user
  • :clear_tags clear any tags on a user
  • :change_password set the password for a user


rabbitmq_user "guest" do
  action :delete
rabbitmq_user "nova" do
  password "sekret"
  action :add
rabbitmq_user "nova" do
  vhost "/nova"
  permissions ".* .* .*"
  action :set_permissions
rabbitmq_user "joe" do
  tag "admin,lead"
  action :set_tags


Adds and deletes vhosts.

  • :add adds a vhost
  • :delete deletes a vhost


rabbitmq_vhost "/nova" do
  action :add


Join cluster, set cluster name and change cluster node type.

  • :join join in cluster as a manual clustering. node will join in first node of json string data.

    • cluster nodes data json format : Data should have all the cluster nodes information.
           "name" : "rabbit@rabbit1",
           "type" : "disc"
           "name" : "rabbit@rabbit2",
           "type" : "ram"
           "name" "rabbit@rabbit3",
           "type" : "disc"
  • :set_cluster_name set the cluster name.

  • :change_cluster_node_type change cluster type of node. disc or ram should be set.


rabbitmq_cluster '[{"name":"rabbit@rabbit1","type":"disc"},{"name":"rabbit@rabbit2","type":"ram"},{"name":"rabbit@rabbit3","type":"disc"}]' do
  action :join
rabbitmq_cluster '[{"name":"rabbit@rabbit1","type":"disc"},{"name":"rabbit@rabbit2","type":"ram"},{"name":"rabbit@rabbit3","type":"disc"}]' do
  cluster_name 'seoul_tokyo_newyork'
  action :set_cluster_name
rabbitmq_cluster '[{"name":"rabbit@rabbit1","type":"disc"},{"name":"rabbit@rabbit2","type":"ram"},{"name":"rabbit@rabbit3","type":"disc"}]' do
  action :change_cluster_node_type


For an already running cluster, these actions still require manual intervention:

  • changing the :erlang_cookie
  • turning :cluster from true to false

License & Authors

Copyright (c) 2009-2015, Chef Software, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.
Something went wrong with that request. Please try again.