Search code examples
rabbitmqpuppet

How can I use 'puppetlabs/rabbitmq' module to set up HA rabbitMQ?


I am in no ways an expert on RabbitMQ, but I am trying to puppetize the setup of a RabbitMQ cluster. In the documentation a co-worker of mine wrote I need to implement the equivalent of executing ...

rabbitmqctl set_policy HA '^(?!amq.).*' '{"ha-mode": "all"}

... in my puppet manifest. I tried this ...

  rabbitmq_policy { 'HA':
      pattern    => '^(?!amq.).*',
      priority   => 0,
      applyto    => 'all',
      definition => {
         'ha-mode'      => 'all',
         'ha-sync-mode' => 'automatic',
      },
  }

... but I get this error when I do my "puppet agent -t" on my rabbit code:

Error: Failed to apply catalog: Parameter name failed on Rabbitmq_policy[HA]: Invalid value "HA". Valid values match /^\S+@\S+$/. at /etc/puppetlabs/code/environments/production/modules/core/wraprabbitmq/manifests/init.pp:59

What am I doing wrong? Also do I have/need to have something like this ...

rabbitmq_vhost { 'myvhost':
  ensure => present,
}

... if I am setting up HA rabbitMQ?

Update: Thanks Matt.

I am using this now:

   rabbitmq_policy { 'HA@/':
      pattern    => '^(?!amq.).*',
      priority   => 0,
      applyto    => 'all',
      definition => {
         'ha-mode'      => 'all',
         'ha-sync-mode' => 'automatic',
      },
   }

Also I did not need to use this:

rabbitmq_vhost { 'myvhost':
  ensure => present,
}

Solution

  • Checking the source code here: https://github.com/puppetlabs/puppetlabs-rabbitmq/blob/master/lib/puppet/type/rabbitmq_policy.rb#L21-L24

    we see that the name parameter for that type needs to be 'combination of policy@vhost to create policy for.' Your value of 'HA' does not follow that nomenclature and thus fails the regexp check of /^\S+@\S+$/.

    You need to put a name following the format of 'policy@vhost' for the rabbitmq_policy resource and then your code will compile.