Initial commit
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
new file mode 100644
index 0000000..14a17fe
--- /dev/null
+++ b/CHANGELOG.rst
@@ -0,0 +1,6 @@
+rabbitmq formula
+================
+
+0.0.1 (2015-08-03)
+
+- Initial formula setup
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8e80b12
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,13 @@
+Copyright (c) 2014-2015 tcp cloud a. s.
+
+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
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
\ No newline at end of file
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..7bacebe
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,142 @@
+=========================
+RabbitMQ messaging system
+=========================
+
+RabbitMQ is a complete and highly reliable enterprise messaging system based on the emerging AMQP standard.
+
+Sample pillars
+==============
+
+Standalone Broker
+-----------------
+
+RabbitMQ as AMQP broker with admin user and vhosts
+
+.. code-block:: yaml
+
+ rabbitmq:
+ server:
+ enabled: true
+ bind:
+ address: 0.0.0.0
+ port: 5672
+ secret_key: rabbit_master_cookie
+ admin:
+ name: adminuser
+ password: pwd
+ plugins:
+ - amqp_client
+ - rabbitmq_management
+ virtual_hosts:
+ - enabled: true
+ host: '/monitor'
+ user: 'monitor'
+ password: 'password'
+
+RabbitMQ as a Stomp broker
+
+.. code-block:: yaml
+
+ rabbitmq:
+ server:
+ enabled: true
+ secret_key: rabbit_master_cookie
+ bind:
+ address: 0.0.0.0
+ port: 5672
+ virtual_hosts:
+ - enabled: true
+ host: '/monitor'
+ user: 'monitor'
+ password: 'password'
+ plugins:
+ - rabbitmq_stomp
+
+RabbitMQ cluster
+----------------
+
+RabbitMQ as base cluster node
+
+.. code-block:: yaml
+
+ rabbitmq:
+ server:
+ enabled: true
+ bind:
+ address: 0.0.0.0
+ port: 5672
+ secret_key: rabbit_master_cookie
+ admin:
+ name: adminuser
+ password: pwd
+ cluster:
+ enabled: true
+ role: master
+ mode: disc
+ members:
+ - name: openstack1
+ host: 10.10.10.212
+ - name: openstack2
+ host: 10.10.10.213
+
+HA Queues definition
+
+.. code-block:: yaml
+
+ rabbitmq:
+ server:
+ enabled: true
+ ...
+ virtual_hosts:
+ - enabled: true
+ host: '/monitor'
+ user: 'monitor'
+ password: 'password'
+ policies:
+ - name: HA
+ pattern: '^(?!amq\.).*'
+ definition: '{"ha-mode": "all"}'
+
+Usage
+=====
+
+Check cluster status, example shows running cluster with 3 nodes: ctl-1, ctl-2, ctl-3
+
+.. code-block:: yaml
+
+ > rabbitmqctl cluster_status
+
+ Cluster status of node 'rabbit@ctl-1' ...
+ [{nodes,[{disc,['rabbit@ctl-1','rabbit@ctl-2','rabbit@ctl-3']}]},
+ {running_nodes,['rabbit@ctl-3','rabbit@ctl-2','rabbit@ctl-1']},
+ {partitions,[]}]
+ ...done.
+
+Setup management user.
+
+.. code-block:: yaml
+
+ > rabbitmqctl add_vhost vhost
+ > rabbitmqctl add_user user alive
+ > rabbitmqctl set_permissions -p vhost user ".*" ".*" ".*"
+ > rabbitmqctl set_user_tags user management
+
+EPD process is Erlang Port Mapper Daemon. It's a feature of the Erlang runtime that helps Erlang nodes to find each other. It's a pretty tiny thing and doesn't contain much state (other than "what Erlang nodes are running on this system?") so it's not a huge deal for it to still be running.
+Although it's running as user rabbitmq, it was started automatically by the Erlang VM when we started. We've considered adding "epmd -kill" to our shutdown script - but that would break any other Erlang apps running on the system; it's more "global" than RabbitMQ.
+
+Read more
+=========
+
+* http://www.rabbitmq.com/admin-guide.html
+* https://github.com/saltstack/salt-contrib/blob/master/states/rabbitmq_plugins.py
+* http://docs.saltstack.com/ref/states/all/salt.states.rabbitmq_user.html
+* http://stackoverflow.com/questions/14699873/how-to-reset-user-for-rabbitmq-management
+* http://www.rabbitmq.com/memory.html
+
+Clustering
+==========
+
+* http://www.rabbitmq.com/clustering.html#auto-config
+* https://github.com/jesusaurus/hpcs-salt-state/tree/master/rabbitmq
+* http://gigisayfan.blogspot.cz/2012/06/rabbit-mq-clustering-python-fabric.html
+* http://docwiki.cisco.com/wiki/OpenStack_Havana_Release:_High-Availability_Manual_Deployment_Guide#RabbitMQ_Installation
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..3b04cfb
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.2
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..0aaac23
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,11 @@
+salt-formula-rabbitmq (0.2) trusty; urgency=medium
+
+ * First public release
+
+ -- Filip Pytloun <filip.pytloun@tcpcloud.eu> Tue, 06 Oct 2015 16:38:52 +0200
+
+salt-formula-rabbitmq (0.1) trusty; urgency=medium
+
+ * Initial release
+
+ -- Jakub Pavlik <jakub.pavlik@tcpcloud.eu> Thu, 13 Aug 2015 23:23:41 +0200
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..a83a260
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,15 @@
+Source: salt-formula-rabbitmq
+Maintainer: Jakub Pavlik <jakub.pavlik@tcpcloud.eu>
+Section: admin
+Priority: optional
+Build-Depends: debhelper (>= 9)
+Standards-Version: 3.9.6
+Homepage: http://www.tcpcloud.eu
+Vcs-Browser: https://github.com/tcpcloud/salt-formula-rabbitmq
+Vcs-Git: https://github.com/tcpcloud/salt-formula-rabbitmq.git
+
+Package: salt-formula-rabbitmq
+Architecture: all
+Depends: ${misc:Depends}, salt-master, reclass
+Description: RabbitMQ Salt formula
+ Install and configure RabbitMQ server and client.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..5813386
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,15 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: salt-formula-rabbitmq
+Upstream-Contact: Jakub Pavlik <jakub.pavlik@tcpcloud.eu>
+Source: https://github.com/tcpcloud/salt-formula-rabbitmq
+
+Files: *
+Copyright: 2014-2015 tcp cloud
+License: Apache-2.0
+ Copyright (C) 2014-2015 tcp cloud
+ .
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ .
+ On a Debian system you can find a copy of this license in
+ /usr/share/common-licenses/Apache-2.0.
diff --git a/debian/docs b/debian/docs
new file mode 100644
index 0000000..d585829
--- /dev/null
+++ b/debian/docs
@@ -0,0 +1,3 @@
+README.rst
+CHANGELOG.rst
+VERSION
diff --git a/debian/install b/debian/install
new file mode 100644
index 0000000..1050092
--- /dev/null
+++ b/debian/install
@@ -0,0 +1,2 @@
+rabbitmq/* /usr/share/salt-formulas/env/rabbitmq/
+metadata/service/* /usr/share/salt-formulas/reclass/service/rabbitmq/
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..abde6ef
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,5 @@
+#!/usr/bin/make -f
+
+%:
+ dh $@
+
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..89ae9db
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (native)
diff --git a/metadata/service/server/cluster.yml b/metadata/service/server/cluster.yml
new file mode 100644
index 0000000..c7c9ec2
--- /dev/null
+++ b/metadata/service/server/cluster.yml
@@ -0,0 +1,61 @@
+applications:
+- rabbitmq
+parameters:
+ rabbitmq:
+ server:
+ enabled: true
+ secret_key: ${_param:rabbitmq_secret_key}
+ memory:
+ vm_high_watermark: 0.8
+ bind:
+ address: ${_param:cluster_local_address}
+ port: 5672
+ plugins:
+ - amqp_client
+ - rabbitmq_management
+ admin:
+ name: admin
+ password: ${_param:rabbitmq_admin_password}
+ host:
+ '/openstack':
+ enabled: true
+ user: openstack
+ password: ${_param:rabbitmq_openstack_password}
+ policies:
+ - name: HA
+ pattern: '^(?!amq\.).*'
+ definition: '{"ha-mode": "all"}'
+ cluster:
+ enabled: true
+ name: openstack
+ role: ${_param:rabbitmq_cluster_role}
+ master: ${_param:cluster_node01_hostname}
+ mode: disc
+ members:
+ - name: ${_param:cluster_node01_hostname}
+ host: ${_param:cluster_node01_address}
+ - name: ${_param:cluster_node02_hostname}
+ host: ${_param:cluster_node02_address}
+ - name: ${_param:cluster_node03_hostname}
+ host: ${_param:cluster_node03_address}
+ haproxy:
+ proxy:
+ listen:
+ rabbitmq_cluster:
+ type: rabbitmq
+ binds:
+ - address: ${_param:cluster_vip_address}
+ port: 5672
+ servers:
+ - name: ctl01
+ host: ${_param:cluster_node01_address}
+ port: 5672
+ params: check inter 5000 rise 2 fall 3
+ - name: ctl02
+ host: ${_param:cluster_node02_address}
+ port: 5672
+ params: backup check inter 5000 rise 2 fall 3
+ - name: ctl03
+ host: ${_param:cluster_node03_address}
+ port: 5672
+ params: backup check inter 5000 rise 2 fall 3
diff --git a/metadata/service/server/local.yml b/metadata/service/server/local.yml
new file mode 100644
index 0000000..36f8c27
--- /dev/null
+++ b/metadata/service/server/local.yml
@@ -0,0 +1,20 @@
+applications:
+- rabbitmq
+parameters:
+ _param:
+ rabbitmq_admin_user: admin
+ rabbitmq:
+ server:
+ enabled: true
+ secret_key: ${_param:rabbitmq_secret_key}
+ memory:
+ vm_high_watermark: 0.8
+ bind:
+ address: 127.0.0.1
+ port: 5672
+ plugins:
+ - amqp_client
+ - rabbitmq_management
+ admin:
+ name: ${_param:rabbitmq_admin_user}
+ password: ${_param:rabbitmq_admin_password}
diff --git a/metadata/service/server/single.yml b/metadata/service/server/single.yml
new file mode 100644
index 0000000..ce6a9d7
--- /dev/null
+++ b/metadata/service/server/single.yml
@@ -0,0 +1,20 @@
+applications:
+- rabbitmq
+parameters:
+ _param:
+ rabbitmq_admin_user: admin
+ rabbitmq:
+ server:
+ enabled: true
+ secret_key: ${_param:rabbitmq_secret_key}
+ memory:
+ vm_high_watermark: 0.8
+ bind:
+ address: 0.0.0.0
+ port: 5672
+ plugins:
+ - amqp_client
+ - rabbitmq_management
+ admin:
+ name: ${_param:rabbitmq_admin_user}
+ password: ${_param:rabbitmq_admin_password}
diff --git a/rabbitmq/cluster.sls b/rabbitmq/cluster.sls
new file mode 100644
index 0000000..50c6735
--- /dev/null
+++ b/rabbitmq/cluster.sls
@@ -0,0 +1,52 @@
+{%- from "rabbitmq/map.jinja" import cluster with context %}
+{%- if cluster.enabled %}
+
+include:
+- linux.network.host
+- rabbitmq.server.service
+
+rabbitmq_dirs:
+ file.directory:
+ - names:
+ - /root/rabbitmq/flags
+ - mode: 700
+ - user: root
+ - group: root
+ - makedirs: true
+
+{% if cluster.get('role', 'slave') == 'master' %}
+
+rabbitmq_cluster_init:
+ cmd.run:
+ - names:
+ - rabbitmqctl set_cluster_name {{ cluster.get('name', 'rabbitmq') }}
+ - unless: test -e /root/rabbitmq/flags/cluster-installed
+ - require:
+ - file: rabbitmq_dirs
+ - service: rabbitmq_service
+
+{% else %}
+
+rabbit@master:
+ rabbitmq_cluster.join:
+ - user: rabbit
+ - host: {{ cluster.master }}
+ {%- if cluster.get('mode', 'disc') == 'ram' %}
+ - ram_node: true
+ {%- endif %}
+ - require:
+ - file: rabbitmq_dirs
+ - service: rabbitmq_service
+
+{%- endif %}
+
+rabbitmq_cluster_init_final:
+ cmd.run:
+ - names:
+ - touch /root/rabbitmq/flags/cluster-installed
+ - unless: test -e /root/rabbitmq/flags/cluster-installed
+ - require:
+ - file: rabbitmq_dirs
+ - service: rabbitmq_service
+
+{%- endif %}
\ No newline at end of file
diff --git a/rabbitmq/files/default b/rabbitmq/files/default
new file mode 100644
index 0000000..b26a724
--- /dev/null
+++ b/rabbitmq/files/default
@@ -0,0 +1,13 @@
+{%- from "rabbitmq/map.jinja" import server with context %}
+# Managed by Salt
+
+# This file is sourced by /etc/init.d/rabbitmq-server. Its primary
+# reason for existing is to allow adjustment of system limits for the
+# rabbitmq-server process.
+#
+# Maximum number of open file handles. This will need to be increased
+# to handle many simultaneous connections. Refer to the system
+# documentation for ulimit (in man bash) for more information.
+#
+
+ulimit -n {{ server.ulimit }}
\ No newline at end of file
diff --git a/rabbitmq/files/rabbitmq.config b/rabbitmq/files/rabbitmq.config
new file mode 100644
index 0000000..c5e268a
--- /dev/null
+++ b/rabbitmq/files/rabbitmq.config
@@ -0,0 +1,52 @@
+{%- from "rabbitmq/map.jinja" import server with context -%}
+[
+ {#
+ {kernel,
+ [{inet_dist_listen_min, 65535},
+ {inet_dist_listen_max, 65535},
+ {inet_default_listen_options, [{nodelay, true},
+ {sndbuf, 65535},
+ {recbuf, 65535},
+ {keepalive, true}
+ ]
+ },
+ {inet_default_connect_options, [{nodelay, true},
+ {keepalive, true}
+ ]
+ }
+ ]
+ },#}{#
+ {mnesia, [{dump_log_write_threshold, 1000}]}, #}
+ {rabbit, [{vm_memory_high_watermark, {{ server.memory.vm_high_watermark }}},
+ {memory_alarms, true},
+ {disk_free_limit, 50000000},
+{#- {disk_free_limit, {#{mem_relative, 1.0}}, #}
+ {%- if pillar.rabbitmq.cluster is defined %}
+ {%- from "rabbitmq/map.jinja" import cluster with context %}
+ {cluster_partition_handling, autoheal},
+ {tcp_listen_options,
+ [binary,
+ {packet, raw},
+ {reuseaddr, true},
+ {backlog, 128},
+ {nodelay, true},
+ {exit_on_close, false},
+ {keepalive, true}
+ ]
+ },
+ {cluster_nodes, {[{% for node in cluster.members %}'rabbit@{{ node.name }}'{% if not loop.last %}, {% endif %}{% endfor %}], {{ cluster.mode }}}},
+ {%- endif %}
+ {loopback_users, []},
+ {tcp_listeners, [{"{{ server.bind.address }}",{{ server.bind.port }}}]}
+ {%- if server.ssl is defined %},
+ {ssl_listeners, [5671]},
+ {ssl_options, [{cacertfile,"/etc/rabbitmq/ssl/cacert.pem"},
+ {certfile,"/etc/rabbitmq/ssl/cert.pem"},
+ {keyfile,"/etc/rabbitmq/ssl/key.pem"},
+ {verify, verify_none},
+ {fail_if_no_peer_cert,false}]
+ }
+ {% endif %}
+ ]
+ }
+].
diff --git a/rabbitmq/files/rabbitmq_com.gpg b/rabbitmq/files/rabbitmq_com.gpg
new file mode 100644
index 0000000..64cfab4
--- /dev/null
+++ b/rabbitmq/files/rabbitmq_com.gpg
@@ -0,0 +1,30 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+mQGiBEaOQ/IRBACs/n609zN+OzlK9qDkFWwYKfPG+BlgqBj5MSy0XE2K8cE3bWSV
+2WftTe/TGEfW0hknXt1PyBla0cnO9Up1xCn142vo8bvUug8WjrxLQBBiAf11FAOR
+dt9roGe4IWw/Lakgb88re09ZYKmOL9H7MEpvMqtjdWjFSq4zeeGa8rGEswCgnQLb
+ZD/MNlUNQwQVCs+vVRdgpzcD+QELSc2EeYl4tef0NiUaZQt+mjFTs3DjQNDTjXao
+ETVAqECx4kavcshx5tSE5JbbQPIMiUgh0h9J3z3uZsBVnx6P82aW/QTw+jLhsQry
+/i3Z/+pS66mk6EWhAAYF/SPVqM/06BZh0ZvUmeG9WGGJXD9CUN1Wfi2mt42L2zhT
+xg3uBACoIs5/GORi0H2i+blLiFSxTroXw+TdxiP+mfjdPho0oXJQTljXBgG70VfX
+XW9sWsYtekqXBsmwMcbCZTjZGul/8jAUlUoYfthRw9KpP9N8Q7wB8Flx9jEv0M0H
+tV1KTrLuXNZvEAB1sECMa7RRrV1yO4wyYDsOXiZNTL6rYugOU7QwUmFiYml0TVEg
+UmVsZWFzZSBTaWduaW5nIEtleSA8aW5mb0ByYWJiaXRtcS5jb20+iGAEExECACAF
+AkaOQ/ICGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRD3uM6mBW6OVkymAJ0R
+6MwiZNRuTAttgYf1Xe7dK7HpzACfZioV/LqnDh7XvcTJEl+r4GB19by5Ag0ERo5D
++xAIAKu1ZxtAZjwlNLb0L5uwrEP7nTbRTNUYoEtE8+CNDSLLlmRIvBriKYNGicnz
+Ebq2kDnAoyH38ACIMNayrkqc6I4l3BD2sv7zPZCd4qAbyFCu6gnewTANTWkVuH60
+R65QQ8pM8sM+VZAMSoMkDSP4u248xOzFyGgVYuuWuR/sIRcaA02FW9TGvZQ7fNoF
+rf6UbKSYkjpY767IW8q0b68vKzSLw0GQvH+dsvhaj80hjKJ06+IZ9Gdi/b4+AIT2
+YWyWmrHo2QhnUmsarNdtusesQGQtiYgZw95PJJkzR0AttuPPfPNGLYZtVJenvOCC
+jsK5uUL3/eEQ3UWGs+BKEyA/qLMAAwUH/2kIFCdgCw2DnL87TO+vruhGjsM7NjXf
+57F4ojTdblFd6AerjRhMgICdzCF9WkFROdBSyQ/GajoNU81kbHZglxmKyKkVwWEb
+G7pmSIc/sk5Z7OP/zrg4h8ZGzvMbRy0XLf86lQhbDE3AcHMeJCcShIWAHAbygnYW
+j0KRhZiyqxqx4mrZQDZEWI7S1G9YNvgu1GS9EEKEpmxDEOME9nJZLi9o7mTeD1QV
+TyOzWHkpQ42QcgrFuG7RMxDaQK6bdinNTl8aPmMoPamGzotSt4aMoVMiNxjatnlH
+pqQ5UJlqbB5FGLnwJ0773WzgRdxIwSIxkFhL/Mq4agf4an8151kqcZCISQQYEQIA
+CQUCRo5D+wIbDAAKCRD3uM6mBW6OVhLmAKCYY152B/10n7aUNKejs92NsNAnPACf
+ZwbDOKBXGfkCPuRx5j/AGneASNU=
+=Ry+c
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/rabbitmq/files/sensu.conf b/rabbitmq/files/sensu.conf
new file mode 100644
index 0000000..6868655
--- /dev/null
+++ b/rabbitmq/files/sensu.conf
@@ -0,0 +1,156 @@
+{%- from "rabbitmq/map.jinja" import server with context -%}
+{%- from "linux/map.jinja" import network with context -%}
+{%- if server.bind.address == '0.0.0.0' %}
+{% if grains.ipv4[0] == '127.0.0.1' %}{% set address = grains.ipv4[1] %}{% else %}{% set address = grains.ipv4[0] %}{% endif %}
+{%- else %}
+{%- set address = server.bind.address %}
+{%- endif %}
+local_rabbitmq_server_proc:
+ command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_procs -C beam.smp -u rabbitmq -c 1:2"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - local-rabbitmq-server
+{%- if server.bind.address == '127.0.0.1' %}
+local_rabbitmq_server_tcp_{{ network.fqdn }}:
+ command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_tcp -H 127.0.0.1 -p 5672"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - {{ network.fqdn|replace('.', '-') }}
+{%- else %}
+remote_rabbitmq_server_tcp_{{ network.fqdn }}:
+ command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_tcp -H {% if grains.ipv4[0] == '127.0.0.1' %}{{ grains.ipv4[1] }}{% else %}{{ grains.ipv4[0] }}{% endif %} -p 5672"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+{%- endif %}
+{#
+remote_rabbitmq_alive_{{ address }}:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-amqp-alive.rb -w {{ address }}"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_mistral_alive:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-amqp-alive.rb -w {{ address }} -v %2Fmistral -u mistral --password {{ server.admin.password }}"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_murano_alive:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-amqp-alive.rb -w {{ address }} -v %2Fmurano -u murano --password {{ server.admin.password }}"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_openstack_alive:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-amqp-alive.rb -w {{ address }} -v %2Fopenstack -u {{ server.admin.name }} --password {{ server.admin.password }}"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_metrics_compute:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-queue-metrics.rb --host {{ address }} --user {{ server.admin.name }} --password {{ server.admin.password }} --filter compute"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_metrics_scheduler:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-queue-metrics.rb --host {{ address }} --user {{ server.admin.name }} --password {{ server.admin.password }} --filter scheduler"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_metrics_engine:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-queue-metrics.rb --host {{ address }} --user {{ server.admin.name }} --password {{ server.admin.password }} --filter engine"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_metrics_console:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-queue-metrics.rb --host {{ address }} --user {{ server.admin.name }} --password {{ server.admin.password }} --filter console"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_metrics_cinder_volume:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-queue-metrics.rb --host {{ address }} --user {{ server.admin.name }} --password {{ server.admin.password }} --filter cinder-volume"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_metrics_conductor:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-queue-metrics.rb --host {{ address }} --user {{ server.admin.name }} --password {{ server.admin.password }} --filter conductor"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_overview_metrics:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-overview-metrics.rb --host {{ address }} --user {{ server.admin.name }} --password {{ server.admin.password }}"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_metrics_contrail_device_manager:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-queue-metrics.rb --host {{ address }} --filter device_manager"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_metrics_contrail_vnc_config:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-queue-metrics.rb --host {{ address }} --filter vnc_config"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_metrics_openstack_reply:
+ command: "PATH=$PATH:/etc/sensu/plugins rabbitmq-queue-metrics.rb --host {{ address }} --user {{ server.admin.name }} --password {{ server.admin.password }} --filter reply"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_queue_scheduler:
+ command: "PATH=$PATH:/etc/sensu/plugins check-rabbitmq-queue.rb --host {{ address }} --password {{ server.admin.password }} --user {{ server.admin.name }} -w 50 -c 100 --queue scheduler"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_queue_engine:
+ command: "PATH=$PATH:/etc/sensu/plugins check-rabbitmq-queue.rb --host {{ address }} --password {{ server.admin.password }} --user {{ server.admin.name }} -w 50 -c 100 --queue engine"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_queue_console:
+ command: "PATH=$PATH:/etc/sensu/plugins check-rabbitmq-queue.rb --host {{ address }} --password {{ server.admin.password }} --user {{ server.admin.name }} -w 50 -c 100 --queue console"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_queue_cinder_volume:
+ command: "PATH=$PATH:/etc/sensu/plugins check-rabbitmq-queue.rb --host {{ address }} --password {{ server.admin.password }} --user {{ server.admin.name }} -w 50 -c 100 --queue cinder-volume"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_queue_cinder_scheduler:
+ command: "PATH=$PATH:/etc/sensu/plugins check-rabbitmq-queue.rb --host {{ address }} --password {{ server.admin.password }} --user {{ server.admin.name }} -w 50 -c 100 --queue cinder-scheduler"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_queue_conductor:
+ command: "PATH=$PATH:/etc/sensu/plugins check-rabbitmq-queue.rb --host {{ address }} --password {{ server.admin.password }} --user {{ server.admin.name }} -w 50 -c 100 --queue conductor"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+remote_rabbitmq_queue_compute:
+ command: "PATH=$PATH:/etc/sensu/plugins check-rabbitmq-queue.rb --host {{ address }} --password {{ server.admin.password }} --user {{ server.admin.name }} -w 50 -c 100 --queue compute"
+ interval: 60
+ occurrences: 1
+ subscribers:
+ - remote-network
+#}
\ No newline at end of file
diff --git a/rabbitmq/init.sls b/rabbitmq/init.sls
new file mode 100644
index 0000000..18903da
--- /dev/null
+++ b/rabbitmq/init.sls
@@ -0,0 +1,8 @@
+
+include:
+{% if pillar.rabbitmq.server is defined %}
+- rabbitmq.server
+{% endif %}
+{% if pillar.rabbitmq.cluster is defined %}
+- rabbitmq.cluster
+{% endif %}
diff --git a/rabbitmq/map.jinja b/rabbitmq/map.jinja
new file mode 100644
index 0000000..e55224d
--- /dev/null
+++ b/rabbitmq/map.jinja
@@ -0,0 +1,39 @@
+
+{% set server = salt['grains.filter_by']({
+ 'Arch': {
+ 'pkgs': ['rabbitmq'],
+ 'service': 'rabbitmq',
+ 'config_file': '/etc/rabbitmq/rabbitmq.config',
+ 'cookie_file': '/var/lib/rabbitmq/.erlang.cookie',
+ 'ulimit': 8192,
+ 'bind': {
+ 'address': '0.0.0.0',
+ 'port': '5672'
+ },
+ },
+ 'Debian': {
+ 'pkgs': ['rabbitmq-server'],
+ 'service': 'rabbitmq-server',
+ 'config_file': '/etc/rabbitmq/rabbitmq.config',
+ 'cookie_file': '/var/lib/rabbitmq/.erlang.cookie',
+ 'default_file': '/etc/default/rabbitmq-server',
+ 'ulimit': 8192,
+ 'bind': {
+ 'address': '0.0.0.0',
+ 'port': '5672'
+ },
+ },
+ 'RedHat': {
+ 'pkgs': ['rabbitmq-server'],
+ 'service': 'rabbitmq-server',
+ 'config_file': '/etc/rabbitmq/rabbitmq.config',
+ 'cookie_file': '/var/lib/rabbitmq/.erlang.cookie',
+ 'ulimit': 8192,
+ 'bind': {
+ 'address': '0.0.0.0',
+ 'port': '5672'
+ },
+ },
+}, merge=salt['pillar.get']('rabbitmq:server')) %}
+
+{% set cluster = salt['pillar.get']('rabbitmq:cluster') %}
diff --git a/rabbitmq/server/init.sls b/rabbitmq/server/init.sls
new file mode 100644
index 0000000..5467a3d
--- /dev/null
+++ b/rabbitmq/server/init.sls
@@ -0,0 +1,5 @@
+include:
+- rabbitmq.server.service
+- rabbitmq.server.plugin
+- rabbitmq.server.vhost
+- rabbitmq.server.user
\ No newline at end of file
diff --git a/rabbitmq/server/plugin.sls b/rabbitmq/server/plugin.sls
new file mode 100644
index 0000000..6b04cb2
--- /dev/null
+++ b/rabbitmq/server/plugin.sls
@@ -0,0 +1,17 @@
+{%- from "rabbitmq/map.jinja" import server with context %}
+{%- if server.enabled %}
+
+include:
+- rabbitmq.server.service
+
+{%- for plugin in server.get('plugins', []) %}
+
+rabbitmq_plugin_{{ plugin }}:
+ rabbitmq_plugin.enabled:
+ - name: {{ plugin }}
+ - require:
+ - service: rabbitmq_service
+
+{%- endfor %}
+
+{%- endif %}
\ No newline at end of file
diff --git a/rabbitmq/server/service.sls b/rabbitmq/server/service.sls
new file mode 100644
index 0000000..4a0b058
--- /dev/null
+++ b/rabbitmq/server/service.sls
@@ -0,0 +1,98 @@
+{%- from "rabbitmq/map.jinja" import server with context %}
+{%- if server.enabled %}
+
+rabbitmq_packages:
+ pkg.installed:
+ - names: {{ server.pkgs }}
+
+rabbitmq_config:
+ file.managed:
+ - name: {{ server.config_file }}
+ - source: salt://rabbitmq/files/rabbitmq.config
+ - template: jinja
+ - user: rabbitmq
+ - group: rabbitmq
+ - mode: 440
+ - require:
+ - pkg: rabbitmq_packages
+
+{%- if grains.os_family == 'Debian' %}
+
+rabbitmq_default_config:
+ file.managed:
+ - name: {{ server.default_file }}
+ - source: salt://rabbitmq/files/default
+ - template: jinja
+ - user: rabbitmq
+ - group: rabbitmq
+ - mode: 440
+ - require:
+ - pkg: rabbitmq_packages
+
+{%- endif %}
+
+{%- if server.secret_key is defined %}
+
+{%- if salt['cmd.run']('cat '+server.cookie_file) != server.secret_key %}
+
+sleep_before_rabbitmq_stop:
+ cmd.run:
+ - name: sleep 30
+ - user: root
+ - require:
+ - pkg: rabbitmq_packages
+ - file: rabbitmq_config
+{# - cmd: enable_mgmt_plugin #}
+
+stop_rabbitmq_service:
+ cmd.run:
+ - name: /etc/init.d/rabbitmq-server stop
+ - require:
+ - cmd: sleep_before_rabbitmq_stop
+
+/var/lib/rabbitmq:
+ file.directory
+
+rabbitmq_cookie:
+ file.managed:
+ - name: {{ server.cookie_file }}
+ - contents: {{ server.secret_key }}
+ - user: rabbitmq
+ - group: rabbitmq
+ - mode: 400
+ - require:
+ - file: /var/lib/rabbitmq
+ - cmd: stop_rabbitmq_service
+
+{%- if grains.os_family == 'Arch' %}
+
+/root/.erlang.cookie:
+ file.managed:
+ - contents: {{ server.secret_key }}
+ - user: root
+ - group: root
+ - mode: 400
+
+{%- endif %}
+
+sleep_before_rabbitmq_start:
+ cmd.run:
+ - name: sleep 30
+ - user: root
+ - require:
+ - cmd: stop_rabbitmq_service
+ - watch_in:
+ - service: rabbitmq_service
+
+{%- endif %}
+
+{%- endif %}
+
+rabbitmq_service:
+ service.running:
+ - enable: true
+ - name: {{ server.service }}
+ - watch:
+ - file: rabbitmq_config
+
+{%- endif %}
diff --git a/rabbitmq/server/user.sls b/rabbitmq/server/user.sls
new file mode 100644
index 0000000..dcd05ba
--- /dev/null
+++ b/rabbitmq/server/user.sls
@@ -0,0 +1,27 @@
+{%- from "rabbitmq/map.jinja" import server with context %}
+{%- if server.enabled %}
+
+include:
+- rabbitmq.server.service
+
+{%- if server.admin is defined %}
+
+rabbit_user_admin_present:
+ rabbitmq_user.present:
+ - name: {{ server.admin.name }}
+ - password: {{ server.admin.password }}
+ - force: True
+ - tags: management administrator
+ - perms:
+ {%- for vhost_name, vhost in server.get('host', {}).iteritems() %}
+ - '{{ vhost_name }}':
+ - '.*'
+ - '.*'
+ - '.*'
+ {%- endfor %}
+ - require:
+ - service: rabbitmq_service
+
+{%- endif %}
+
+{%- endif %}
\ No newline at end of file
diff --git a/rabbitmq/server/vhost.sls b/rabbitmq/server/vhost.sls
new file mode 100644
index 0000000..6e06ede
--- /dev/null
+++ b/rabbitmq/server/vhost.sls
@@ -0,0 +1,60 @@
+{%- from "rabbitmq/map.jinja" import server with context %}
+{%- if server.enabled %}
+
+{%- for host_name, host in server.get('host', {}).iteritems() %}
+
+{%- if host.enabled %}
+
+{%- if host_name != '/' %}
+rabbitmq_vhost_{{ host_name }}:
+ rabbitmq_vhost.present:
+ - name: {{ host_name }}
+ - require:
+ - service: rabbitmq_service
+ - require_in:
+ - rabbitmq_user: rabbitmq_user_{{ host.user }}
+{%- endif %}
+
+rabbitmq_user_{{ host.user }}:
+ rabbitmq_user.present:
+ - name: {{ host.user }}
+ - password: {{ host.password }}
+ - force: true
+ - perms:
+ - '{{ host_name }}':
+ - '.*'
+ - '.*'
+ - '.*'
+
+{%- for policy in host.get('policies', []) %}
+
+rabbitmq_policy_{{ host_name }}_{{ policy.name }}:
+ rabbitmq_policy.present:
+ - name: {{ policy.name }}
+ - pattern: {{ policy.pattern }}
+ - definition: {{ policy.definition|json }}
+ - vhost: {{ host_name }}
+ - require:
+ - service: rabbitmq_service
+
+{%- endfor %}
+
+{%- else %}
+
+rabbitmq_vhost_{{ host_name }}:
+ rabbitmq_vhost.absent:
+ - name: {{ host_name }}
+ - require:
+ - service: rabbitmq_service
+
+rabbitmq_user_{{ host.user }}:
+ rabbitmq_user.absent:
+ - name: {{ host.user }}
+ - require:
+ - service: rabbitmq_service
+
+{%- endif %}
+
+{%- endfor %}
+
+{%- endif %}