Ensure hostnames are resolvable prior to clustering...either update /etc/hosts or ensure DNS is working.
+Vagrant
+-------
+
+Spin up a 3 node HA Cluster for testing...
+Install Ansible role on your host:
+````
+sudo ansible-galaxy install -r requirements.yml -f
+````
+Now spin up your environment...
+````
+vagrant up
+````
+When you are done testing, tear it all down...
+````
+./cleanup.sh
+````
+
Role Variables
--------------
````
+---
+# defaults file for ansible-rabbitmq
config_rabbitmq_ha: false #defines if rabbitmq ha should be configured...define here or in group_vars/group
enable_rabbitmq_clustering: false #defines if setting up a rabbitmq cluster...define here or in group_vars/group
-erlang_cookie: LSKNKBELKPSTDBBCHETL #define erlang cookie for cluster...define here or in group_vars/group
-erlang_cookie_file: /var/lib/rabbitmq/.erlang.cookie
+erlang_cookie: 'LSKNKBELKPSTDBBCHETL' #define erlang cookie for cluster...define here or in group_vars/group
+erlang_cookie_file: '/var/lib/rabbitmq/.erlang.cookie'
rabbitmq_config:
- queue_name: logstash
durable: true
type: direct
routing_key: logstash
tags: 'ha-mode=all,ha-sync-mode=automatic'
+rabbitmq_debian_repo: 'deb http://www.rabbitmq.com/debian/ testing main'
+rabbitmq_debian_repo_key: 'http://www.rabbitmq.com/rabbitmq-signing-key-public.asc'
rabbitmq_master: [] #defines the inventory host that should be considered master...define here or in group_vars/group
+rabbitmq_redhat_repo_key: 'https://www.rabbitmq.com/rabbitmq-signing-key-public.asc'
+rabbitmq_redhat_package: 'rabbitmq-server-{{ rabbitmq_redhat_version }}-1.noarch.rpm'
+rabbitmq_redhat_url: 'http://www.rabbitmq.com/releases/rabbitmq-server/v{{ rabbitmq_redhat_version }}'
+rabbitmq_redhat_version: '3.6.1'
+rabbitmq_users: #define admin user to create in order to login to WebUI
+ - name: rabbitmqadmin
+ password: rabbitmqadmin
+ vhost: /
+ configure_priv: '.*'
+ read_priv: '.*'
+ write_priv: '.*'
+ tags: 'administrator' #define comma separated list of tags to assign to user....management,policymaker,monitoring,administrator...required for management plugin. https://www.rabbitmq.com/management.html
````
example...
Dependencies
------------
-A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.
+None
Example Playbook
----------------
-Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:
+````
+---
+- hosts: all
+ become: true
+ vars:
+ - pri_domain_name: 'test.vagrant.local'
+ roles:
+ tasks:
+ - name: updating /etc/hosts
+ lineinfile:
+ dest: /etc/hosts
+ regexp: "^{{ hostvars[item].ansible_ssh_host }} {{ item }} {{ item }}.{{ pri_domain_name }}"
+ line: "{{ hostvars[item].ansible_ssh_host }} {{ item }} {{ item }}.{{ pri_domain_name }}"
+ state: present
+ with_items: groups['all']
- - hosts: servers
- roles:
- - { role: mrlesmithjr.rabbitmq }
+- hosts: all
+ become: true
+ vars:
+ - config_rabbitmq_ha: true
+ - enable_rabbitmq_clustering: true
+ - pri_domain_name: 'test.vagrant.local'
+ - rabbitmq_master: 'node0'
+ roles:
+ - role: ansible-rabbitmq
+ tasks:
+````
License
-------
--- /dev/null
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# All Vagrant configuration is done below. The "2" in Vagrant.configure
+# configures the configuration version (we support older styles for
+# backwards compatibility). Please don't change it unless you know what
+# you're doing.
+Vagrant.configure(2) do |config|
+ #Define if running desktop OS to yes otherwise no
+ Desktop = "no"
+ #Define the number of nodes to spin up
+ N = 3
+
+ #Iterate over nodes
+ (1..N).each do |node_id|
+ nid = (node_id - 1)
+
+ config.vm.define "node#{nid}" do |node|
+ node.vm.box = "mrlesmithjr/centos-7"
+ node.vm.provider "virtualbox" do |vb|
+ vb.memory = "1024"
+ vb.cpus = "1"
+ if Desktop == "yes"
+ vb.gui = true
+ vb.customize ["modifyvm", :id, "--graphicscontroller", "vboxvga"]
+ vb.customize ["modifyvm", :id, "--accelerate3d", "on"]
+ vb.customize ["modifyvm", :id, "--ioapic", "on"]
+ vb.customize ["modifyvm", :id, "--vram", "128"]
+ vb.customize ["modifyvm", :id, "--hwvirtex", "on"]
+ end
+ end
+ node.vm.hostname = "node#{nid}"
+ ### Define additional network adapters below
+ node.vm.network :private_network, ip: "192.168.202.#{200 + nid}"
+
+ ### Define port forwards below
+# node.vm.network "forwarded_port", guest: 80, host: "#{8080 + nid}"
+# node.vm.network "forwarded_port", guest: 3000, host: "#{3000 + nid}"
+
+ if node_id == N
+ node.vm.provision :shell, path: "bootstrap.sh", keep_color: "true" #runs initial shell script
+ node.vm.provision "ansible" do |ansible| #runs bootstrap Ansible playbook
+ ansible.limit = "all"
+ ansible.playbook = "bootstrap.yml"
+ end
+ node.vm.provision "ansible" do |ansible| #runs Ansible playbook for installing roles/executing tasks
+ ansible.limit = "all"
+ ansible.playbook = "playbook.yml"
+ ansible.groups = {
+ "test-nodes" => [
+ "node0",
+ "node1"
+ ],
+ "prod-nodes" => [
+ "node2"
+ ]
+ }
+ end
+ end
+
+ end
+ end
+end
--- /dev/null
+[defaults]
+host_key_checking = False
+#roles_path = ../
--- /dev/null
+#!/bin/bash
+if [ -f /etc/debian_version ]; then
+ codename="$(lsb_release -c | awk {'print $2}')"
+ if [ $codename == "vivid" ]; then
+ sudo apt-get update && sudo apt-get -y install python-simplejson
+ fi
+fi
+if [ -f /etc/redhat-release ]; then
+ codename="$(gawk -F= '/^NAME/{print $2}' /etc/os-release)"
+ if [ $codename == "Fedora" ]; then
+ sudo dnf -y install python-devel python-dnf python-pip && \
+ sudo dnf -y group install "C Development Tools and Libraries"
+ fi
+fi
--- /dev/null
+---
+- hosts: all
+ remote_user: vagrant
+ become: true
+ vars:
+ - host_vars_directory: './host_vars'
+ - host_vars_file: '{{ host_vars_directory }}/{{ inventory_hostname }}.yml'
+ - pri_domain_name: 'vagrant.local'
+ - ssh_key_path: '.vagrant/machines/{{ inventory_hostname }}/virtualbox/private_key'
+ - update_host_vars: true
+ roles:
+ tasks:
+ - name: updating apt cache (Debian)
+ apt:
+ update_cache: yes
+ cache_valid_time: 3600
+ when: ansible_os_family == "Debian"
+
+ - name: installing ansible pre-reqs (Debian)
+ apt:
+ name: "{{ item }}"
+ state: present
+ with_items:
+ - python-dev
+ - python-pip
+ when: ansible_os_family == "Debian"
+
+ - name: installing epel repo (RedHat)
+ yum:
+ name: "epel-release"
+ state: present
+ when: >
+ ansible_os_family == "RedHat" and
+ ansible_distribution != "Fedora"
+
+ - name: installing ansible pre-reqs (RedHat)
+ yum:
+ name: "{{ item }}"
+ state: present
+ with_items:
+ - python-devel
+ - python-dnf
+ - python-pip
+ when: >
+ ansible_os_family == "RedHat" and
+ ansible_distribution != "Fedora"
+
+ - name: installing ansible pre-reqs (Fedora)
+ dnf:
+ name: "{{ item }}"
+ state: present
+ with_items:
+ - gmp-devel
+ - python-crypto
+ - python-devel
+ - python-dnf
+ - python-pip
+ when: >
+ ansible_os_family == "RedHat" and
+ ansible_distribution == "Fedora"
+
+ - name: installing ansible
+ pip:
+ name: "ansible"
+ state: present
+
+ - name: ensuring host_vars directory exists
+ file:
+ path: "./host_vars"
+ state: directory
+ delegate_to: localhost
+ run_once: true
+ become: false
+ when: update_host_vars is defined and update_host_vars
+
+ - name: ensuring host file exists in host_vars
+ stat:
+ path: "{{ host_vars_file }}"
+ delegate_to: localhost
+ register: host_var
+ become: false
+ when: >
+ update_host_vars is defined and
+ update_host_vars
+
+ - name: creating missing host_vars
+ file:
+ path: "{{ host_vars_file }}"
+ state: touch
+ delegate_to: localhost
+ become: false
+ when: not host_var.stat.exists
+
+ - name: updating ansible_ssh_port
+ lineinfile:
+ dest: "{{ host_vars_file }}"
+ regexp: "^ansible_ssh_port{{ ':' }}"
+ line: "ansible_ssh_port{{ ':' }} 22"
+ delegate_to: localhost
+ become: false
+ when: >
+ (update_host_vars is defined and
+ update_host_vars) and
+ (ansible_eth1 is defined or
+ ansible_enp0s8 is defined)
+
+ - name: updating ansible_ssh_host
+ lineinfile:
+ dest: "{{ host_vars_file }}"
+ regexp: "^ansible_ssh_host{{ ':' }}"
+ line: "ansible_ssh_host{{ ':' }} {{ ansible_eth1.ipv4.address }}"
+ delegate_to: localhost
+ become: false
+ when: >
+ (update_host_vars is defined and
+ update_host_vars) and
+ ansible_eth1 is defined
+
+ - name: updating ansible_ssh_host
+ lineinfile:
+ dest: "{{ host_vars_file }}"
+ regexp: "^ansible_ssh_host{{ ':' }}"
+ line: "ansible_ssh_host{{ ':' }} {{ ansible_enp0s8.ipv4.address }}"
+ delegate_to: localhost
+ become: false
+ when: >
+ (update_host_vars is defined and
+ update_host_vars) and
+ ansible_enp0s8 is defined
+
+ - name: updating ansible_ssh_key
+ lineinfile:
+ dest: "{{ host_vars_file }}"
+ regexp: "^ansible_ssh_private_key_file{{ ':' }}"
+ line: "ansible_ssh_private_key_file{{ ':' }} {{ ssh_key_path }}"
+ delegate_to: localhost
+ become: false
+ when: >
+ update_host_vars is defined and
+ update_host_vars
+
+ - name: ensuring host_vars is yaml formatted
+ lineinfile:
+ dest: "{{ host_vars_file }}"
+ regexp: "---"
+ line: "---"
+ insertbefore: BOF
+ delegate_to: localhost
+ become: false
+ when: >
+ update_host_vars is defined and
+ update_host_vars
--- /dev/null
+#!/bin/bash
+vagrant destroy -f
+if [ -d host_vars ]; then
+ rm -rf host_vars
+fi
+if [ -d .vagrant ]; then
+ rm -rf .vagrant
+fi
# defaults file for ansible-rabbitmq
config_rabbitmq_ha: false #defines if rabbitmq ha should be configured...define here or in group_vars/group
enable_rabbitmq_clustering: false #defines if setting up a rabbitmq cluster...define here or in group_vars/group
-erlang_cookie: LSKNKBELKPSTDBBCHETL #define erlang cookie for cluster...define here or in group_vars/group
-erlang_cookie_file: /var/lib/rabbitmq/.erlang.cookie
+erlang_cookie: 'LSKNKBELKPSTDBBCHETL' #define erlang cookie for cluster...define here or in group_vars/group
+erlang_cookie_file: '/var/lib/rabbitmq/.erlang.cookie'
rabbitmq_config:
- queue_name: logstash
durable: true
type: direct
routing_key: logstash
tags: 'ha-mode=all,ha-sync-mode=automatic'
-rabbitmq_debian_repo: deb http://www.rabbitmq.com/debian/ testing main
-rabbitmq_debian_repo_key: http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
+rabbitmq_debian_repo: 'deb http://www.rabbitmq.com/debian/ testing main'
+rabbitmq_debian_repo_key: 'http://www.rabbitmq.com/rabbitmq-signing-key-public.asc'
rabbitmq_master: [] #defines the inventory host that should be considered master...define here or in group_vars/group
+rabbitmq_redhat_repo_key: 'https://www.rabbitmq.com/rabbitmq-signing-key-public.asc'
+rabbitmq_redhat_package: 'rabbitmq-server-{{ rabbitmq_redhat_version }}-1.noarch.rpm'
+rabbitmq_redhat_url: 'http://www.rabbitmq.com/releases/rabbitmq-server/v{{ rabbitmq_redhat_version }}'
+rabbitmq_redhat_version: '3.6.1'
rabbitmq_users: #define admin user to create in order to login to WebUI
- name: rabbitmqadmin
password: rabbitmqadmin
---
# handlers file for ansible-rabbitmq
- name: restart rabbitmq-server
- service: name=rabbitmq-server state=restarted
+ service:
+ name: "rabbitmq-server"
+ state: restarted
# platform on this list, let us know and we'll get it added!
#
platforms:
- #- name: EL
- # versions:
+ - name: EL
+ versions:
# - all
# - 5
# - 6
- # - 7
+ - 7
#- name: GenericUNIX
# versions:
# - all
--- /dev/null
+---
+- hosts: all
+ become: true
+ vars:
+ - pri_domain_name: 'test.vagrant.local'
+ roles:
+ tasks:
+ - name: updating /etc/hosts
+ lineinfile:
+ dest: /etc/hosts
+ regexp: "^{{ hostvars[item].ansible_ssh_host }} {{ item }} {{ item }}.{{ pri_domain_name }}"
+ line: "{{ hostvars[item].ansible_ssh_host }} {{ item }} {{ item }}.{{ pri_domain_name }}"
+ state: present
+ with_items: groups['all']
+
+- hosts: all
+ become: true
+ vars:
+ - config_rabbitmq_ha: true
+ - enable_rabbitmq_clustering: true
+ - pri_domain_name: 'test.vagrant.local'
+ - rabbitmq_master: 'node0'
+ roles:
+ - role: ansible-rabbitmq
+ tasks:
--- /dev/null
+---
+- src: https://github.com/mrlesmithjr/ansible-rabbitmq.git
- include: debian.yml
when: ansible_os_family == "Debian"
+- include: redhat.yml
+ when: ansible_os_family == "RedHat"
+
- name: checking to see if already clustered
stat: path=/etc/rabbitmq/clustered
register: clustered
--- /dev/null
+---
+- name: redhat | installing pre-reqs
+ yum:
+ name: "{{ item }}"
+ state: present
+ with_items:
+ - dnf
+ - epel-release
+ - python-dnf
+ when: >
+ ansible_distribution != "Fedora"
+
+- name: redhat | installing erlang
+ dnf:
+ name: "erlang"
+ state: present
+
+- name: redhat | adding RabbitMQ public GPG key
+ rpm_key:
+ key: "{{ rabbitmq_redhat_repo_key }}"
+ state: present
+
+- name: redhat | downloading RabbitMQ
+ get_url:
+ url: "{{ rabbitmq_redhat_url }}/{{ rabbitmq_redhat_package }}"
+ dest: "/opt/{{ rabbitmq_redhat_package }}"
+
+- name: redhat | installing RabbitMQ
+ dnf:
+ name: "/opt/{{ rabbitmq_redhat_package }}"
+ state: present
+
+- name: redhat | starting and enabling RabbitMQ service
+ service:
+ name: "rabbitmq-server"
+ state: started
+ enabled: yes
+
+- name: redhat | enabling the RabbitMQ Management Console
+ rabbitmq_plugin:
+ names: rabbitmq_management
+ state: enabled
+ notify: restart rabbitmq-server