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