From 0630f2230691de6da998db595618ef9d344f8843 Mon Sep 17 00:00:00 2001 From: Ossi Salmi Date: Fri, 31 May 2013 12:26:59 +0300 Subject: [PATCH] Initial version of solr module --- solr/Makefile | 18 ++++ solr/files/.htaccess | 10 ++ solr/files/htaccess | 10 ++ solr/files/solr-httpd.conf | 3 + solr/files/solr.init | 88 +++++++++++++++++ solr/manifests/init.pp | 182 ++++++++++++++++++++++++++++++++++++ solr/templates/solr.xml.erb | 10 ++ 7 files changed, 321 insertions(+) create mode 100644 solr/Makefile create mode 100644 solr/files/.htaccess create mode 100644 solr/files/htaccess create mode 100644 solr/files/solr-httpd.conf create mode 100644 solr/files/solr.init create mode 100644 solr/manifests/init.pp create mode 100644 solr/templates/solr.xml.erb diff --git a/solr/Makefile b/solr/Makefile new file mode 100644 index 0000000..0bfb2e7 --- /dev/null +++ b/solr/Makefile @@ -0,0 +1,18 @@ +include $(CURDIR)/../Makefile.inc + +VERSION = 4.2.1 + +TARGET = solr-$(VERSION).tgz +SOURCE = http://ftp.funet.fi/pub/mirrors/apache.org/lucene/solr/$(VERSION)/solr-$(VERSION).tgz + +all: download manifest +download: $(PACKAGES)/$(TARGET) +manifest: $(MANIFESTS)/solr.pp + +$(PACKAGES)/$(TARGET): + @umask 022; echo $@; \ + test -f $@ || curl -o $@ $(SOURCE) + +$(MANIFESTS)/solr.pp: $(PACKAGES)/$(TARGET) + @umask 022; echo $@; \ + echo '$$solr_package_latest = "$(TARGET)"' > $@ diff --git a/solr/files/.htaccess b/solr/files/.htaccess new file mode 100644 index 0000000..7eebf02 --- /dev/null +++ b/solr/files/.htaccess @@ -0,0 +1,10 @@ + + RewriteEngine On + RewriteRule ^(.*)$ http://localhost:8080/solr/$1 [P,L] + + +AuthType Basic +AuthUserFile /etc/solr/htpasswd +AuthName "Password Required" + +require valid-user diff --git a/solr/files/htaccess b/solr/files/htaccess new file mode 100644 index 0000000..82a921e --- /dev/null +++ b/solr/files/htaccess @@ -0,0 +1,10 @@ + + RewriteEngine On + RewriteRule ^(.*)$ http://localhost:8983/solr/$1 [P,L] + + +AuthType Basic +AuthUserFile /etc/solr/htpasswd +AuthName "Password Required" + +require valid-user diff --git a/solr/files/solr-httpd.conf b/solr/files/solr-httpd.conf new file mode 100644 index 0000000..e319139 --- /dev/null +++ b/solr/files/solr-httpd.conf @@ -0,0 +1,3 @@ + + AllowOverride All + diff --git a/solr/files/solr.init b/solr/files/solr.init new file mode 100644 index 0000000..940c251 --- /dev/null +++ b/solr/files/solr.init @@ -0,0 +1,88 @@ +#!/bin/sh + +# chkconfig: 2345 90 10 +# description: Solr Server +# processname: solr + +### BEGIN INIT INFO +# Provides: solr +# Required-Start: $local_fs $network $syslog +# Should-Start: +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Solr server +# Description: Solr server +### END INIT INFO + +SOLRUSER=solr +SOLRPATH="/srv/solr/run" +CONFIGPATH="/srv/solr/cores" +MEMORYLIMIT="-Xms1024M -Xmx4096M" + +if [ `id -u` != "0" ]; then + echo "This script must be run with root privileges." && exit 1 +fi + +if [ ! -e "${SOLRPATH}/start.jar" ]; then + echo "Failed to find Solr jar file: ${SOLRPATH}/start.jar" + echo "Check /etc/init.d/solr file for correct settings." + RETVAL=1 + exit 1 +fi + +if [ ! -e "${CONFIGPATH}/solr.xml" ]; then + echo "Failed to find Solr config files: ${CONFIGPATH}/solr.xml" + echo "Check /etc/init.d/solr file for correct settings." + RETVAL=1 + exit 1 +fi + +start_solr() { + # Check to see if Solr is running + pgrep -u solr -f start.jar > /dev/null + RUNNING=$? + if [ $RUNNING -eq 0 ]; then + echo "[FAILED]" + echo + echo "Reason: Solr already running" + RETVAL=1 + exit 1 + fi + + # Start Solr + echo "Starting Solr" + COMMAND="java -Dsolr.solr.home=${CONFIGPATH} ${MEMORYLIMIT} -jar start.jar > solr.log 2>&1 &" + su -s /bin/sh - ${SOLRUSER} -c "umask 007; cd ${SOLRPATH}; ${COMMAND}" +} + +stop_solr() { + echo -n "Stopping Solr: " + pkill -u solr -f start.jar + RETVAL=$? + if [ $RETVAL -eq 0 ]; then + echo "Success" + else + echo "Failed" + fi +} + +case "$1" in + start) + start_solr + ;; + stop) + stop_solr + ;; + restart) + stop_solr + sleep 2 + start_solr + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +exit 0 diff --git a/solr/manifests/init.pp b/solr/manifests/init.pp new file mode 100644 index 0000000..77d8de8 --- /dev/null +++ b/solr/manifests/init.pp @@ -0,0 +1,182 @@ +# Install Apache Solr. +# +class solr { + + if !$solr_package { + if $solr_package_latest { + $solr_package = $solr_package_latest + } else { + fail("Must define \$solr_package or \$solr_package_latest") + } + } + + if !$solr_core { + fail("Must define \$solr_core") + } + + file { "/usr/local/src/solr.tgz": + ensure => present, + mode => "0644", + owner => "root", + group => "root", + source => "puppet:///files/packages/${solr_package}" + } + + util::extract::tar { "/usr/local/share/solr": + ensure => latest, + strip => 1, + source => "/usr/local/src/solr.tgz", + require => File['/usr/local/src/solr.tgz'], + } + + include user::system + realize(User["solr"], Group["solr"]) + + if $solr_datadir { + file { $solr_datadir: + ensure => directory, + mode => "0770", + owner => "solr", + group => "solr", + require => User["solr"], + } + + file { "/srv/solr": + ensure => link, + target => $solr_datadir, + require => File[$solr_datadir], + } + } else { + file { "/srv/solr": + ensure => directory, + mode => "0770", + owner => "solr", + group => "solr", + require => User["solr"], + } + } + + file { [ "/srv/solr/cores", + "/srv/solr/cores/lib", + "/srv/solr/index", + "/srv/solr/run", + "/srv/solr/run/solr-webapp", + "/srv/solr/spool", ]: + ensure => directory, + mode => "0770", + owner => "solr", + group => "solr", + require => File["/srv/solr"], + } + + file { "/srv/solr/cores/solr.xml" + ensure => present, + mode => "0660", + owner => "solr", + group => "solr", + content => template("solr/solr.xml.erb"), + require => File["/srv/solr/cores"], + } + + file { "/srv/solr/run/start.jar": + ensure => link, + target => "/usr/local/share/solr/example/start.jar" + require => File["/srv/solr/run"], + } + file { "/srv/solr/run/contexts": + ensure => link, + target => "/usr/local/share/solr/example/contexts" + require => File["/srv/solr/run"], + } + file { "/srv/solr/run/etc": + ensure => link, + target => "/usr/local/share/solr/example/etc" + require => File["/srv/solr/run"], + } + file { "/srv/solr/run/lib": + ensure => link, + target => "/usr/local/share/solr/example/lib" + require => File["/srv/solr/run"], + } + file { "/srv/solr/run/webapps": + ensure => link, + target => "/usr/local/share/solr/example/webapps" + require => File["/srv/solr/run"], + } + + file { "/etc/init.d/solr": + ensure => present, + mode => "0755", + owner => "root", + group => "root", + source => "puppet:///modules/solr/solr.init", + notify => Exec["add-service-solr"], + } + exec { "add-service-solr": + path => "/bin:/usr/bin:/sbin:/usr/sbin", + command => $::operatingsystem ? { + "debian" => "update-rc.d solr defaults", + "ubuntu" => "update-rc.d solr defaults", + default => "chkconfig --add solr", + }, + refreshonly => true, + before => Service["solr"], + } + + service { "solr": + enable => true, + } + + file { "/etc/solr": + ensure => directory, + mode => "0755", + owner => "root", + group => "root", + } + file { "/etc/solr/htpasswd": + ensure => present, + mode => "0640", + owner => "root", + group => $apache::sslserver::group, + require => File["/etc/solr"], + } + + $htdocs = "/usr/local/share/solr/htdocs" + + file { $htdocs: + ensure => directory, + mode => "0755", + owner => "root", + group => "root", + require => Util::Extract::Tar["/usr/local/share/solr"], + } + file { "${htdocs}/.htaccess": + ensure => present, + mode => "0644", + owner => "root", + group => "root", + source => [ "puppet:///files/solr/htaccess", + "puppet:///modules/solr/htaccess", ], + require => File[$htdocs], + } + + define configwebhost($htdocs) { + file { "/srv/www/https/${name}/solr": + ensure => link, + target => $htdocs, + require => File["/srv/www/https/${name}"], + } + } + + if $solr_webhosts { + apache::configfile { "solr.conf": + http => false, + source => "puppet:///modules/solr/solr-httpd.conf", + } + + configwebhost { $solr_webhosts: + htdocs => $htdocs, + } + } + +} diff --git a/solr/templates/solr.xml.erb b/solr/templates/solr.xml.erb new file mode 100644 index 0000000..cac8507 --- /dev/null +++ b/solr/templates/solr.xml.erb @@ -0,0 +1,10 @@ + + + +<% @solr_core.each do |core| -%> + + + +<% end -%> + +