diff --git a/drupalbox/CHANGELOG-0.0.md b/drupalbox/CHANGELOG-0.0.md
index ffb98ec..a5ebce4 100644
--- a/drupalbox/CHANGELOG-0.0.md
+++ b/drupalbox/CHANGELOG-0.0.md
@@ -8,3 +8,5 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- Memcached role
- Mailhog role
+- Jetty role
+- Solr role
diff --git a/drupalbox/README.md b/drupalbox/README.md
index adc2f56..bc6a244 100644
--- a/drupalbox/README.md
+++ b/drupalbox/README.md
@@ -15,3 +15,9 @@
### Mailhog
Mailhog's smtp service listens on port 1025 and http service listens on port 8025
+
+### Solr
+
+Solr is installed but disabled by default. It's installed to `/usr/share/solr/current`.
+
+In order to use it, you must install a Solr "core" to `/usr/share/solr/current/core/` and update the `/usr/share/solr/current/solr.xml` file with the new core. You must enable/start Jetty.
diff --git a/drupalbox/Vagrantfile b/drupalbox/Vagrantfile
index 5b2778f..d3e0b9c 100644
--- a/drupalbox/Vagrantfile
+++ b/drupalbox/Vagrantfile
@@ -26,7 +26,7 @@ Vagrant.configure("2") do |config|
vb.customize ["modifyvm", :id, "--memory", 1024]
end
- # config.vm.provision :ansible do |ansible|
+ # config.vm.provision "ansible", type: :ansible do |ansible|
# ansible.playbook = "drupalbox.yml"
# ansible.groups = {
# "drupalbox" => "default",
diff --git a/drupalbox/drupalbox.yml b/drupalbox/drupalbox.yml
index fbf225c..8a362fa 100644
--- a/drupalbox/drupalbox.yml
+++ b/drupalbox/drupalbox.yml
@@ -4,8 +4,10 @@
hostname: drupalbox
rvm1_user: vagrant
rvm1_install_path: /home/vagrant/.rvm
- vars:
php_ini_sendmail_path: "/usr/local/bin/mhsendmail"
+ jetty_server_enabled: false
+ jetty_server_java_options: "-Xmx256m -Djava.awt.headless=true -Dsolr.solr.home=/usr/share/solr/current"
+ solr_cores: []
vars_files:
- vars/default/common.yml
- vars/dev/mysql.yml
@@ -19,6 +21,8 @@
- { role: rvm_io.rvm1-ruby, tags: ruby, sudo: true }
- { role: memcached }
- { role: mailhog }
+ - { role: jetty }
+ - { role: solr }
- { role: apache }
- { role: mysql-client }
- { role: mysql-server }
diff --git a/drupalbox/tests/jetty_spec.rb b/drupalbox/tests/jetty_spec.rb
new file mode 100644
index 0000000..4150657
--- /dev/null
+++ b/drupalbox/tests/jetty_spec.rb
@@ -0,0 +1,18 @@
+require_relative 'spec_helper'
+
+describe user('jetty') do
+ it { should exist }
+ it { should belong_to_primary_group 'jetty' }
+end
+
+describe package('jetty') do
+ it { should be_installed }
+end
+
+describe package('libjetty-extra') do
+ it { should be_installed }
+end
+
+describe service('jetty') do
+ it { should_not be_enabled }
+end
diff --git a/drupalbox/tests/solr_spec.rb b/drupalbox/tests/solr_spec.rb
new file mode 100644
index 0000000..7195aa2
--- /dev/null
+++ b/drupalbox/tests/solr_spec.rb
@@ -0,0 +1,13 @@
+require_relative 'spec_helper.rb'
+
+describe file("/usr/share/solr") do
+ it { should be_directory }
+end
+
+describe file("/usr/share/solr/current") do
+ it { should be_symlink }
+end
+
+describe file("/var/lib/jetty/webapps/solr") do
+ it { should be_symlink }
+end
diff --git a/provisioning/roles/jetty/defaults/main.yml b/provisioning/roles/jetty/defaults/main.yml
new file mode 100644
index 0000000..ce00e53
--- /dev/null
+++ b/provisioning/roles/jetty/defaults/main.yml
@@ -0,0 +1,24 @@
+---
+jetty_packages:
+ - jetty
+ - libjetty-extra
+
+jetty_server_enabled: true
+
+jetty_server_host: 0.0.0.0
+jetty_server_port: 8983
+jetty_server_no_start: 0
+jetty_server_args: ""
+jetty_server_java_options: "-Xmx256m -Djava.awt.headless=true"
+
+jetty_app_user: jetty
+jetty_app_group: jetty
+jetty_app_home: /usr/share/jetty
+jetty_app_config_dir: /etc/jetty
+jetty_app_default_dir: /etc/default
+jetty_app_log_dir: /var/log/jetty
+jetty_app_tmp_dir: /var/cache/jetty/data
+jetty_app_context_dir: /etc/jetty/contexts
+jetty_app_webapp_dir: /var/lib/jetty/webapps
+
+java_home_dir: /usr/lib/jvm/default-java
diff --git a/provisioning/roles/jetty/handlers/main.yml b/provisioning/roles/jetty/handlers/main.yml
new file mode 100644
index 0000000..a5af6bf
--- /dev/null
+++ b/provisioning/roles/jetty/handlers/main.yml
@@ -0,0 +1,7 @@
+---
+ - name: Jetty | Restart jetty
+ become: yes
+ service:
+ name: jetty
+ state: restarted
+ tags: jetty
diff --git a/provisioning/roles/jetty/tasks/main.yml b/provisioning/roles/jetty/tasks/main.yml
new file mode 100644
index 0000000..0ecb60d
--- /dev/null
+++ b/provisioning/roles/jetty/tasks/main.yml
@@ -0,0 +1,62 @@
+---
+- name: Jetty | Add jetty group
+ become: yes
+ group:
+ name: "{{ jetty_app_group }}"
+ state: present
+ tags: jetty
+
+- name: Jetty | Add jetty user
+ become: yes
+ user:
+ name: "{{ jetty_app_user }}"
+ group: "{{ jetty_app_group }}"
+ home: "{{ jetty_app_home }}"
+ tags: jetty
+
+- name: Jetty | Install Jetty
+ become: yes
+ apt:
+ pkg: "{{ item }}"
+ state: installed
+ update_cache: yes
+ with_items: "{{ jetty_packages }}"
+ tags: jetty
+
+- name: Jetty | Generate Jetty default config
+ become: yes
+ template:
+ src: default_jetty.j2
+ dest: "{{ jetty_app_default_dir }}/jetty"
+ owner: "{{ jetty_app_user }}"
+ group: "{{ jetty_app_group }}"
+ mode: 0644
+ tags: jetty
+
+- name: Jetty | Generate jetty.xml
+ become: yes
+ template:
+ src: jetty.xml.j2
+ dest: "{{ jetty_app_config_dir }}/jetty.xml"
+ owner: "{{ jetty_app_user }}"
+ group: "{{ jetty_app_group }}"
+ mode: 0644
+ tags: jetty
+
+- name: Jetty | Enable Jetty Service
+ become: yes
+ service:
+ name: jetty
+ state: restarted
+ enabled: yes
+ when: jetty_server_enabled == True
+ tags: jetty
+
+- name: Jetty | Disable Jetty Service
+ become: yes
+ service:
+ name: jetty
+ state: stopped
+ enabled: no
+ when: jetty_server_enabled != True
+ tags: jetty
diff --git a/provisioning/roles/jetty/templates/default_jetty.j2 b/provisioning/roles/jetty/templates/default_jetty.j2
new file mode 100644
index 0000000..801eabc
--- /dev/null
+++ b/provisioning/roles/jetty/templates/default_jetty.j2
@@ -0,0 +1,14 @@
+# Defaults for jetty see /etc/init.d/jetty for more
+#
+# {{ ansible_managed }}
+
+NO_START={{ jetty_server_no_start }}
+VERBOSE=yes
+JETTY_USER={{ jetty_app_user }}
+JETTY_HOST={{ jetty_server_host }}
+JETTY_PORT={{ jetty_server_port }}
+JETTY_LOGS={{ jetty_app_log_dir }}
+JETTY_ARGS={{ jetty_server_args }}
+JAVA_OPTIONS="{{ jetty_server_java_options }}"
+JAVA_HOME={{ java_home_dir }}
+JETTY_TMP={{ jetty_app_tmp_dir }}
diff --git a/provisioning/roles/jetty/templates/jetty.xml.j2 b/provisioning/roles/jetty/templates/jetty.xml.j2
new file mode 100644
index 0000000..4b5f27f
--- /dev/null
+++ b/provisioning/roles/jetty/templates/jetty.xml.j2
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+ 10
+ 200
+ 20
+ 2
+
+
+
+
+
+
+
+
+
+
+ 60000
+ 2
+ false
+ 8443
+ 5000
+ 5000
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+ /contexts
+ 5
+
+
+
+
+
+
+
+
+ /webapps
+ false
+ true
+ false
+ /etc/webdefault.xml
+
+
+
+
+
+
+ -
+
+ Test Realm
+ /etc/realm.properties
+ 0
+
+
+
+
+
+ [
+
+
+ /yyyy_mm_dd.request.log
+ yyyy_MM_dd
+ 90
+ true
+ false
+ false
+ GMT
+
+
+ ]
+
+ true
+ true
+ true
+ 1000
+
+
diff --git a/provisioning/roles/solr/defaults/main.yml b/provisioning/roles/solr/defaults/main.yml
new file mode 100644
index 0000000..d448966
--- /dev/null
+++ b/provisioning/roles/solr/defaults/main.yml
@@ -0,0 +1,24 @@
+---
+solr_mirror: https://archive.apache.org/dist/lucene/solr/
+solr_version: 4.9.1
+
+slf4j_api_version: 1.7.6
+slf4j_api_path: "{{ solr_version_src_dir }}/dist/solrj-lib"
+slf4j_api_file: "slf4j-api-{{ slf4j_api_version }}.jar"
+
+solr_app_name: solr
+
+solr_root_src_dir: /usr/local/src/solr
+solr_root_dir: /usr/share/solr
+solr_home_dir: "{{ solr_root_dir }}/{{ solr_version }}"
+solr_data_dir: /var/lib/solr
+
+solr_version_dir: solr-{{ solr_version }}
+solr_version_war: solr-{{ solr_version }}
+solr_version_file: "{{ solr_version_dir }}.tgz"
+solr_version_src_dir: "{{ solr_root_src_dir }}/{{ solr_version_dir }}"
+
+solr_app_user: jetty
+solr_app_group: jetty
+
+solr_cores: []
diff --git a/provisioning/roles/solr/tasks/cores.yml b/provisioning/roles/solr/tasks/cores.yml
new file mode 100644
index 0000000..d709d66
--- /dev/null
+++ b/provisioning/roles/solr/tasks/cores.yml
@@ -0,0 +1,31 @@
+---
+
+- name: Solr | Copy cores
+ become: yes
+ copy:
+ src: "cores/{{ item }}"
+ dest: "{{ solr_home_dir }}/cores"
+ owner: "{{ solr_app_user }}"
+ group: "{{ solr_app_group }}"
+ with_items: "{{ solr_cores }}"
+ tags: solr
+
+- name: Solr | Create Data Directories
+ become: yes
+ file:
+ path: "{{ solr_data_dir }}/{{ item }}/data"
+ owner: "{{ solr_app_user }}"
+ group: "{{ solr_app_group }}"
+ recurse: true
+ state: directory
+ with_items: "{{ solr_cores }}"
+ tags: solr
+
+- name: Solr | Generate solr.xml
+ become: yes
+ template:
+ src: solr.xml.j2
+ dest: "{{ solr_home_dir }}/solr.xml"
+ owner: "{{ solr_app_user }}"
+ group: "{{ solr_app_group }}"
+ tags: solr
diff --git a/provisioning/roles/solr/tasks/init.yml b/provisioning/roles/solr/tasks/init.yml
new file mode 100644
index 0000000..f76029f
--- /dev/null
+++ b/provisioning/roles/solr/tasks/init.yml
@@ -0,0 +1,22 @@
+---
+
+- name: Solr | Create Solr Directories
+ become: yes
+ file:
+ path: "{{ item }}"
+ state: directory
+ owner: "{{ solr_app_user }}"
+ group: "{{ solr_app_group }}"
+ with_items:
+ - "{{ solr_root_src_dir }}"
+ - "{{ solr_home_dir }}"
+ - "{{ solr_data_dir }}"
+ - "{{ solr_home_dir }}/cores"
+ tags: solr
+
+- name: Solr | Check download exists
+ become: yes
+ stat:
+ path: "{{ solr_root_src_dir }}/{{ solr_version_file }}"
+ register: solr_src_file_exists
+ tags: solr
diff --git a/provisioning/roles/solr/tasks/install.yml b/provisioning/roles/solr/tasks/install.yml
new file mode 100644
index 0000000..e8008f0
--- /dev/null
+++ b/provisioning/roles/solr/tasks/install.yml
@@ -0,0 +1,58 @@
+---
+
+- name: Solr | Check src extracted
+ become: yes
+ stat:
+ path: "{{ solr_version_src_dir }}"
+ register: solr_src_extracted
+ tags: solr
+
+- name: Solr | Download Solr
+ become: yes
+ get_url:
+ url: "{{ solr_mirror }}/{{ solr_version }}/{{ solr_version_file }}"
+ dest: "{{ solr_root_src_dir }}/{{ solr_version_file }}"
+ when: solr_src_file_exists.stat.exists == False
+ tags: solr
+
+- name: Solr | Extract source
+ become: yes
+ unarchive:
+ src: "{{ solr_root_src_dir }}/{{ solr_version_file }}"
+ dest: "{{ solr_root_src_dir }}"
+ copy: no
+ when: solr_src_extracted.stat.exists == False
+ tags: solr
+
+- name: Solr | Unzip war
+ become: yes
+ unarchive:
+ src: "{{ solr_version_src_dir }}/dist/{{ solr_version_war }}.war"
+ dest: "{{ solr_home_dir }}"
+ owner: "{{ solr_app_user }}"
+ group: "{{ solr_app_group }}"
+ copy: no
+ tags: solr
+
+- name: Solr | Link to current
+ become: yes
+ file:
+ src: "{{ solr_home_dir }}"
+ dest: "{{ solr_root_dir }}/current"
+ state: link
+ force: yes
+ tags: solr
+
+- name: Solr | Copy slf4f-api jar
+ become: yes
+ shell: "cp {{ slf4j_api_path }}/{{ slf4j_api_file }} {{ solr_home_dir }}/WEB-INF/lib"
+ tags: solr
+
+- name: Solr | Link to Jetty
+ become: yes
+ file:
+ src: "{{ solr_root_dir }}/current"
+ dest: "{{ jetty_app_webapp_dir }}/{{ solr_app_name }}"
+ state: link
+ force: yes
+ tags: solr
diff --git a/provisioning/roles/solr/tasks/main.yml b/provisioning/roles/solr/tasks/main.yml
new file mode 100644
index 0000000..bcc354d
--- /dev/null
+++ b/provisioning/roles/solr/tasks/main.yml
@@ -0,0 +1,11 @@
+---
+- include: init.yml
+- include: install.yml
+- include: cores.yml
+
+- name: Solr | Restart Jetty
+ become: yes
+ service:
+ name: jetty
+ state: restarted
+ tags: solr
diff --git a/provisioning/roles/solr/templates/solr.xml.j2 b/provisioning/roles/solr/templates/solr.xml.j2
new file mode 100644
index 0000000..8736fb2
--- /dev/null
+++ b/provisioning/roles/solr/templates/solr.xml.j2
@@ -0,0 +1,7 @@
+
+
+ {% for core in solr_cores %}
+
+ {% endfor %}
+
+
\ No newline at end of file