Update the elasticsearch cookbook
This commit is contained in:
126
cookbooks/elasticsearch/resources/service.rb
Normal file
126
cookbooks/elasticsearch/resources/service.rb
Normal file
@@ -0,0 +1,126 @@
|
||||
unified_mode true
|
||||
|
||||
include ElasticsearchCookbook::Helpers
|
||||
|
||||
# this is what helps the various resources find each other
|
||||
property :instance_name,
|
||||
String
|
||||
|
||||
property :service_name,
|
||||
String,
|
||||
name_property: true
|
||||
|
||||
property :service_actions,
|
||||
[Symbol, String, Array],
|
||||
default: [:enable, :start]
|
||||
|
||||
action :configure do
|
||||
es_user = find_es_resource(Chef.run_context, :elasticsearch_user, new_resource)
|
||||
es_conf = find_es_resource(Chef.run_context, :elasticsearch_configure, new_resource)
|
||||
default_config_name = new_resource.service_name || new_resource.instance_name || es_conf.instance_name || 'elasticsearch'
|
||||
|
||||
directory "#{es_conf.path_pid}-#{default_config_name}" do
|
||||
path es_conf.path_pid
|
||||
owner es_user.username
|
||||
group es_user.groupname
|
||||
mode '0755'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
default_conf_dir = platform_family?('rhel', 'amazon') ? '/etc/sysconfig' : '/etc/default'
|
||||
|
||||
systemd_unit new_resource.service_name do
|
||||
content(
|
||||
Unit: {
|
||||
Description: 'Elasticsearch',
|
||||
Documentation: 'https://www.elastic.co',
|
||||
Wants: 'network-online.target',
|
||||
After: 'network-online.target',
|
||||
},
|
||||
Service: {
|
||||
Type: 'notify',
|
||||
RuntimeDirectory: 'elasticsearch',
|
||||
PrivateTmp: 'true',
|
||||
Environment: [
|
||||
"ES_HOME=#{es_conf.path_home}",
|
||||
'ES_PATH_CONF=/etc/elasticsearch',
|
||||
"PID_DIR=#{es_conf.path_pid}",
|
||||
'ES_SD_NOTIFY=true',
|
||||
],
|
||||
EnvironmentFile: "-#{default_conf_dir}/#{new_resource.service_name}",
|
||||
WorkingDirectory: "#{es_conf.path_home}",
|
||||
User: es_user.username,
|
||||
Group: es_user.groupname,
|
||||
ExecStart: "#{es_conf.path_home}/bin/systemd-entrypoint -p ${PID_DIR}/elasticsearch.pid --quiet",
|
||||
StandardOutput: 'journal',
|
||||
StandardError: 'inherit',
|
||||
LimitNOFILE: '65535',
|
||||
LimitNPROC: '4096',
|
||||
LimitAS: 'infinity',
|
||||
LimitFSIZE: 'infinity',
|
||||
TimeoutStopSec: '0',
|
||||
KillSignal: 'SIGTERM',
|
||||
KillMode: 'process',
|
||||
SendSIGKILL: 'no',
|
||||
SuccessExitStatus: '143',
|
||||
TimeoutStartSec: '900',
|
||||
},
|
||||
Install: {
|
||||
WantedBy: 'multi-user.target',
|
||||
}
|
||||
)
|
||||
verify false
|
||||
action :create
|
||||
unit_name "#{new_resource.service_name}.service"
|
||||
end
|
||||
|
||||
# flatten in an array here, in case the service_actions are a symbol vs. array
|
||||
[new_resource.service_actions].flatten.each do |act|
|
||||
passthrough_action(act)
|
||||
end
|
||||
end
|
||||
|
||||
# Passthrough actions to service[service_name]
|
||||
#
|
||||
action :enable do
|
||||
passthrough_action(:enable)
|
||||
end
|
||||
|
||||
action :disable do
|
||||
passthrough_action(:disable)
|
||||
end
|
||||
|
||||
action :start do
|
||||
passthrough_action(:start)
|
||||
end
|
||||
|
||||
action :stop do
|
||||
passthrough_action(:stop)
|
||||
end
|
||||
|
||||
action :restart do
|
||||
passthrough_action(:restart)
|
||||
end
|
||||
|
||||
action :status do
|
||||
passthrough_action(:status)
|
||||
end
|
||||
|
||||
action_class do
|
||||
def passthrough_action(action)
|
||||
svc_r = lookup_service_resource
|
||||
svc_r.run_action(action)
|
||||
new_resource.updated_by_last_action(true) if svc_r.updated_by_last_action?
|
||||
end
|
||||
|
||||
def lookup_service_resource
|
||||
rc = Chef.run_context.resource_collection
|
||||
rc.find("service[#{new_resource.service_name}]")
|
||||
rescue
|
||||
service new_resource.service_name do
|
||||
supports status: true, restart: true
|
||||
action :nothing
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user