class
elasticsearch (
$els_username
= elasticsearch,
$els_uid
,
$els_groupname
= elasticsearch,
$els_gid
,
$els_homedir
,
$els_env
,
$els_version
,
$els_clustername
,
$els_nodename
,
$els_masters
,
$els_node2node_port
=
9300
,
$els_http_port
=
9200
,
$els_is_master
=
false
,
$els_is_data
=
true
,
$els_nb_of_shards
=
5
,
$els_nb_of_replicas
=
1
,
$els_heap_size
=
1024
,
$els_plugins
= [],
$els_ensure_running
=
false
) {
$els_name
=
"elasticsearch-${els_version}"
$els_base
=
"$els_homedir/$els_name"
$els_current
=
"$els_homedir/elasticsearch_current"
$els_content
=
"$els_homedir/elasticsearch_content"
$els_downloads
=
"$els_homedir/downloads"
$els_datadir
=
"$els_content/data"
$els_workdir
=
"$els_content/work"
$els_logdir
=
"$els_content/log"
$els_piddir
=
"$els_content/piddir"
$els_wrapper_script
=
"$els_current/bin/service/elasticsearch"
if
(
$operatingsystem
==
"Darwin"
) {
$els_notify
=
"Service[org.tanukisoftware.wrapper.elasticsearch]"
}
else
{
$els_notify
=
"Service[elasticsearch]"
}
File
{
owner =>
$els_username
,
group =>
$els_groupname
,
mode =>
'0644'
,
}
Exec {
user =>
$els_username
,
group =>
$els_groupname
,
cwd =>
$els_homedir
,
path =>
"/usr/bin/:/bin"
,
timeout =>
900
,
}
define install_plugin {
$p_array
=split(
$title
,
' '
)
$p_name
=
$p_array
[
0
]
$p_dir
=
$p_array
[
1
]
exec {
"install elasticsearch plugin $p_name"
:
command =>
"$els_current/bin/plugin -install $p_name"
,
logoutput =>
true
,
creates =>
"$els_current/plugins/$p_dir"
,
}
}
group {
"$els_groupname"
:
ensure
=> present,
name =>
$els_groupname
,
gid =>
$els_gid
,
}
user {
"$els_username"
:
require => Group[
$els_groupname
],
ensure
=> present,
name =>
$els_username
,
uid =>
$els_uid
,
gid =>
$els_groupname
,
shell =>
'/bin/bash'
,
home =>
$els_homedir
,
comment =>
'ElasticSearch User'
,
}
file {
"$els_homedir"
:
require => User[
$els_username
],
ensure
=> directory,
mode =>
755
,
}
file {
"$els_content"
:
require =>
File
[
$els_homedir
],
ensure
=> directory,
mode =>
755
,
}
file {
"$els_piddir"
:
require =>
File
[
$els_content
],
ensure
=> directory,
mode =>
755
,
}
file {
"$els_downloads"
:
require =>
File
[
$els_homedir
],
ensure
=> directory,
mode =>
755
,
}
file {
"$els_downloads/$els_name.zip"
:
require =>
File
[
"$els_downloads"
],
}
exec {
'unzip elasticsearch'
:
require =>
File
[
"$els_downloads/$els_name.zip"
],
command =>
"unzip $els_downloads/$els_name.zip"
,
creates =>
"$els_base"
,
}
exec {
'fix directories perms elasticsearch'
:
require => Exec[
'unzip elasticsearch'
],
command =>
"find $els_base -type d -exec chmod go-w {} \;"
,
onlyif =>
"perl -e 'exit(sprintf(\"%o\", (stat(\"$els_base\"))[2]&00077) ne \"77\")'"
,
}
file {
"$els_current"
:
require => Exec[
'unzip elasticsearch'
],
ensure
=> link,
target =>
"$els_base"
,
notify =>
$els_notify
,
}
install_plugin {
$els_plugins
:
require =>
File
[
"$els_current"
],
notify =>
$els_notify
,
}
file {
"$els_current/config/elasticsearch.yml"
:
require =>
File
[
"$els_current"
],
content => template(
"elasticsearch/elasticsearch.yml"
),
notify =>
$els_notify
,
}
file {
"$els_downloads/wrapper.zip"
:
require =>
File
[
"$els_downloads"
],
}
exec {
'install elasticsearch wrapper'
:
require => [
File
[
"$els_current"
],
File
[
"$els_downloads/wrapper.zip"
] ],
cwd =>
"$els_current/bin"
,
command =>
"unzip '$els_downloads/wrapper.zip'"
,
creates =>
"$els_current/bin/service"
,
}
exec {
'source env in elasticsearch wrapper'
:
require => [ Exec[
'install elasticsearch wrapper'
],
File
[
"$els_env"
] ],
command =>
"perl -pi.bak -e 'print \". $els_env # KILROY WAS HERE\n\" if $. == 2' $els_current/bin/service/elasticsearch"
,
onlyif =>
"grep -v '# KILROY WAS HERE$' $els_current/bin/service/elasticsearch"
,
creates =>
"$els_current/bin/service/elasticsearch.bak"
,
}
exec {
'fix elasticsearch wrapper'
:
require => Exec[
'source env in elasticsearch wrapper'
],
command =>
"perl -pi.fix -e 's|^PIDDIR=\".\"$|PIDDIR=$els_piddir|; s|^export ES_HOME=.*$|export ES_HOME=$els_current|' $els_current/bin/service/elasticsearch"
,
creates =>
"$els_current/bin/service/elasticsearch.fix"
,
}
file {
"$els_env"
:
require => [
File
[
"$els_homedir"
], User[
"$els_username"
] ],
content => template(
"elasticsearch/env"
),
notify =>
$els_notify
,
}
if
(
$operatingsystem
==
'Darwin'
) {
file {
'/Library/LaunchDaemons/org.tanukisoftware.wrapper.elasticsearch.plist'
:
require => Exec[
'fix elasticsearch wrapper'
],
content => template(
"elasticsearch/elasticsearch.plist"
),
owner => root,
group => wheel,
mode =>
0644
,
}
service {
'org.tanukisoftware.wrapper.elasticsearch'
:
require =>
File
[
'/Library/LaunchDaemons/org.tanukisoftware.wrapper.elasticsearch.plist'
],
enable =>
true
,
ensure
=>
$els_ensure_running
,
}
}
else
{
file {
'/etc/init.d/elasticsearch'
:
require => Exec[
'fix elasticsearch wrapper'
],
ensure
=> link,
owner => root,
group => root,
target =>
"$els_current/bin/service/elasticsearch"
,
}
service {
'elasticsearch'
:
require =>
File
[
'/etc/init.d/elasticsearch'
],
name =>
"elasticsearch"
,
enable =>
true
,
ensure
=>
$els_ensure_running
,
}
}
}