diff options
Diffstat (limited to 'Vagrant')
26 files changed, 1276 insertions, 0 deletions
diff --git a/Vagrant/Vagrantfile b/Vagrant/Vagrantfile new file mode 100644 index 0000000..bca5718 --- /dev/null +++ b/Vagrant/Vagrantfile | |||
@@ -0,0 +1,228 @@ | |||
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. | ||
8 | |||
9 | # ---- Define number of nodes to spin up ---- | ||
10 | N = 3 | ||
11 | |||
12 | # ---- Define any custom memory/cpu requirement ---- | ||
13 | # if custom requirements are desired...ensure to set | ||
14 | # custom_cpu_mem == true otherwise set to false | ||
15 | # By default if custom requirements are defined and set below | ||
16 | # any node not defined will be configured as the default... | ||
17 | # which is 1vCPU/512mb...So if setting custom requirements | ||
18 | # only define any node which requires more than the defaults. | ||
19 | nodes = [ | ||
20 | { | ||
21 | :node => "node0", | ||
22 | :box => "mrlesmithjr/trusty64", | ||
23 | :cpu => 1, | ||
24 | :mem => 1024 | ||
25 | } | ||
26 | ] | ||
27 | |||
28 | # ---- Define variables below ---- | ||
29 | #Define if additional disks should be added (true|false) | ||
30 | additional_disks = false | ||
31 | additional_disks_controller = "SATA Controller" | ||
32 | #Define the number of additional disks to add | ||
33 | additional_disks_num = 1 | ||
34 | #Define disk size in GB | ||
35 | additional_disks_size = 10 | ||
36 | #Define if additional network adapters should be created (true|false) | ||
37 | additional_nics = true | ||
38 | #Define if add'l network adapters are auto configured addresses (true|false) | ||
39 | additional_nics_auto_config = true | ||
40 | #Define if additional network adapters should be DHCP assigned (true|false) | ||
41 | additional_nics_dhcp = false | ||
42 | #Define the number of additional nics to add | ||
43 | additional_nics_num = 1 | ||
44 | ansible_groups = { | ||
45 | "test-nodes" => ["node[0:#{N-1}]"] | ||
46 | } | ||
47 | #Define Vagrant box to load | ||
48 | box = "ubuntu/trusty64" | ||
49 | #Define if custom cpu and memory requirements are needed (true|false) | ||
50 | #defined within nodes variable above | ||
51 | custom_cpu_mem = false | ||
52 | #Define if running desktop OS (true|false) | ||
53 | desktop = false | ||
54 | #Define if custom boxes should be used...defined in nodes var.. | ||
55 | enable_custom_boxes = false | ||
56 | #Define if port forwards should be enabled (true|false) | ||
57 | enable_port_forwards = false | ||
58 | #Defines if nodes should be linked from master VM (true|false) | ||
59 | linked_clones = false | ||
60 | port_forwards = [ | ||
61 | { | ||
62 | :node => "node0", | ||
63 | :guest => 3306, | ||
64 | :host => 3306 | ||
65 | }, | ||
66 | { | ||
67 | :node => "node0", | ||
68 | :guest => 80, | ||
69 | :host => 8080 | ||
70 | }, | ||
71 | { | ||
72 | :node => "node0", | ||
73 | :guest => 8000, | ||
74 | :host => 8000 | ||
75 | } | ||
76 | ] | ||
77 | #Define if provisioners should run (true|false) | ||
78 | provision_nodes = true | ||
79 | #Define if IP's are random assigned if not DHCP (true|false) | ||
80 | random_ips = false | ||
81 | #Define number of CPU cores | ||
82 | #will be ignored if custom_cpu_mem == true | ||
83 | server_cpus = 1 | ||
84 | #Define amount of memory to assign to node(s) | ||
85 | #will be ignored if custom_cpu_mem == true | ||
86 | server_memory = 512 | ||
87 | #Define subnet for private_network (If not using DHCP) | ||
88 | subnet = "192.168.202." | ||
89 | #Define starting last octet of the subnet range to begin addresses for node(s) | ||
90 | subnet_ip_start = 200 | ||
91 | |||
92 | Vagrant.configure(2) do |config| | ||
93 | |||
94 | #Iterate over nodes | ||
95 | (1..N).each do |node_id| | ||
96 | nid = (node_id - 1) | ||
97 | |||
98 | config.vm.define "node#{nid}" do |node| | ||
99 | if enable_custom_boxes | ||
100 | #Initially no so it can be set to yes if found in custom box defined | ||
101 | box_set = "no" | ||
102 | nodes.each do |cust_box| | ||
103 | if cust_box[:node] == "node#{nid}" | ||
104 | node.vm.box = cust_box[:box] | ||
105 | box_set = "yes" | ||
106 | end | ||
107 | end | ||
108 | if box_set == "no" | ||
109 | node.vm.box = box | ||
110 | end | ||
111 | end | ||
112 | if not enable_custom_boxes | ||
113 | node.vm.box = box | ||
114 | end | ||
115 | node.vm.provider "virtualbox" do |vb| | ||
116 | if linked_clones | ||
117 | vb.linked_clone = true | ||
118 | end | ||
119 | if not custom_cpu_mem | ||
120 | vb.customize ["modifyvm", :id, "--cpus", server_cpus] | ||
121 | vb.customize ["modifyvm", :id, "--memory", server_memory] | ||
122 | end | ||
123 | if custom_cpu_mem | ||
124 | nodes.each do |cust_node| | ||
125 | if cust_node[:node] == "node#{nid}" | ||
126 | vb.customize ["modifyvm", :id, "--cpus", cust_node[:cpu]] | ||
127 | vb.customize ["modifyvm", :id, "--memory", cust_node[:mem]] | ||
128 | end | ||
129 | end | ||
130 | end | ||
131 | |||
132 | # Setup desktop environment | ||
133 | if desktop | ||
134 | vb.gui = true | ||
135 | vb.customize ["modifyvm", :id, "--graphicscontroller", "vboxvga"] | ||
136 | vb.customize ["modifyvm", :id, "--accelerate3d", "on"] | ||
137 | vb.customize ["modifyvm", :id, "--ioapic", "on"] | ||
138 | vb.customize ["modifyvm", :id, "--vram", "128"] | ||
139 | vb.customize ["modifyvm", :id, "--hwvirtex", "on"] | ||
140 | end | ||
141 | |||
142 | # Add additional disks | ||
143 | if additional_disks | ||
144 | (1..additional_disks_num).each do |disk_num| | ||
145 | dnum = (disk_num + 1) | ||
146 | ddev = ("node#{nid}_Disk#{dnum}.vdi") | ||
147 | unless File.exist?("#{ddev}") | ||
148 | vb.customize ['createhd', '--filename', ("#{ddev}"), \ | ||
149 | '--variant', 'Fixed', '--size', additional_disks_size * 1024] | ||
150 | end | ||
151 | vb.customize ['storageattach', :id, '--storagectl', \ | ||
152 | "#{additional_disks_controller}", '--port', dnum, '--device', 0, \ | ||
153 | '--type', 'hdd', '--medium', "node#{nid}_Disk#{dnum}.vdi"] | ||
154 | end | ||
155 | end | ||
156 | end | ||
157 | node.vm.hostname = "node#{nid}" | ||
158 | |||
159 | # Define additional network adapters below | ||
160 | if additional_nics | ||
161 | if not additional_nics_dhcp | ||
162 | (1..additional_nics_num).each do |nic_num| | ||
163 | if random_ips | ||
164 | nnum = Random.rand(0..50) | ||
165 | if additional_nics_auto_config | ||
166 | node.vm.network :private_network, \ | ||
167 | ip: subnet+"#{subnet_ip_start + nid + nnum}" | ||
168 | end | ||
169 | if not additional_nics_auto_config | ||
170 | node.vm.network :private_network, \ | ||
171 | ip: subnet+"#{subnet_ip_start + nid + nnum}", | ||
172 | auto_config: false | ||
173 | end | ||
174 | end | ||
175 | if not random_ips | ||
176 | if additional_nics_auto_config | ||
177 | node.vm.network :private_network, \ | ||
178 | ip: subnet+"#{subnet_ip_start + nid}" | ||
179 | end | ||
180 | if not additional_nics_auto_config | ||
181 | node.vm.network :private_network, \ | ||
182 | ip: subnet+"#{subnet_ip_start + nid}", | ||
183 | auto_config: false | ||
184 | end | ||
185 | end | ||
186 | end | ||
187 | end | ||
188 | if additional_nics_dhcp | ||
189 | (1..additional_nics_num).each do |nic_num| | ||
190 | node.vm.network :private_network, type: "dhcp" | ||
191 | end | ||
192 | end | ||
193 | end | ||
194 | |||
195 | # Define port forwards below | ||
196 | if enable_port_forwards | ||
197 | port_forwards.each do |pf| | ||
198 | if pf[:node] == "node#{nid}" | ||
199 | node.vm.network :forwarded_port, guest: pf[:guest], \ | ||
200 | host: pf[:host] | ||
201 | end | ||
202 | end | ||
203 | end | ||
204 | |||
205 | # Provisioners | ||
206 | if provision_nodes | ||
207 | if node_id == N | ||
208 | node.vm.provision "ansible" do |ansible| | ||
209 | ansible.limit = "all" | ||
210 | #runs bootstrap Ansible playbook | ||
211 | ansible.playbook = "bootstrap.yml" | ||
212 | end | ||
213 | node.vm.provision "ansible" do |ansible| | ||
214 | ansible.limit = "all" | ||
215 | #runs Ansible playbook for installing roles/executing tasks | ||
216 | ansible.playbook = "playbook.yml" | ||
217 | ansible.groups = ansible_groups | ||
218 | end | ||
219 | end | ||
220 | end | ||
221 | |||
222 | end | ||
223 | end | ||
224 | if provision_nodes | ||
225 | #runs initial shell script | ||
226 | config.vm.provision :shell, path: "bootstrap.sh", keep_color: "true" | ||
227 | end | ||
228 | end | ||
diff --git a/Vagrant/bootstrap.sh b/Vagrant/bootstrap.sh new file mode 100755 index 0000000..5f1620e --- /dev/null +++ b/Vagrant/bootstrap.sh | |||
@@ -0,0 +1,23 @@ | |||
1 | #!/bin/bash | ||
2 | if [ -f /etc/debian_version ]; then | ||
3 | codename="$(lsb_release -c | awk {'print $2}')" | ||
4 | if [[ $codename == "vivid" ]]; then | ||
5 | sudo apt-get update && \ | ||
6 | sudo apt-get -y install python-simplejson | ||
7 | fi | ||
8 | if [[ $codename == "wily" ]]; then | ||
9 | sudo apt-get update && \ | ||
10 | sudo apt-get -y install python-simplejson | ||
11 | fi | ||
12 | if [[ $codename == "xenial" ]]; then | ||
13 | sudo apt-get update && \ | ||
14 | sudo apt-get -y install python-simplejson | ||
15 | fi | ||
16 | fi | ||
17 | if [ -f /etc/redhat-release ]; then | ||
18 | codename="$(gawk -F= '/^NAME/{print $2}' /etc/os-release)" | ||
19 | if [[ $codename == "Fedora" ]]; then | ||
20 | sudo dnf -y install python-devel python-dnf && \ | ||
21 | sudo dnf -y group install "C Development Tools and Libraries" | ||
22 | fi | ||
23 | fi | ||
diff --git a/Vagrant/bootstrap.yml b/Vagrant/bootstrap.yml new file mode 100644 index 0000000..fbd17cb --- /dev/null +++ b/Vagrant/bootstrap.yml | |||
@@ -0,0 +1,180 @@ | |||
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 | - libffi-dev | ||
25 | - libssl-dev | ||
26 | - python-dev | ||
27 | - python-setuptools | ||
28 | when: > | ||
29 | ansible_os_family == "Debian" | ||
30 | |||
31 | - name: installing epel repo (RedHat) | ||
32 | yum: | ||
33 | name: "epel-release" | ||
34 | state: present | ||
35 | when: > | ||
36 | ansible_os_family == "RedHat" and | ||
37 | ansible_distribution != "Fedora" | ||
38 | |||
39 | - name: installing ansible pre-reqs (RedHat) | ||
40 | yum: | ||
41 | name: "{{ item }}" | ||
42 | state: present | ||
43 | with_items: | ||
44 | - libffi-devel | ||
45 | - openssl-devel | ||
46 | - python-crypto | ||
47 | - python-devel | ||
48 | - python-setuptools | ||
49 | when: > | ||
50 | ansible_os_family == "RedHat" and | ||
51 | ansible_distribution != "Fedora" | ||
52 | |||
53 | - name: installing ansible pre-reqs (Fedora) | ||
54 | dnf: | ||
55 | name: "{{ item }}" | ||
56 | state: present | ||
57 | with_items: | ||
58 | - gmp-devel | ||
59 | - libffi-devel | ||
60 | - openssl-devel | ||
61 | - python-crypto | ||
62 | - python-devel | ||
63 | - python-dnf | ||
64 | - python-setuptools | ||
65 | - redhat-rpm-config | ||
66 | when: > | ||
67 | ansible_os_family == "RedHat" and | ||
68 | ansible_distribution == "Fedora" | ||
69 | |||
70 | - name: installing ansible pre-reqs (openSUSE) | ||
71 | zypper: | ||
72 | name: "{{ item }}" | ||
73 | state: present | ||
74 | with_items: | ||
75 | - gmp-devel | ||
76 | - libffi-devel | ||
77 | - openssl-devel | ||
78 | - python-crypto | ||
79 | - python-devel | ||
80 | - python-setuptools | ||
81 | when: > | ||
82 | ansible_os_family == "openSUSE Leap" | ||
83 | |||
84 | - name: installing python pip | ||
85 | easy_install: | ||
86 | name: "pip" | ||
87 | state: present | ||
88 | |||
89 | - name: installing ansible | ||
90 | pip: | ||
91 | name: "ansible" | ||
92 | state: present | ||
93 | version: 1.9.6 | ||
94 | |||
95 | - name: ensuring host_vars directory exists | ||
96 | file: | ||
97 | path: "./host_vars" | ||
98 | state: directory | ||
99 | delegate_to: localhost | ||
100 | run_once: true | ||
101 | become: false | ||
102 | when: update_host_vars is defined and update_host_vars | ||
103 | |||
104 | - name: ensuring host file exists in host_vars | ||
105 | stat: | ||
106 | path: "{{ host_vars_file }}" | ||
107 | delegate_to: localhost | ||
108 | register: host_var | ||
109 | become: false | ||
110 | when: > | ||
111 | update_host_vars is defined and | ||
112 | update_host_vars | ||
113 | |||
114 | - name: creating missing host_vars | ||
115 | file: | ||
116 | path: "{{ host_vars_file }}" | ||
117 | state: touch | ||
118 | delegate_to: localhost | ||
119 | become: false | ||
120 | when: not host_var.stat.exists | ||
121 | |||
122 | - name: updating ansible_ssh_port | ||
123 | lineinfile: | ||
124 | dest: "{{ host_vars_file }}" | ||
125 | regexp: "^ansible_ssh_port{{ ':' }}" | ||
126 | line: "ansible_ssh_port{{ ':' }} 22" | ||
127 | delegate_to: localhost | ||
128 | become: false | ||
129 | when: > | ||
130 | (update_host_vars is defined and | ||
131 | update_host_vars) and | ||
132 | (ansible_eth1 is defined or | ||
133 | ansible_enp0s8 is defined) | ||
134 | |||
135 | - name: updating ansible_ssh_host | ||
136 | lineinfile: | ||
137 | dest: "{{ host_vars_file }}" | ||
138 | regexp: "^ansible_ssh_host{{ ':' }}" | ||
139 | line: "ansible_ssh_host{{ ':' }} {{ ansible_eth1.ipv4.address }}" | ||
140 | delegate_to: localhost | ||
141 | become: false | ||
142 | when: > | ||
143 | (update_host_vars is defined and | ||
144 | update_host_vars) and | ||
145 | ansible_eth1 is defined | ||
146 | |||
147 | - name: updating ansible_ssh_host | ||
148 | lineinfile: | ||
149 | dest: "{{ host_vars_file }}" | ||
150 | regexp: "^ansible_ssh_host{{ ':' }}" | ||
151 | line: "ansible_ssh_host{{ ':' }} {{ ansible_enp0s8.ipv4.address }}" | ||
152 | delegate_to: localhost | ||
153 | become: false | ||
154 | when: > | ||
155 | (update_host_vars is defined and | ||
156 | update_host_vars) and | ||
157 | ansible_enp0s8 is defined | ||
158 | |||
159 | - name: updating ansible_ssh_key | ||
160 | lineinfile: | ||
161 | dest: "{{ host_vars_file }}" | ||
162 | regexp: "^ansible_ssh_private_key_file{{ ':' }}" | ||
163 | line: "ansible_ssh_private_key_file{{ ':' }} {{ ssh_key_path }}" | ||
164 | delegate_to: localhost | ||
165 | become: false | ||
166 | when: > | ||
167 | update_host_vars is defined and | ||
168 | update_host_vars | ||
169 | |||
170 | - name: ensuring host_vars is yaml formatted | ||
171 | lineinfile: | ||
172 | dest: "{{ host_vars_file }}" | ||
173 | regexp: "---" | ||
174 | line: "---" | ||
175 | insertbefore: BOF | ||
176 | delegate_to: localhost | ||
177 | become: false | ||
178 | when: > | ||
179 | update_host_vars is defined and | ||
180 | update_host_vars | ||
diff --git a/Vagrant/cleanup.sh b/Vagrant/cleanup.sh new file mode 100755 index 0000000..a049429 --- /dev/null +++ b/Vagrant/cleanup.sh | |||
@@ -0,0 +1,8 @@ | |||
1 | #!/bin/bash | ||
2 | vagrant destroy -f | ||
3 | if [ -d host_vars ]; then | ||
4 | rm -rf host_vars | ||
5 | fi | ||
6 | if [ -d .vagrant ]; then | ||
7 | rm -rf .vagrant | ||
8 | fi | ||
diff --git a/Vagrant/playbook.yml b/Vagrant/playbook.yml new file mode 120000 index 0000000..7622583 --- /dev/null +++ b/Vagrant/playbook.yml | |||
@@ -0,0 +1 @@ | |||
../playbook.yml \ No newline at end of file | |||
diff --git a/Vagrant/requirements.yml b/Vagrant/requirements.yml new file mode 120000 index 0000000..6e76d52 --- /dev/null +++ b/Vagrant/requirements.yml | |||
@@ -0,0 +1 @@ | |||
../requirements.yml \ No newline at end of file | |||
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 @@ | |||
1 | Role Name | ||
2 | ========= | ||
3 | |||
4 | Installs rabbitmq https://www.rabbitmq.com/ (Configurable...HA and Clustering ready) | ||
5 | |||
6 | Requirements | ||
7 | ------------ | ||
8 | |||
9 | Ensure hostnames are resolvable prior to clustering...either update /etc/hosts or ensure DNS is working. | ||
10 | |||
11 | Vagrant | ||
12 | ------- | ||
13 | |||
14 | Spin up a 3 node HA Cluster for testing... | ||
15 | Install Ansible role on your host: | ||
16 | ```` | ||
17 | sudo ansible-galaxy install -r requirements.yml -f | ||
18 | ```` | ||
19 | Now spin up your environment... | ||
20 | ```` | ||
21 | vagrant up | ||
22 | ```` | ||
23 | When you are done testing, tear it all down... | ||
24 | ```` | ||
25 | ./cleanup.sh | ||
26 | ```` | ||
27 | |||
28 | Role Variables | ||
29 | -------------- | ||
30 | |||
31 | ```` | ||
32 | --- | ||
33 | # defaults file for ansible-rabbitmq | ||
34 | rabbitmq_config_ha: false #defines if rabbitmq ha should be configured...define here or in group_vars/group | ||
35 | rabbitmq_enable_clustering: false #defines if setting up a rabbitmq cluster...define here or in group_vars/group | ||
36 | rabbitmq_erlang_cookie: 'LSKNKBELKPSTDBBCHETL' #define erlang cookie for cluster...define here or in group_vars/group | ||
37 | rabbitmq_erlang_cookie_file: '/var/lib/rabbitmq/.erlang.cookie' | ||
38 | rabbitmq_config: | ||
39 | - queue_name: logstash | ||
40 | durable: true | ||
41 | exchange_name: logstash | ||
42 | type: direct | ||
43 | routing_key: logstash | ||
44 | tags: 'ha-mode=all,ha-sync-mode=automatic' | ||
45 | rabbitmq_debian_repo: 'deb http://www.rabbitmq.com/debian/ testing main' | ||
46 | rabbitmq_debian_repo_key: 'http://www.rabbitmq.com/rabbitmq-signing-key-public.asc' | ||
47 | rabbitmq_master: [] #defines the inventory host that should be considered master...define here or in group_vars/group | ||
48 | rabbitmq_redhat_repo_key: 'https://www.rabbitmq.com/rabbitmq-signing-key-public.asc' | ||
49 | rabbitmq_redhat_package: 'rabbitmq-server-{{ rabbitmq_redhat_version }}-1.noarch.rpm' | ||
50 | rabbitmq_redhat_url: 'http://www.rabbitmq.com/releases/rabbitmq-server/v{{ rabbitmq_redhat_version }}' | ||
51 | rabbitmq_redhat_version: '3.6.1' | ||
52 | rabbitmq_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 | ||
60 | ```` | ||
61 | |||
62 | example... | ||
63 | group_vars/rabbitmq-cluster-nodes | ||
64 | ```` | ||
65 | --- | ||
66 | rabbitmq_enable_clustering: true | ||
67 | rabbitmq_config_ha: false | ||
68 | rabbitmq_master: ans-test-1 | ||
69 | ```` | ||
70 | |||
71 | Dependencies | ||
72 | ------------ | ||
73 | |||
74 | None | ||
75 | |||
76 | Example Playbook | ||
77 | ---------------- | ||
78 | |||
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'] | ||
94 | |||
95 | - hosts: all | ||
96 | become: true | ||
97 | vars: | ||
98 | - rabbitmq_config_ha: true | ||
99 | - rabbitmq_enable_clustering: true | ||
100 | - pri_domain_name: 'test.vagrant.local' | ||
101 | - rabbitmq_master: 'node0' | ||
102 | roles: | ||
103 | - role: ansible-rabbitmq | ||
104 | tasks: | ||
105 | ```` | ||
106 | |||
107 | License | ||
108 | ------- | ||
109 | |||
110 | BSD | ||
111 | |||
112 | Author Information | ||
113 | ------------------ | ||
114 | |||
115 | Larry Smith Jr. | ||
116 | - @mrlesmithjr | ||
117 | - http://everythingshouldbevirtual.com | ||
118 | - 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 @@ | |||
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. | ||
8 | Vagrant.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 | ||
63 | 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 @@ | |||
1 | [defaults] | ||
2 | host_key_checking = False | ||
3 | #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 @@ | |||
1 | #!/bin/bash | ||
2 | if [ -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 | ||
7 | fi | ||
8 | if [ -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 | ||
14 | 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 @@ | |||
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/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 @@ | |||
1 | #!/bin/bash | ||
2 | vagrant destroy -f | ||
3 | if [ -d host_vars ]; then | ||
4 | rm -rf host_vars | ||
5 | fi | ||
6 | if [ -d .vagrant ]; then | ||
7 | rm -rf .vagrant | ||
8 | 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 @@ | |||
1 | --- | ||
2 | # defaults file for ansible-rabbitmq | ||
3 | rabbitmq_config: | ||
4 | - queue_name: 'logstash' | ||
5 | durable: true | ||
6 | exchange_name: logstash | ||
7 | type: 'direct' | ||
8 | routing_key: 'logstash' | ||
9 | tags: 'ha-mode=all,ha-sync-mode=automatic' | ||
10 | rabbitmq_config_ha: false #defines if rabbitmq ha should be configured...define here or in group_vars/group | ||
11 | rabbitmq_debian_repo: 'deb http://www.rabbitmq.com/debian/ testing main' | ||
12 | rabbitmq_debian_repo_key: 'https://www.rabbitmq.com/rabbitmq-release-signing-key.asc' | ||
13 | rabbitmq_enable_clustering: false #defines if setting up a rabbitmq cluster...define here or in group_vars/group | ||
14 | rabbitmq_erlang_cookie: 'LSKNKBELKPSTDBBCHETL' #define erlang cookie for cluster...define here or in group_vars/group | ||
15 | rabbitmq_erlang_cookie_file: '/var/lib/rabbitmq/.erlang.cookie' | ||
16 | rabbitmq_master: [] #defines the inventory host that should be considered master...define here or in group_vars/group | ||
17 | rabbitmq_redhat_repo_key: 'https://www.rabbitmq.com/rabbitmq-signing-key-public.asc' | ||
18 | rabbitmq_redhat_package: 'rabbitmq-server-{{ rabbitmq_redhat_version }}-1.noarch.rpm' | ||
19 | rabbitmq_redhat_url: 'http://www.rabbitmq.com/releases/rabbitmq-server/v{{ rabbitmq_redhat_version }}' | ||
20 | rabbitmq_redhat_version: '3.6.1' | ||
21 | rabbitmq_users: #define admin user to create in order to login to WebUI | ||
22 | - name: 'rabbitmqadmin' | ||
23 | password: 'rabbitmqadmin' | ||
24 | vhost: '/' | ||
25 | configure_priv: '.*' | ||
26 | read_priv: '.*' | ||
27 | write_priv: '.*' | ||
28 | 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 @@ | |||
1 | --- | ||
2 | # handlers file for ansible-rabbitmq | ||
3 | - name: restart rabbitmq-server | ||
4 | service: | ||
5 | name: "rabbitmq-server" | ||
6 | 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 @@ | |||
1 | --- | ||
2 | galaxy_info: | ||
3 | author: Larry Smith Jr. | ||
4 | description: Installs rabbitmq https://www.rabbitmq.com/ (Configurable...HA and Clustering ready) | ||
5 | #company: your company (optional) | ||
6 | # Some suggested licenses: | ||
7 | # - BSD (default) | ||
8 | # - MIT | ||
9 | # - GPLv2 | ||
10 | # - GPLv3 | ||
11 | # - Apache | ||
12 | # - CC-BY | ||
13 | license: license (GPLv2, CC-BY, etc) | ||
14 | min_ansible_version: 1.2 | ||
15 | # | ||
16 | # Below are all platforms currently available. Just uncomment | ||
17 | # the ones that apply to your role. If you don't see your | ||
18 | # platform on this list, let us know and we'll get it added! | ||
19 | # | ||
20 | platforms: | ||
21 | - name: EL | ||
22 | versions: | ||
23 | # - all | ||
24 | # - 5 | ||
25 | # - 6 | ||
26 | - 7 | ||
27 | #- name: GenericUNIX | ||
28 | # versions: | ||
29 | # - all | ||
30 | # - any | ||
31 | - name: Fedora | ||
32 | versions: | ||
33 | # - all | ||
34 | # - 16 | ||
35 | # - 17 | ||
36 | # - 18 | ||
37 | # - 19 | ||
38 | # - 20 | ||
39 | # - 21 | ||
40 | - 22 | ||
41 | - 23 | ||
42 | #- name: Windows | ||
43 | # versions: | ||
44 | # - all | ||
45 | # - 2012R2 | ||
46 | #- name: SmartOS | ||
47 | # versions: | ||
48 | # - all | ||
49 | # - any | ||
50 | #- name: opensuse | ||
51 | # versions: | ||
52 | # - all | ||
53 | # - 12.1 | ||
54 | # - 12.2 | ||
55 | # - 12.3 | ||
56 | # - 13.1 | ||
57 | # - 13.2 | ||
58 | #- name: Amazon | ||
59 | # versions: | ||
60 | # - all | ||
61 | # - 2013.03 | ||
62 | # - 2013.09 | ||
63 | #- name: GenericBSD | ||
64 | # versions: | ||
65 | # - all | ||
66 | # - any | ||
67 | #- name: FreeBSD | ||
68 | # versions: | ||
69 | # - all | ||
70 | # - 8.0 | ||
71 | # - 8.1 | ||
72 | # - 8.2 | ||
73 | # - 8.3 | ||
74 | # - 8.4 | ||
75 | # - 9.0 | ||
76 | # - 9.1 | ||
77 | # - 9.1 | ||
78 | # - 9.2 | ||
79 | - name: Ubuntu | ||
80 | versions: | ||
81 | # - all | ||
82 | # - lucid | ||
83 | # - maverick | ||
84 | # - natty | ||
85 | # - oneiric | ||
86 | # - precise | ||
87 | # - quantal | ||
88 | # - raring | ||
89 | # - saucy | ||
90 | - trusty | ||
91 | # - utopic | ||
92 | # - vivid | ||
93 | #- name: SLES | ||
94 | # versions: | ||
95 | # - all | ||
96 | # - 10SP3 | ||
97 | # - 10SP4 | ||
98 | # - 11 | ||
99 | # - 11SP1 | ||
100 | # - 11SP2 | ||
101 | # - 11SP3 | ||
102 | #- name: GenericLinux | ||
103 | # versions: | ||
104 | # - all | ||
105 | # - any | ||
106 | #- name: Debian | ||
107 | # versions: | ||
108 | # - all | ||
109 | # - etch | ||
110 | # - jessie | ||
111 | # - lenny | ||
112 | # - squeeze | ||
113 | # - wheezy | ||
114 | # | ||
115 | # Below are all categories currently available. Just as with | ||
116 | # the platforms above, uncomment those that apply to your role. | ||
117 | # | ||
118 | categories: | ||
119 | #- cloud | ||
120 | #- cloud:ec2 | ||
121 | #- cloud:gce | ||
122 | #- cloud:rax | ||
123 | - clustering | ||
124 | #- database | ||
125 | #- database:nosql | ||
126 | #- database:sql | ||
127 | #- development | ||
128 | #- monitoring | ||
129 | #- networking | ||
130 | #- packaging | ||
131 | - system | ||
132 | #- web | ||
133 | dependencies: [] | ||
134 | # List your role dependencies here, one per line. Only | ||
135 | # dependencies available via galaxy should be listed here. | ||
136 | # Be sure to remove the '[]' above if you add dependencies | ||
137 | # 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 @@ | |||
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 | - rabbitmq_config_ha: true | ||
20 | - rabbitmq_enable_clustering: true | ||
21 | - pri_domain_name: 'test.vagrant.local' | ||
22 | - rabbitmq_master: 'node0' | ||
23 | roles: | ||
24 | - role: ansible-rabbitmq | ||
25 | 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 @@ | |||
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 @@ | |||
1 | --- | ||
2 | - name: debian | adding RabbitMQ public GPG key to the apt repo | ||
3 | apt_key: | ||
4 | url: "{{ rabbitmq_debian_repo_key }}" | ||
5 | state: present | ||
6 | |||
7 | - name: debian | adding RabbitMQ repo | ||
8 | apt_repository: | ||
9 | repo: "{{ rabbitmq_debian_repo }}" | ||
10 | state: present | ||
11 | register: "rabbitmq_repo_added" | ||
12 | |||
13 | - name: debian | updating apt cache | ||
14 | apt: | ||
15 | update_cache: yes | ||
16 | when: rabbitmq_repo_added.changed | ||
17 | |||
18 | - name: debian | installing RabbitMQ server | ||
19 | apt: | ||
20 | name: "{{ item }}" | ||
21 | state: present | ||
22 | with_items: | ||
23 | - rabbitmq-server | ||
24 | |||
25 | - name: debian | enabling the RabbitMQ Management Console | ||
26 | rabbitmq_plugin: | ||
27 | names: rabbitmq_management | ||
28 | state: enabled | ||
29 | notify: restart rabbitmq-server | ||
30 | |||
31 | - name: debian | ensuring that the RabbitMQ service is running | ||
32 | service: | ||
33 | name: rabbitmq-server | ||
34 | state: started | ||
35 | 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 @@ | |||
1 | --- | ||
2 | - name: fedora | installing pre-reqs | ||
3 | dnf: | ||
4 | name: "{{ item }}" | ||
5 | state: present | ||
6 | with_items: | ||
7 | - wget | ||
8 | |||
9 | - name: fedora | installing erlang | ||
10 | dnf: | ||
11 | name: "erlang" | ||
12 | state: present | ||
13 | |||
14 | - name: fedora | adding RabbitMQ public GPG key | ||
15 | rpm_key: | ||
16 | key: "{{ rabbitmq_redhat_repo_key }}" | ||
17 | state: present | ||
18 | |||
19 | - name: fedora | downloading RabbitMQ | ||
20 | get_url: | ||
21 | url: "{{ rabbitmq_redhat_url }}/{{ rabbitmq_redhat_package }}" | ||
22 | dest: "/opt/{{ rabbitmq_redhat_package }}" | ||
23 | |||
24 | - name: fedora | installing RabbitMQ | ||
25 | dnf: | ||
26 | name: "/opt/{{ rabbitmq_redhat_package }}" | ||
27 | state: present | ||
28 | |||
29 | - name: fedora | starting and enabling RabbitMQ service | ||
30 | service: | ||
31 | name: "rabbitmq-server" | ||
32 | state: started | ||
33 | enabled: yes | ||
34 | |||
35 | - name: fedora | enabling the RabbitMQ Management Console | ||
36 | rabbitmq_plugin: | ||
37 | names: rabbitmq_management | ||
38 | state: enabled | ||
39 | 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 @@ | |||
1 | # tasks file for ansible-rabbitmq | ||
2 | - include: debian.yml | ||
3 | when: ansible_os_family == "Debian" | ||
4 | |||
5 | - include: redhat.yml | ||
6 | when: ansible_distribution == "CentOS" or ansible_distribution == "Red Hat Enterprise Linux" | ||
7 | |||
8 | - include: fedora.yml | ||
9 | when: ansible_distribution == "Fedora" | ||
10 | |||
11 | - name: checking to see if already clustered | ||
12 | stat: path=/etc/rabbitmq/clustered | ||
13 | register: clustered | ||
14 | |||
15 | - include: rabbitmq_clustering.yml | ||
16 | when: rabbitmq_enable_clustering and (clustered.stat.exists != True) | ||
17 | |||
18 | - include: rabbitmq_ha_config.yml | ||
19 | when: rabbitmq_config_ha and rabbitmq_enable_clustering | ||
20 | |||
21 | - 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 @@ | |||
1 | --- | ||
2 | - name: rabbitmq_clustering | stopping rabbitmq app | ||
3 | command: rabbitmqctl stop_app | ||
4 | |||
5 | - name: rabbitmq_clustering | resetting rabbitmq app | ||
6 | command: rabbitmqctl reset | ||
7 | |||
8 | - name: rabbitmq_clustering | stopping rabbitmq-server | ||
9 | service: | ||
10 | name: rabbitmq-server | ||
11 | state: stopped | ||
12 | |||
13 | #- name: grabbing erlang cookie | ||
14 | # shell: cat /var/lib/rabbitmq/.erlang.cookie | ||
15 | # register: rabbitmq_erlang_cookie | ||
16 | # when: inventory_hostname == "{{ rabbitmq_master }}" | ||
17 | |||
18 | - name: rabbitmq_clustering | copy erlang cookie | ||
19 | template: | ||
20 | src: erlang.cookie.j2 | ||
21 | dest: "{{ rabbitmq_erlang_cookie_file }}" | ||
22 | owner: rabbitmq | ||
23 | group: rabbitmq | ||
24 | mode: 0400 | ||
25 | backup: yes #backing up in case the need to recover | ||
26 | # when: inventory_hostname != "{{ rabbitmq_master }}" | ||
27 | |||
28 | - name: rabbitmq_clustering | restarting rabbitmq-server on master | ||
29 | service: | ||
30 | name: rabbitmq-server | ||
31 | state: restarted | ||
32 | when: inventory_hostname == "{{ rabbitmq_master }}" | ||
33 | |||
34 | - name: rabbitmq_clustering | starting rabbitmq app on master | ||
35 | command: rabbitmqctl start_app | ||
36 | register: cluster_master | ||
37 | when: inventory_hostname == "{{ rabbitmq_master }}" | ||
38 | |||
39 | - name: rabbitmq_clustering | sending sigterm to any running rabbitmq processes | ||
40 | shell: pkill -u rabbitmq || true | ||
41 | when: inventory_hostname != "{{ rabbitmq_master }}" | ||
42 | |||
43 | - name: rabbitmq_clustering | restarting rabbitmq-server | ||
44 | service: | ||
45 | name: rabbitmq-server | ||
46 | state: restarted | ||
47 | when: inventory_hostname != "{{ rabbitmq_master }}" | ||
48 | |||
49 | - name: rabbitmq_clustering | stopping rabbitmq app | ||
50 | command: rabbitmqctl stop_app | ||
51 | when: inventory_hostname != "{{ rabbitmq_master }}" | ||
52 | |||
53 | - name: rabbitmq_clustering | resetting rabbitmq app | ||
54 | command: rabbitmqctl reset | ||
55 | when: inventory_hostname != "{{ rabbitmq_master }}" | ||
56 | |||
57 | - name: rabbitmq_clustering | joining rabbitmq cluster | ||
58 | command: rabbitmqctl join_cluster 'rabbit@{{ rabbitmq_master }}' | ||
59 | register: cluster_joined | ||
60 | when: inventory_hostname != "{{ rabbitmq_master }}" | ||
61 | |||
62 | - name: rabbitmq_clustering | starting rabbitmq app | ||
63 | command: rabbitmqctl start_app | ||
64 | when: inventory_hostname != "{{ rabbitmq_master }}" | ||
65 | |||
66 | - name: rabbitmq_clustering | marking as clustered | ||
67 | file: | ||
68 | path: /etc/rabbitmq/clustered | ||
69 | state: touch | ||
70 | 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 @@ | |||
1 | --- | ||
2 | - name: rabbitmq_ha_config | checking if rabbitmqadmin is installed | ||
3 | stat: | ||
4 | path: /usr/sbin/rabbitmqadmin | ||
5 | register: rabbitmqadmin_check | ||
6 | |||
7 | - name: rabbitmq_ha_config | install rabbitMQ admin | ||
8 | shell: wget http://guest:guest@localhost:15672/cli/rabbitmqadmin | ||
9 | when: not rabbitmqadmin_check.stat.exists | ||
10 | |||
11 | - name: rabbitmq_ha_config | moving the rabbitMQ Admin | ||
12 | shell: mv rabbitmqadmin /usr/sbin | ||
13 | when: not rabbitmqadmin_check.stat.exists | ||
14 | |||
15 | - name: rabbitmq_ha_config | making executable rabbitMQ Admin | ||
16 | shell: chmod +x /usr/sbin/rabbitmqadmin | ||
17 | notify: restart rabbitmq-server | ||
18 | when: not rabbitmqadmin_check.stat.exists | ||
19 | |||
20 | - name: rabbitmq_ha_config | creating queue(s) | ||
21 | command: rabbitmqadmin declare queue name={{ item.queue_name }} durable={{ item.durable|lower }} | ||
22 | run_once: true | ||
23 | with_items: "{{ rabbitmq_config }}" | ||
24 | |||
25 | - name: rabbitmq_ha_config | setting up ha on queue(s) | ||
26 | rabbitmq_policy: | ||
27 | name: "ha-all" | ||
28 | pattern: "{{ item.queue_name }}" | ||
29 | tags: "{{ item.tags }}" | ||
30 | state: present | ||
31 | run_once: true | ||
32 | with_items: "{{ rabbitmq_config }}" | ||
33 | |||
34 | - name: rabbitmq_ha_config | creating exchange(s) | ||
35 | command: rabbitmqadmin declare exchange name={{ item.exchange_name }} type={{ item.type }} | ||
36 | run_once: true | ||
37 | with_items: "{{ rabbitmq_config }}" | ||
38 | when: item.exchange_name is defined | ||
39 | |||
40 | - name: rabbitmq_ha_config | creating binding(s) | ||
41 | command: rabbitmqadmin declare binding source={{ item.exchange_name }} destination_type="queue" destination={{ item.queue_name }} routing_key={{ item.routing_key }} | ||
42 | run_once: true | ||
43 | with_items: "{{ rabbitmq_config }}" | ||
44 | 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 @@ | |||
1 | --- | ||
2 | - name: rabbitmq_users | creating rabbitmq users | ||
3 | rabbitmq_user: | ||
4 | name: "{{ item.name }}" | ||
5 | password: "{{ item.password }}" | ||
6 | vhost: "{{ item.vhost }}" | ||
7 | configure_priv: "{{ item.configure_priv }}" | ||
8 | read_priv: "{{ item.read_priv }}" | ||
9 | write_priv: "{{ item.write_priv }}" | ||
10 | tags: "{{ item.tags }}" | ||
11 | state: present | ||
12 | with_items: "{{ rabbitmq_users }}" | ||
13 | when: (rabbitmq_enable_clustering is defined and not rabbitmq_enable_clustering) or rabbitmq_enable_clustering is not defined | ||
14 | |||
15 | - name: rabbitmq_users | creating rabbitmq users | ||
16 | rabbitmq_user: | ||
17 | name: "{{ item.name }}" | ||
18 | password: "{{ item.password }}" | ||
19 | vhost: "{{ item.vhost }}" | ||
20 | configure_priv: "{{ item.configure_priv }}" | ||
21 | read_priv: "{{ item.read_priv }}" | ||
22 | write_priv: "{{ item.write_priv }}" | ||
23 | tags: "{{ item.tags }}" | ||
24 | state: present | ||
25 | run_once: yes | ||
26 | with_items: "{{ rabbitmq_users }}" | ||
27 | 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 @@ | |||
1 | --- | ||
2 | - name: redhat | installing pre-reqs | ||
3 | yum: | ||
4 | name: "{{ item }}" | ||
5 | state: present | ||
6 | with_items: | ||
7 | - epel-release | ||
8 | - wget | ||
9 | |||
10 | - name: redhat | installing erlang | ||
11 | yum: | ||
12 | name: "erlang" | ||
13 | state: present | ||
14 | |||
15 | - name: redhat | adding RabbitMQ public GPG key | ||
16 | rpm_key: | ||
17 | key: "{{ rabbitmq_redhat_repo_key }}" | ||
18 | state: present | ||
19 | |||
20 | - name: redhat | downloading RabbitMQ | ||
21 | get_url: | ||
22 | url: "{{ rabbitmq_redhat_url }}/{{ rabbitmq_redhat_package }}" | ||
23 | dest: "/opt/{{ rabbitmq_redhat_package }}" | ||
24 | |||
25 | - name: redhat | installing RabbitMQ | ||
26 | yum: | ||
27 | name: "/opt/{{ rabbitmq_redhat_package }}" | ||
28 | state: present | ||
29 | |||
30 | - name: redhat | starting and enabling RabbitMQ service | ||
31 | service: | ||
32 | name: "rabbitmq-server" | ||
33 | state: started | ||
34 | enabled: yes | ||
35 | |||
36 | - name: redhat | enabling the RabbitMQ Management Console | ||
37 | rabbitmq_plugin: | ||
38 | names: rabbitmq_management | ||
39 | state: enabled | ||
40 | 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 @@ | |||
1 | --- | ||
2 | # vars file for ansible-rabbitmq | ||