From 109c6b750751d1c5cd216ad2f09258cf512c4c9e Mon Sep 17 00:00:00 2001 From: Larry Smith Jr Date: Sat, 3 Dec 2016 17:51:25 -0500 Subject: Addressed issue #6 Signed-off-by: Larry Smith Jr --- Vagrant/roles/ansible-rabbitmq/README.md | 118 ++++++++++++++++ Vagrant/roles/ansible-rabbitmq/Vagrantfile | 63 +++++++++ Vagrant/roles/ansible-rabbitmq/ansible.cfg | 3 + Vagrant/roles/ansible-rabbitmq/bootstrap.sh | 14 ++ Vagrant/roles/ansible-rabbitmq/bootstrap.yml | 152 +++++++++++++++++++++ Vagrant/roles/ansible-rabbitmq/cleanup.sh | 8 ++ Vagrant/roles/ansible-rabbitmq/defaults/main.yml | 28 ++++ Vagrant/roles/ansible-rabbitmq/handlers/main.yml | 6 + Vagrant/roles/ansible-rabbitmq/meta/main.yml | 137 +++++++++++++++++++ Vagrant/roles/ansible-rabbitmq/playbook.yml | 25 ++++ Vagrant/roles/ansible-rabbitmq/requirements.yml | 2 + Vagrant/roles/ansible-rabbitmq/tasks/debian.yml | 35 +++++ Vagrant/roles/ansible-rabbitmq/tasks/fedora.yml | 39 ++++++ Vagrant/roles/ansible-rabbitmq/tasks/main.yml | 21 +++ .../ansible-rabbitmq/tasks/rabbitmq_clustering.yml | 70 ++++++++++ .../ansible-rabbitmq/tasks/rabbitmq_ha_config.yml | 44 ++++++ .../ansible-rabbitmq/tasks/rabbitmq_users.yml | 27 ++++ Vagrant/roles/ansible-rabbitmq/tasks/redhat.yml | 40 ++++++ .../ansible-rabbitmq/templates/erlang.cookie.j2 | 1 + Vagrant/roles/ansible-rabbitmq/vars/main.yml | 2 + 20 files changed, 835 insertions(+) create mode 100644 Vagrant/roles/ansible-rabbitmq/README.md create mode 100644 Vagrant/roles/ansible-rabbitmq/Vagrantfile create mode 100644 Vagrant/roles/ansible-rabbitmq/ansible.cfg create mode 100755 Vagrant/roles/ansible-rabbitmq/bootstrap.sh create mode 100644 Vagrant/roles/ansible-rabbitmq/bootstrap.yml create mode 100755 Vagrant/roles/ansible-rabbitmq/cleanup.sh create mode 100644 Vagrant/roles/ansible-rabbitmq/defaults/main.yml create mode 100644 Vagrant/roles/ansible-rabbitmq/handlers/main.yml create mode 100644 Vagrant/roles/ansible-rabbitmq/meta/main.yml create mode 100644 Vagrant/roles/ansible-rabbitmq/playbook.yml create mode 100644 Vagrant/roles/ansible-rabbitmq/requirements.yml create mode 100644 Vagrant/roles/ansible-rabbitmq/tasks/debian.yml create mode 100644 Vagrant/roles/ansible-rabbitmq/tasks/fedora.yml create mode 100644 Vagrant/roles/ansible-rabbitmq/tasks/main.yml create mode 100644 Vagrant/roles/ansible-rabbitmq/tasks/rabbitmq_clustering.yml create mode 100644 Vagrant/roles/ansible-rabbitmq/tasks/rabbitmq_ha_config.yml create mode 100644 Vagrant/roles/ansible-rabbitmq/tasks/rabbitmq_users.yml create mode 100644 Vagrant/roles/ansible-rabbitmq/tasks/redhat.yml create mode 100644 Vagrant/roles/ansible-rabbitmq/templates/erlang.cookie.j2 create mode 100644 Vagrant/roles/ansible-rabbitmq/vars/main.yml (limited to 'Vagrant/roles') diff --git a/Vagrant/roles/ansible-rabbitmq/README.md b/Vagrant/roles/ansible-rabbitmq/README.md new file mode 100644 index 0000000..03cd1aa --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/README.md @@ -0,0 +1,118 @@ +Role Name +========= + +Installs rabbitmq https://www.rabbitmq.com/ (Configurable...HA and Clustering ready) + +Requirements +------------ + +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 +rabbitmq_config_ha: false #defines if rabbitmq ha should be configured...define here or in group_vars/group +rabbitmq_enable_clustering: false #defines if setting up a rabbitmq cluster...define here or in group_vars/group +rabbitmq_erlang_cookie: 'LSKNKBELKPSTDBBCHETL' #define erlang cookie for cluster...define here or in group_vars/group +rabbitmq_erlang_cookie_file: '/var/lib/rabbitmq/.erlang.cookie' +rabbitmq_config: + - queue_name: logstash + durable: true + exchange_name: logstash + 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... +group_vars/rabbitmq-cluster-nodes +```` +--- +rabbitmq_enable_clustering: true +rabbitmq_config_ha: false +rabbitmq_master: ans-test-1 +```` + +Dependencies +------------ + +None + +Example Playbook +---------------- + +```` +--- +- 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: + - rabbitmq_config_ha: true + - rabbitmq_enable_clustering: true + - pri_domain_name: 'test.vagrant.local' + - rabbitmq_master: 'node0' + roles: + - role: ansible-rabbitmq + tasks: +```` + +License +------- + +BSD + +Author Information +------------------ + +Larry Smith Jr. +- @mrlesmithjr +- http://everythingshouldbevirtual.com +- mrlesmithjr [at] gmail.com diff --git a/Vagrant/roles/ansible-rabbitmq/Vagrantfile b/Vagrant/roles/ansible-rabbitmq/Vagrantfile new file mode 100644 index 0000000..9c68a3d --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/Vagrantfile @@ -0,0 +1,63 @@ +# -*- 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 diff --git a/Vagrant/roles/ansible-rabbitmq/ansible.cfg b/Vagrant/roles/ansible-rabbitmq/ansible.cfg new file mode 100644 index 0000000..5a1e589 --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/ansible.cfg @@ -0,0 +1,3 @@ +[defaults] +host_key_checking = False +#roles_path = ../ diff --git a/Vagrant/roles/ansible-rabbitmq/bootstrap.sh b/Vagrant/roles/ansible-rabbitmq/bootstrap.sh new file mode 100755 index 0000000..7bcf8b0 --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/bootstrap.sh @@ -0,0 +1,14 @@ +#!/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 diff --git a/Vagrant/roles/ansible-rabbitmq/bootstrap.yml b/Vagrant/roles/ansible-rabbitmq/bootstrap.yml new file mode 100644 index 0000000..702b540 --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/bootstrap.yml @@ -0,0 +1,152 @@ +--- +- 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 diff --git a/Vagrant/roles/ansible-rabbitmq/cleanup.sh b/Vagrant/roles/ansible-rabbitmq/cleanup.sh new file mode 100755 index 0000000..a049429 --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/cleanup.sh @@ -0,0 +1,8 @@ +#!/bin/bash +vagrant destroy -f +if [ -d host_vars ]; then + rm -rf host_vars +fi +if [ -d .vagrant ]; then + rm -rf .vagrant +fi diff --git a/Vagrant/roles/ansible-rabbitmq/defaults/main.yml b/Vagrant/roles/ansible-rabbitmq/defaults/main.yml new file mode 100644 index 0000000..ad22ead --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/defaults/main.yml @@ -0,0 +1,28 @@ +--- +# defaults file for ansible-rabbitmq +rabbitmq_config: + - queue_name: 'logstash' + durable: true + exchange_name: logstash + type: 'direct' + routing_key: 'logstash' + tags: 'ha-mode=all,ha-sync-mode=automatic' +rabbitmq_config_ha: false #defines if rabbitmq ha should be configured...define here or in group_vars/group +rabbitmq_debian_repo: 'deb http://www.rabbitmq.com/debian/ testing main' +rabbitmq_debian_repo_key: 'https://www.rabbitmq.com/rabbitmq-release-signing-key.asc' +rabbitmq_enable_clustering: false #defines if setting up a rabbitmq cluster...define here or in group_vars/group +rabbitmq_erlang_cookie: 'LSKNKBELKPSTDBBCHETL' #define erlang cookie for cluster...define here or in group_vars/group +rabbitmq_erlang_cookie_file: '/var/lib/rabbitmq/.erlang.cookie' +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 diff --git a/Vagrant/roles/ansible-rabbitmq/handlers/main.yml b/Vagrant/roles/ansible-rabbitmq/handlers/main.yml new file mode 100644 index 0000000..259ce1c --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/handlers/main.yml @@ -0,0 +1,6 @@ +--- +# handlers file for ansible-rabbitmq +- name: restart rabbitmq-server + service: + name: "rabbitmq-server" + state: restarted diff --git a/Vagrant/roles/ansible-rabbitmq/meta/main.yml b/Vagrant/roles/ansible-rabbitmq/meta/main.yml new file mode 100644 index 0000000..b25c818 --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/meta/main.yml @@ -0,0 +1,137 @@ +--- +galaxy_info: + author: Larry Smith Jr. + description: Installs rabbitmq https://www.rabbitmq.com/ (Configurable...HA and Clustering ready) + #company: your company (optional) + # Some suggested licenses: + # - BSD (default) + # - MIT + # - GPLv2 + # - GPLv3 + # - Apache + # - CC-BY + license: license (GPLv2, CC-BY, etc) + min_ansible_version: 1.2 + # + # Below are all platforms currently available. Just uncomment + # the ones that apply to your role. If you don't see your + # platform on this list, let us know and we'll get it added! + # + platforms: + - name: EL + versions: + # - all + # - 5 + # - 6 + - 7 + #- name: GenericUNIX + # versions: + # - all + # - any + - name: Fedora + versions: + # - all + # - 16 + # - 17 + # - 18 + # - 19 + # - 20 + # - 21 + - 22 + - 23 + #- name: Windows + # versions: + # - all + # - 2012R2 + #- name: SmartOS + # versions: + # - all + # - any + #- name: opensuse + # versions: + # - all + # - 12.1 + # - 12.2 + # - 12.3 + # - 13.1 + # - 13.2 + #- name: Amazon + # versions: + # - all + # - 2013.03 + # - 2013.09 + #- name: GenericBSD + # versions: + # - all + # - any + #- name: FreeBSD + # versions: + # - all + # - 8.0 + # - 8.1 + # - 8.2 + # - 8.3 + # - 8.4 + # - 9.0 + # - 9.1 + # - 9.1 + # - 9.2 + - name: Ubuntu + versions: + # - all + # - lucid + # - maverick + # - natty + # - oneiric + # - precise + # - quantal + # - raring + # - saucy + - trusty + # - utopic + # - vivid + #- name: SLES + # versions: + # - all + # - 10SP3 + # - 10SP4 + # - 11 + # - 11SP1 + # - 11SP2 + # - 11SP3 + #- name: GenericLinux + # versions: + # - all + # - any + #- name: Debian + # versions: + # - all + # - etch + # - jessie + # - lenny + # - squeeze + # - wheezy + # + # Below are all categories currently available. Just as with + # the platforms above, uncomment those that apply to your role. + # + categories: + #- cloud + #- cloud:ec2 + #- cloud:gce + #- cloud:rax + - clustering + #- database + #- database:nosql + #- database:sql + #- development + #- monitoring + #- networking + #- packaging + - system + #- web +dependencies: [] + # List your role dependencies here, one per line. Only + # dependencies available via galaxy should be listed here. + # Be sure to remove the '[]' above if you add dependencies + # to this list. diff --git a/Vagrant/roles/ansible-rabbitmq/playbook.yml b/Vagrant/roles/ansible-rabbitmq/playbook.yml new file mode 100644 index 0000000..498c829 --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/playbook.yml @@ -0,0 +1,25 @@ +--- +- 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: + - rabbitmq_config_ha: true + - rabbitmq_enable_clustering: true + - pri_domain_name: 'test.vagrant.local' + - rabbitmq_master: 'node0' + roles: + - role: ansible-rabbitmq + tasks: diff --git a/Vagrant/roles/ansible-rabbitmq/requirements.yml b/Vagrant/roles/ansible-rabbitmq/requirements.yml new file mode 100644 index 0000000..a1f51cb --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/requirements.yml @@ -0,0 +1,2 @@ +--- +- src: https://github.com/mrlesmithjr/ansible-rabbitmq.git diff --git a/Vagrant/roles/ansible-rabbitmq/tasks/debian.yml b/Vagrant/roles/ansible-rabbitmq/tasks/debian.yml new file mode 100644 index 0000000..a031ead --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/tasks/debian.yml @@ -0,0 +1,35 @@ +--- +- name: debian | adding RabbitMQ public GPG key to the apt repo + apt_key: + url: "{{ rabbitmq_debian_repo_key }}" + state: present + +- name: debian | adding RabbitMQ repo + apt_repository: + repo: "{{ rabbitmq_debian_repo }}" + state: present + register: "rabbitmq_repo_added" + +- name: debian | updating apt cache + apt: + update_cache: yes + when: rabbitmq_repo_added.changed + +- name: debian | installing RabbitMQ server + apt: + name: "{{ item }}" + state: present + with_items: + - rabbitmq-server + +- name: debian | enabling the RabbitMQ Management Console + rabbitmq_plugin: + names: rabbitmq_management + state: enabled + notify: restart rabbitmq-server + +- name: debian | ensuring that the RabbitMQ service is running + service: + name: rabbitmq-server + state: started + enabled: yes diff --git a/Vagrant/roles/ansible-rabbitmq/tasks/fedora.yml b/Vagrant/roles/ansible-rabbitmq/tasks/fedora.yml new file mode 100644 index 0000000..3d92963 --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/tasks/fedora.yml @@ -0,0 +1,39 @@ +--- +- name: fedora | installing pre-reqs + dnf: + name: "{{ item }}" + state: present + with_items: + - wget + +- name: fedora | installing erlang + dnf: + name: "erlang" + state: present + +- name: fedora | adding RabbitMQ public GPG key + rpm_key: + key: "{{ rabbitmq_redhat_repo_key }}" + state: present + +- name: fedora | downloading RabbitMQ + get_url: + url: "{{ rabbitmq_redhat_url }}/{{ rabbitmq_redhat_package }}" + dest: "/opt/{{ rabbitmq_redhat_package }}" + +- name: fedora | installing RabbitMQ + dnf: + name: "/opt/{{ rabbitmq_redhat_package }}" + state: present + +- name: fedora | starting and enabling RabbitMQ service + service: + name: "rabbitmq-server" + state: started + enabled: yes + +- name: fedora | enabling the RabbitMQ Management Console + rabbitmq_plugin: + names: rabbitmq_management + state: enabled + notify: restart rabbitmq-server diff --git a/Vagrant/roles/ansible-rabbitmq/tasks/main.yml b/Vagrant/roles/ansible-rabbitmq/tasks/main.yml new file mode 100644 index 0000000..bd82f93 --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/tasks/main.yml @@ -0,0 +1,21 @@ +# tasks file for ansible-rabbitmq +- include: debian.yml + when: ansible_os_family == "Debian" + +- include: redhat.yml + when: ansible_distribution == "CentOS" or ansible_distribution == "Red Hat Enterprise Linux" + +- include: fedora.yml + when: ansible_distribution == "Fedora" + +- name: checking to see if already clustered + stat: path=/etc/rabbitmq/clustered + register: clustered + +- include: rabbitmq_clustering.yml + when: rabbitmq_enable_clustering and (clustered.stat.exists != True) + +- include: rabbitmq_ha_config.yml + when: rabbitmq_config_ha and rabbitmq_enable_clustering + +- include: rabbitmq_users.yml diff --git a/Vagrant/roles/ansible-rabbitmq/tasks/rabbitmq_clustering.yml b/Vagrant/roles/ansible-rabbitmq/tasks/rabbitmq_clustering.yml new file mode 100644 index 0000000..9dece46 --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/tasks/rabbitmq_clustering.yml @@ -0,0 +1,70 @@ +--- +- name: rabbitmq_clustering | stopping rabbitmq app + command: rabbitmqctl stop_app + +- name: rabbitmq_clustering | resetting rabbitmq app + command: rabbitmqctl reset + +- name: rabbitmq_clustering | stopping rabbitmq-server + service: + name: rabbitmq-server + state: stopped + +#- name: grabbing erlang cookie +# shell: cat /var/lib/rabbitmq/.erlang.cookie +# register: rabbitmq_erlang_cookie +# when: inventory_hostname == "{{ rabbitmq_master }}" + +- name: rabbitmq_clustering | copy erlang cookie + template: + src: erlang.cookie.j2 + dest: "{{ rabbitmq_erlang_cookie_file }}" + owner: rabbitmq + group: rabbitmq + mode: 0400 + backup: yes #backing up in case the need to recover +# when: inventory_hostname != "{{ rabbitmq_master }}" + +- name: rabbitmq_clustering | restarting rabbitmq-server on master + service: + name: rabbitmq-server + state: restarted + when: inventory_hostname == "{{ rabbitmq_master }}" + +- name: rabbitmq_clustering | starting rabbitmq app on master + command: rabbitmqctl start_app + register: cluster_master + when: inventory_hostname == "{{ rabbitmq_master }}" + +- name: rabbitmq_clustering | sending sigterm to any running rabbitmq processes + shell: pkill -u rabbitmq || true + when: inventory_hostname != "{{ rabbitmq_master }}" + +- name: rabbitmq_clustering | restarting rabbitmq-server + service: + name: rabbitmq-server + state: restarted + when: inventory_hostname != "{{ rabbitmq_master }}" + +- name: rabbitmq_clustering | stopping rabbitmq app + command: rabbitmqctl stop_app + when: inventory_hostname != "{{ rabbitmq_master }}" + +- name: rabbitmq_clustering | resetting rabbitmq app + command: rabbitmqctl reset + when: inventory_hostname != "{{ rabbitmq_master }}" + +- name: rabbitmq_clustering | joining rabbitmq cluster + command: rabbitmqctl join_cluster 'rabbit@{{ rabbitmq_master }}' + register: cluster_joined + when: inventory_hostname != "{{ rabbitmq_master }}" + +- name: rabbitmq_clustering | starting rabbitmq app + command: rabbitmqctl start_app + when: inventory_hostname != "{{ rabbitmq_master }}" + +- name: rabbitmq_clustering | marking as clustered + file: + path: /etc/rabbitmq/clustered + state: touch + when: cluster_master.changed or cluster_joined.changed diff --git a/Vagrant/roles/ansible-rabbitmq/tasks/rabbitmq_ha_config.yml b/Vagrant/roles/ansible-rabbitmq/tasks/rabbitmq_ha_config.yml new file mode 100644 index 0000000..8811b6d --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/tasks/rabbitmq_ha_config.yml @@ -0,0 +1,44 @@ +--- +- name: rabbitmq_ha_config | checking if rabbitmqadmin is installed + stat: + path: /usr/sbin/rabbitmqadmin + register: rabbitmqadmin_check + +- name: rabbitmq_ha_config | install rabbitMQ admin + shell: wget http://guest:guest@localhost:15672/cli/rabbitmqadmin + when: not rabbitmqadmin_check.stat.exists + +- name: rabbitmq_ha_config | moving the rabbitMQ Admin + shell: mv rabbitmqadmin /usr/sbin + when: not rabbitmqadmin_check.stat.exists + +- name: rabbitmq_ha_config | making executable rabbitMQ Admin + shell: chmod +x /usr/sbin/rabbitmqadmin + notify: restart rabbitmq-server + when: not rabbitmqadmin_check.stat.exists + +- name: rabbitmq_ha_config | creating queue(s) + command: rabbitmqadmin declare queue name={{ item.queue_name }} durable={{ item.durable|lower }} + run_once: true + with_items: "{{ rabbitmq_config }}" + +- name: rabbitmq_ha_config | setting up ha on queue(s) + rabbitmq_policy: + name: "ha-all" + pattern: "{{ item.queue_name }}" + tags: "{{ item.tags }}" + state: present + run_once: true + with_items: "{{ rabbitmq_config }}" + +- name: rabbitmq_ha_config | creating exchange(s) + command: rabbitmqadmin declare exchange name={{ item.exchange_name }} type={{ item.type }} + run_once: true + with_items: "{{ rabbitmq_config }}" + when: item.exchange_name is defined + +- name: rabbitmq_ha_config | creating binding(s) + command: rabbitmqadmin declare binding source={{ item.exchange_name }} destination_type="queue" destination={{ item.queue_name }} routing_key={{ item.routing_key }} + run_once: true + with_items: "{{ rabbitmq_config }}" + when: item.exchange_name is defined diff --git a/Vagrant/roles/ansible-rabbitmq/tasks/rabbitmq_users.yml b/Vagrant/roles/ansible-rabbitmq/tasks/rabbitmq_users.yml new file mode 100644 index 0000000..8bce8b2 --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/tasks/rabbitmq_users.yml @@ -0,0 +1,27 @@ +--- +- name: rabbitmq_users | creating rabbitmq users + rabbitmq_user: + name: "{{ item.name }}" + password: "{{ item.password }}" + vhost: "{{ item.vhost }}" + configure_priv: "{{ item.configure_priv }}" + read_priv: "{{ item.read_priv }}" + write_priv: "{{ item.write_priv }}" + tags: "{{ item.tags }}" + state: present + with_items: "{{ rabbitmq_users }}" + when: (rabbitmq_enable_clustering is defined and not rabbitmq_enable_clustering) or rabbitmq_enable_clustering is not defined + +- name: rabbitmq_users | creating rabbitmq users + rabbitmq_user: + name: "{{ item.name }}" + password: "{{ item.password }}" + vhost: "{{ item.vhost }}" + configure_priv: "{{ item.configure_priv }}" + read_priv: "{{ item.read_priv }}" + write_priv: "{{ item.write_priv }}" + tags: "{{ item.tags }}" + state: present + run_once: yes + with_items: "{{ rabbitmq_users }}" + when: (rabbitmq_enable_clustering is defined and rabbitmq_enable_clustering) diff --git a/Vagrant/roles/ansible-rabbitmq/tasks/redhat.yml b/Vagrant/roles/ansible-rabbitmq/tasks/redhat.yml new file mode 100644 index 0000000..484597d --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/tasks/redhat.yml @@ -0,0 +1,40 @@ +--- +- name: redhat | installing pre-reqs + yum: + name: "{{ item }}" + state: present + with_items: + - epel-release + - wget + +- name: redhat | installing erlang + yum: + 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 + yum: + 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 diff --git a/Vagrant/roles/ansible-rabbitmq/templates/erlang.cookie.j2 b/Vagrant/roles/ansible-rabbitmq/templates/erlang.cookie.j2 new file mode 100644 index 0000000..edd141f --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/templates/erlang.cookie.j2 @@ -0,0 +1 @@ +{{ rabbitmq_erlang_cookie }} diff --git a/Vagrant/roles/ansible-rabbitmq/vars/main.yml b/Vagrant/roles/ansible-rabbitmq/vars/main.yml new file mode 100644 index 0000000..5977bc8 --- /dev/null +++ b/Vagrant/roles/ansible-rabbitmq/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for ansible-rabbitmq -- cgit v1.2.3