aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLarry Smith Jr <mrlesmithjr@gmail.coml>2016-03-03 15:28:30 -0500
committerLarry Smith Jr <mrlesmithjr@gmail.coml>2016-03-03 15:28:30 -0500
commit203ffcbfc31abb06c306d3adbde7e44dce9afca2 (patch)
tree752378316844898114f23c499bad0a2ae6f28cfc
parent93a297c59940c7cfe88afe0f9110af5b4be521e3 (diff)
downloadansible-rabbitmq-203ffcbfc31abb06c306d3adbde7e44dce9afca2.tar.gz
ansible-rabbitmq-203ffcbfc31abb06c306d3adbde7e44dce9afca2.tar.zst
ansible-rabbitmq-203ffcbfc31abb06c306d3adbde7e44dce9afca2.zip
Added support for CentOS and Vagrant
Signed-off-by: Larry Smith Jr <mrlesmithjr@gmail.coml>
-rw-r--r--README.md69
-rw-r--r--Vagrantfile63
-rw-r--r--ansible.cfg3
-rwxr-xr-xbootstrap.sh14
-rw-r--r--bootstrap.yml152
-rwxr-xr-xcleanup.sh8
-rw-r--r--defaults/main.yml12
-rw-r--r--handlers/main.yml4
-rw-r--r--meta/main.yml6
-rw-r--r--playbook.yml25
-rw-r--r--requirements.yml2
-rw-r--r--tasks/main.yml3
-rw-r--r--tasks/redhat.yml43
13 files changed, 389 insertions, 15 deletions
diff --git a/README.md b/README.md
index a4a7c45..8685452 100644
--- a/README.md
+++ b/README.md
@@ -8,14 +8,33 @@ Requirements
8 8
9Ensure hostnames are resolvable prior to clustering...either update /etc/hosts or ensure DNS is working. 9Ensure hostnames are resolvable prior to clustering...either update /etc/hosts or ensure DNS is working.
10 10
11Vagrant
12-------
13
14Spin up a 3 node HA Cluster for testing...
15Install Ansible role on your host:
16````
17sudo ansible-galaxy install -r requirements.yml -f
18````
19Now spin up your environment...
20````
21vagrant up
22````
23When you are done testing, tear it all down...
24````
25./cleanup.sh
26````
27
11Role Variables 28Role Variables
12-------------- 29--------------
13 30
14```` 31````
32---
33# defaults file for ansible-rabbitmq
15config_rabbitmq_ha: false #defines if rabbitmq ha should be configured...define here or in group_vars/group 34config_rabbitmq_ha: false #defines if rabbitmq ha should be configured...define here or in group_vars/group
16enable_rabbitmq_clustering: false #defines if setting up a rabbitmq cluster...define here or in group_vars/group 35enable_rabbitmq_clustering: false #defines if setting up a rabbitmq cluster...define here or in group_vars/group
17erlang_cookie: LSKNKBELKPSTDBBCHETL #define erlang cookie for cluster...define here or in group_vars/group 36erlang_cookie: 'LSKNKBELKPSTDBBCHETL' #define erlang cookie for cluster...define here or in group_vars/group
18erlang_cookie_file: /var/lib/rabbitmq/.erlang.cookie 37erlang_cookie_file: '/var/lib/rabbitmq/.erlang.cookie'
19rabbitmq_config: 38rabbitmq_config:
20 - queue_name: logstash 39 - queue_name: logstash
21 durable: true 40 durable: true
@@ -23,7 +42,21 @@ rabbitmq_config:
23 type: direct 42 type: direct
24 routing_key: logstash 43 routing_key: logstash
25 tags: 'ha-mode=all,ha-sync-mode=automatic' 44 tags: 'ha-mode=all,ha-sync-mode=automatic'
45rabbitmq_debian_repo: 'deb http://www.rabbitmq.com/debian/ testing main'
46rabbitmq_debian_repo_key: 'http://www.rabbitmq.com/rabbitmq-signing-key-public.asc'
26rabbitmq_master: [] #defines the inventory host that should be considered master...define here or in group_vars/group 47rabbitmq_master: [] #defines the inventory host that should be considered master...define here or in group_vars/group
48rabbitmq_redhat_repo_key: 'https://www.rabbitmq.com/rabbitmq-signing-key-public.asc'
49rabbitmq_redhat_package: 'rabbitmq-server-{{ rabbitmq_redhat_version }}-1.noarch.rpm'
50rabbitmq_redhat_url: 'http://www.rabbitmq.com/releases/rabbitmq-server/v{{ rabbitmq_redhat_version }}'
51rabbitmq_redhat_version: '3.6.1'
52rabbitmq_users: #define admin user to create in order to login to WebUI
53 - name: rabbitmqadmin
54 password: rabbitmqadmin
55 vhost: /
56 configure_priv: '.*'
57 read_priv: '.*'
58 write_priv: '.*'
59 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
27```` 60````
28 61
29example... 62example...
@@ -38,16 +71,38 @@ rabbitmq_master: ans-test-1
38Dependencies 71Dependencies
39------------ 72------------
40 73
41A 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. 74None
42 75
43Example Playbook 76Example Playbook
44---------------- 77----------------
45 78
46Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too: 79````
80---
81- hosts: all
82 become: true
83 vars:
84 - pri_domain_name: 'test.vagrant.local'
85 roles:
86 tasks:
87 - name: updating /etc/hosts
88 lineinfile:
89 dest: /etc/hosts
90 regexp: "^{{ hostvars[item].ansible_ssh_host }} {{ item }} {{ item }}.{{ pri_domain_name }}"
91 line: "{{ hostvars[item].ansible_ssh_host }} {{ item }} {{ item }}.{{ pri_domain_name }}"
92 state: present
93 with_items: groups['all']
47 94
48 - hosts: servers 95- hosts: all
49 roles: 96 become: true
50 - { role: mrlesmithjr.rabbitmq } 97 vars:
98 - config_rabbitmq_ha: true
99 - enable_rabbitmq_clustering: true
100 - pri_domain_name: 'test.vagrant.local'
101 - rabbitmq_master: 'node0'
102 roles:
103 - role: ansible-rabbitmq
104 tasks:
105````
51 106
52License 107License
53------- 108-------
diff --git a/Vagrantfile b/Vagrantfile
new file mode 100644
index 0000000..9c68a3d
--- /dev/null
+++ b/Vagrantfile
@@ -0,0 +1,63 @@
1# -*- mode: ruby -*-
2# vi: set ft=ruby :
3
4# All Vagrant configuration is done below. The "2" in Vagrant.configure
5# configures the configuration version (we support older styles for
6# backwards compatibility). Please don't change it unless you know what
7# you're doing.
8Vagrant.configure(2) do |config|
9 #Define if running desktop OS to yes otherwise no
10 Desktop = "no"
11 #Define the number of nodes to spin up
12 N = 3
13
14 #Iterate over nodes
15 (1..N).each do |node_id|
16 nid = (node_id - 1)
17
18 config.vm.define "node#{nid}" do |node|
19 node.vm.box = "mrlesmithjr/centos-7"
20 node.vm.provider "virtualbox" do |vb|
21 vb.memory = "1024"
22 vb.cpus = "1"
23 if Desktop == "yes"
24 vb.gui = true
25 vb.customize ["modifyvm", :id, "--graphicscontroller", "vboxvga"]
26 vb.customize ["modifyvm", :id, "--accelerate3d", "on"]
27 vb.customize ["modifyvm", :id, "--ioapic", "on"]
28 vb.customize ["modifyvm", :id, "--vram", "128"]
29 vb.customize ["modifyvm", :id, "--hwvirtex", "on"]
30 end
31 end
32 node.vm.hostname = "node#{nid}"
33 ### Define additional network adapters below
34 node.vm.network :private_network, ip: "192.168.202.#{200 + nid}"
35
36 ### Define port forwards below
37# node.vm.network "forwarded_port", guest: 80, host: "#{8080 + nid}"
38# node.vm.network "forwarded_port", guest: 3000, host: "#{3000 + nid}"
39
40 if node_id == N
41 node.vm.provision :shell, path: "bootstrap.sh", keep_color: "true" #runs initial shell script
42 node.vm.provision "ansible" do |ansible| #runs bootstrap Ansible playbook
43 ansible.limit = "all"
44 ansible.playbook = "bootstrap.yml"
45 end
46 node.vm.provision "ansible" do |ansible| #runs Ansible playbook for installing roles/executing tasks
47 ansible.limit = "all"
48 ansible.playbook = "playbook.yml"
49 ansible.groups = {
50 "test-nodes" => [
51 "node0",
52 "node1"
53 ],
54 "prod-nodes" => [
55 "node2"
56 ]
57 }
58 end
59 end
60
61 end
62 end
63end
diff --git a/ansible.cfg b/ansible.cfg
new file mode 100644
index 0000000..5a1e589
--- /dev/null
+++ b/ansible.cfg
@@ -0,0 +1,3 @@
1[defaults]
2host_key_checking = False
3#roles_path = ../
diff --git a/bootstrap.sh b/bootstrap.sh
new file mode 100755
index 0000000..7bcf8b0
--- /dev/null
+++ b/bootstrap.sh
@@ -0,0 +1,14 @@
1#!/bin/bash
2if [ -f /etc/debian_version ]; then
3 codename="$(lsb_release -c | awk {'print $2}')"
4 if [ $codename == "vivid" ]; then
5 sudo apt-get update && sudo apt-get -y install python-simplejson
6 fi
7fi
8if [ -f /etc/redhat-release ]; then
9 codename="$(gawk -F= '/^NAME/{print $2}' /etc/os-release)"
10 if [ $codename == "Fedora" ]; then
11 sudo dnf -y install python-devel python-dnf python-pip && \
12 sudo dnf -y group install "C Development Tools and Libraries"
13 fi
14fi
diff --git a/bootstrap.yml b/bootstrap.yml
new file mode 100644
index 0000000..702b540
--- /dev/null
+++ b/bootstrap.yml
@@ -0,0 +1,152 @@
1---
2- hosts: all
3 remote_user: vagrant
4 become: true
5 vars:
6 - host_vars_directory: './host_vars'
7 - host_vars_file: '{{ host_vars_directory }}/{{ inventory_hostname }}.yml'
8 - pri_domain_name: 'vagrant.local'
9 - ssh_key_path: '.vagrant/machines/{{ inventory_hostname }}/virtualbox/private_key'
10 - update_host_vars: true
11 roles:
12 tasks:
13 - name: updating apt cache (Debian)
14 apt:
15 update_cache: yes
16 cache_valid_time: 3600
17 when: ansible_os_family == "Debian"
18
19 - name: installing ansible pre-reqs (Debian)
20 apt:
21 name: "{{ item }}"
22 state: present
23 with_items:
24 - python-dev
25 - python-pip
26 when: ansible_os_family == "Debian"
27
28 - name: installing epel repo (RedHat)
29 yum:
30 name: "epel-release"
31 state: present
32 when: >
33 ansible_os_family == "RedHat" and
34 ansible_distribution != "Fedora"
35
36 - name: installing ansible pre-reqs (RedHat)
37 yum:
38 name: "{{ item }}"
39 state: present
40 with_items:
41 - python-devel
42 - python-dnf
43 - python-pip
44 when: >
45 ansible_os_family == "RedHat" and
46 ansible_distribution != "Fedora"
47
48 - name: installing ansible pre-reqs (Fedora)
49 dnf:
50 name: "{{ item }}"
51 state: present
52 with_items:
53 - gmp-devel
54 - python-crypto
55 - python-devel
56 - python-dnf
57 - python-pip
58 when: >
59 ansible_os_family == "RedHat" and
60 ansible_distribution == "Fedora"
61
62 - name: installing ansible
63 pip:
64 name: "ansible"
65 state: present
66
67 - name: ensuring host_vars directory exists
68 file:
69 path: "./host_vars"
70 state: directory
71 delegate_to: localhost
72 run_once: true
73 become: false
74 when: update_host_vars is defined and update_host_vars
75
76 - name: ensuring host file exists in host_vars
77 stat:
78 path: "{{ host_vars_file }}"
79 delegate_to: localhost
80 register: host_var
81 become: false
82 when: >
83 update_host_vars is defined and
84 update_host_vars
85
86 - name: creating missing host_vars
87 file:
88 path: "{{ host_vars_file }}"
89 state: touch
90 delegate_to: localhost
91 become: false
92 when: not host_var.stat.exists
93
94 - name: updating ansible_ssh_port
95 lineinfile:
96 dest: "{{ host_vars_file }}"
97 regexp: "^ansible_ssh_port{{ ':' }}"
98 line: "ansible_ssh_port{{ ':' }} 22"
99 delegate_to: localhost
100 become: false
101 when: >
102 (update_host_vars is defined and
103 update_host_vars) and
104 (ansible_eth1 is defined or
105 ansible_enp0s8 is defined)
106
107 - name: updating ansible_ssh_host
108 lineinfile:
109 dest: "{{ host_vars_file }}"
110 regexp: "^ansible_ssh_host{{ ':' }}"
111 line: "ansible_ssh_host{{ ':' }} {{ ansible_eth1.ipv4.address }}"
112 delegate_to: localhost
113 become: false
114 when: >
115 (update_host_vars is defined and
116 update_host_vars) and
117 ansible_eth1 is defined
118
119 - name: updating ansible_ssh_host
120 lineinfile:
121 dest: "{{ host_vars_file }}"
122 regexp: "^ansible_ssh_host{{ ':' }}"
123 line: "ansible_ssh_host{{ ':' }} {{ ansible_enp0s8.ipv4.address }}"
124 delegate_to: localhost
125 become: false
126 when: >
127 (update_host_vars is defined and
128 update_host_vars) and
129 ansible_enp0s8 is defined
130
131 - name: updating ansible_ssh_key
132 lineinfile:
133 dest: "{{ host_vars_file }}"
134 regexp: "^ansible_ssh_private_key_file{{ ':' }}"
135 line: "ansible_ssh_private_key_file{{ ':' }} {{ ssh_key_path }}"
136 delegate_to: localhost
137 become: false
138 when: >
139 update_host_vars is defined and
140 update_host_vars
141
142 - name: ensuring host_vars is yaml formatted
143 lineinfile:
144 dest: "{{ host_vars_file }}"
145 regexp: "---"
146 line: "---"
147 insertbefore: BOF
148 delegate_to: localhost
149 become: false
150 when: >
151 update_host_vars is defined and
152 update_host_vars
diff --git a/cleanup.sh b/cleanup.sh
new file mode 100755
index 0000000..a049429
--- /dev/null
+++ b/cleanup.sh
@@ -0,0 +1,8 @@
1#!/bin/bash
2vagrant destroy -f
3if [ -d host_vars ]; then
4 rm -rf host_vars
5fi
6if [ -d .vagrant ]; then
7 rm -rf .vagrant
8fi
diff --git a/defaults/main.yml b/defaults/main.yml
index a8d37f4..65c00ba 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -2,8 +2,8 @@
2# defaults file for ansible-rabbitmq 2# defaults file for ansible-rabbitmq
3config_rabbitmq_ha: false #defines if rabbitmq ha should be configured...define here or in group_vars/group 3config_rabbitmq_ha: false #defines if rabbitmq ha should be configured...define here or in group_vars/group
4enable_rabbitmq_clustering: false #defines if setting up a rabbitmq cluster...define here or in group_vars/group 4enable_rabbitmq_clustering: false #defines if setting up a rabbitmq cluster...define here or in group_vars/group
5erlang_cookie: LSKNKBELKPSTDBBCHETL #define erlang cookie for cluster...define here or in group_vars/group 5erlang_cookie: 'LSKNKBELKPSTDBBCHETL' #define erlang cookie for cluster...define here or in group_vars/group
6erlang_cookie_file: /var/lib/rabbitmq/.erlang.cookie 6erlang_cookie_file: '/var/lib/rabbitmq/.erlang.cookie'
7rabbitmq_config: 7rabbitmq_config:
8 - queue_name: logstash 8 - queue_name: logstash
9 durable: true 9 durable: true
@@ -11,9 +11,13 @@ rabbitmq_config:
11 type: direct 11 type: direct
12 routing_key: logstash 12 routing_key: logstash
13 tags: 'ha-mode=all,ha-sync-mode=automatic' 13 tags: 'ha-mode=all,ha-sync-mode=automatic'
14rabbitmq_debian_repo: deb http://www.rabbitmq.com/debian/ testing main 14rabbitmq_debian_repo: 'deb http://www.rabbitmq.com/debian/ testing main'
15rabbitmq_debian_repo_key: http://www.rabbitmq.com/rabbitmq-signing-key-public.asc 15rabbitmq_debian_repo_key: 'http://www.rabbitmq.com/rabbitmq-signing-key-public.asc'
16rabbitmq_master: [] #defines the inventory host that should be considered master...define here or in group_vars/group 16rabbitmq_master: [] #defines the inventory host that should be considered master...define here or in group_vars/group
17rabbitmq_redhat_repo_key: 'https://www.rabbitmq.com/rabbitmq-signing-key-public.asc'
18rabbitmq_redhat_package: 'rabbitmq-server-{{ rabbitmq_redhat_version }}-1.noarch.rpm'
19rabbitmq_redhat_url: 'http://www.rabbitmq.com/releases/rabbitmq-server/v{{ rabbitmq_redhat_version }}'
20rabbitmq_redhat_version: '3.6.1'
17rabbitmq_users: #define admin user to create in order to login to WebUI 21rabbitmq_users: #define admin user to create in order to login to WebUI
18 - name: rabbitmqadmin 22 - name: rabbitmqadmin
19 password: rabbitmqadmin 23 password: rabbitmqadmin
diff --git a/handlers/main.yml b/handlers/main.yml
index 54a880b..259ce1c 100644
--- a/handlers/main.yml
+++ b/handlers/main.yml
@@ -1,4 +1,6 @@
1--- 1---
2# handlers file for ansible-rabbitmq 2# handlers file for ansible-rabbitmq
3- name: restart rabbitmq-server 3- name: restart rabbitmq-server
4 service: name=rabbitmq-server state=restarted 4 service:
5 name: "rabbitmq-server"
6 state: restarted
diff --git a/meta/main.yml b/meta/main.yml
index 4bd090d..5cb1238 100644
--- a/meta/main.yml
+++ b/meta/main.yml
@@ -18,12 +18,12 @@ galaxy_info:
18 # platform on this list, let us know and we'll get it added! 18 # platform on this list, let us know and we'll get it added!
19 # 19 #
20 platforms: 20 platforms:
21 #- name: EL 21 - name: EL
22 # versions: 22 versions:
23 # - all 23 # - all
24 # - 5 24 # - 5
25 # - 6 25 # - 6
26 # - 7 26 - 7
27 #- name: GenericUNIX 27 #- name: GenericUNIX
28 # versions: 28 # versions:
29 # - all 29 # - all
diff --git a/playbook.yml b/playbook.yml
new file mode 100644
index 0000000..a9a7bba
--- /dev/null
+++ b/playbook.yml
@@ -0,0 +1,25 @@
1---
2- hosts: all
3 become: true
4 vars:
5 - pri_domain_name: 'test.vagrant.local'
6 roles:
7 tasks:
8 - name: updating /etc/hosts
9 lineinfile:
10 dest: /etc/hosts
11 regexp: "^{{ hostvars[item].ansible_ssh_host }} {{ item }} {{ item }}.{{ pri_domain_name }}"
12 line: "{{ hostvars[item].ansible_ssh_host }} {{ item }} {{ item }}.{{ pri_domain_name }}"
13 state: present
14 with_items: groups['all']
15
16- hosts: all
17 become: true
18 vars:
19 - config_rabbitmq_ha: true
20 - enable_rabbitmq_clustering: true
21 - pri_domain_name: 'test.vagrant.local'
22 - rabbitmq_master: 'node0'
23 roles:
24 - role: ansible-rabbitmq
25 tasks:
diff --git a/requirements.yml b/requirements.yml
new file mode 100644
index 0000000..a1f51cb
--- /dev/null
+++ b/requirements.yml
@@ -0,0 +1,2 @@
1---
2- src: https://github.com/mrlesmithjr/ansible-rabbitmq.git
diff --git a/tasks/main.yml b/tasks/main.yml
index bde00da..1768dd9 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -2,6 +2,9 @@
2- include: debian.yml 2- include: debian.yml
3 when: ansible_os_family == "Debian" 3 when: ansible_os_family == "Debian"
4 4
5- include: redhat.yml
6 when: ansible_os_family == "RedHat"
7
5- name: checking to see if already clustered 8- name: checking to see if already clustered
6 stat: path=/etc/rabbitmq/clustered 9 stat: path=/etc/rabbitmq/clustered
7 register: clustered 10 register: clustered
diff --git a/tasks/redhat.yml b/tasks/redhat.yml
new file mode 100644
index 0000000..bf6f1e1
--- /dev/null
+++ b/tasks/redhat.yml
@@ -0,0 +1,43 @@
1---
2- name: redhat | installing pre-reqs
3 yum:
4 name: "{{ item }}"
5 state: present
6 with_items:
7 - dnf
8 - epel-release
9 - python-dnf
10 when: >
11 ansible_distribution != "Fedora"
12
13- name: redhat | installing erlang
14 dnf:
15 name: "erlang"
16 state: present
17
18- name: redhat | adding RabbitMQ public GPG key
19 rpm_key:
20 key: "{{ rabbitmq_redhat_repo_key }}"
21 state: present
22
23- name: redhat | downloading RabbitMQ
24 get_url:
25 url: "{{ rabbitmq_redhat_url }}/{{ rabbitmq_redhat_package }}"
26 dest: "/opt/{{ rabbitmq_redhat_package }}"
27
28- name: redhat | installing RabbitMQ
29 dnf:
30 name: "/opt/{{ rabbitmq_redhat_package }}"
31 state: present
32
33- name: redhat | starting and enabling RabbitMQ service
34 service:
35 name: "rabbitmq-server"
36 state: started
37 enabled: yes
38
39- name: redhat | enabling the RabbitMQ Management Console
40 rabbitmq_plugin:
41 names: rabbitmq_management
42 state: enabled
43 notify: restart rabbitmq-server