# Install Apache Solr. # # === Parameters # # $cores: # List of cores to enable. # # $datadir: # Solr data directory. Defaults to "/srv/solr". # # $webhosts: # List of Solr virtual hosts. # class solr( $cores, $datadir="/srv/solr", $webhosts=undef ) { if ! ($::apache::sslserver::user and $::apache::sslserver::group) { fail("Must declare apache before solr") } if ! $solr_package { if $::solr_package_latest { $solr_package = $::solr_package_latest } else { fail("Must define \$solr_package or \$solr_package_latest") } } 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 $datadir != "/srv/solr" { file { "/srv/solr": ensure => link, target => $datadir, require => File[$datadir], } } file { $datadir: 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/logs", "/srv/solr/run/solr-webapp", "/srv/solr/spool", ]: ensure => directory, mode => "2770", 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"], notify => Service["solr"], } file { "/srv/solr/run/start.jar": ensure => link, target => "/usr/local/share/solr/example/start.jar", require => File["/srv/solr/run"], before => Service["solr"], } file { "/srv/solr/run/contexts": ensure => link, target => "/usr/local/share/solr/example/contexts", require => File["/srv/solr/run"], before => Service["solr"], } file { "/srv/solr/run/etc": ensure => link, target => "/usr/local/share/solr/example/etc", require => File["/srv/solr/run"], before => Service["solr"], } file { "/srv/solr/run/etc/jetty.xml": ensure => present, mode => "0644", owner => "root", group => "root", source => "puppet:///modules/solr/jetty.xml", notify => Service["solr"], } file { "/srv/solr/run/lib": ensure => link, target => "/usr/local/share/solr/example/lib", require => File["/srv/solr/run"], before => Service["solr"], } file { "/srv/solr/run/resources": ensure => link, target => "/usr/local/share/solr/example/resources", require => File["/srv/solr/run"], before => Service["solr"], } file { "/srv/solr/run/webapps": ensure => link, target => "/usr/local/share/solr/example/webapps", require => File["/srv/solr/run"], before => Service["solr"], } file { "/etc/init.d/solr": ensure => present, mode => "0755", owner => "root", group => "root", content => template("solr/solr.init.erb"), 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": ensure => running, enable => true, hasstatus => true, hasrestart => 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], } if $webhosts { include apache::mod::proxy include apache::mod::proxy_http include apache::mod::rewrite apache::configfile { "solr.conf": http => false, source => "puppet:///modules/solr/solr-httpd.conf", } solr::configwebhost { $webhosts: htdocs => $htdocs, } } if ! $solr_requests_package { if $::solr_requests_package_latest { $solr_requests_package = $::solr_requests_package_latest } else { fail("Must define \$solr_requests_package or \$solr_requests_package_latest") } } if ! $solr_pysolr_package { if $::solr_pysolr_package_latest { $solr_pysolr_package = $::solr_pysolr_package_latest } else { fail("Must define \$solr_pysolr_package or \$solr_pysolr_package_latest") } } python::setup::install { "/usr/local/src/requests": source => "puppet:///files/packages/${solr_requests_package}", } python::setup::install { "/usr/local/src/pysolr": source => "puppet:///files/packages/${solr_pysolr_package}", require => Python::Setup::Install["/usr/local/src/requests"], } } # Enable solr for virtual host. # define solr::configwebhost($htdocs) { file { "/srv/www/https/${name}/solr": ensure => link, target => $htdocs, require => File["/srv/www/https/${name}"], } }