resources/etcd_service_manager_systemd.rb (76 lines of code) (raw):
include EtcdCookbook::EtcdCommonProperties
resource_name :etcd_service_manager_systemd
provides :etcd_service_manager_systemd
provides :etcd_service_manager
property :service_timeout, Integer, default: 120
action :start do
user 'etcd' do
action :create
only_if { new_resource.run_user == 'etcd' }
end
file logfile do
owner new_resource.run_user
action :create
end
directory new_resource.data_dir do
owner new_resource.run_user
mode '0700'
action :create
end
# Needed for Debian / Ubuntu
directory '/usr/libexec' do
owner 'root'
group 'root'
mode '0755'
action :create
end
# cleanup the old systemd unit file
file "/lib/systemd/system/#{etcd_name}.service" do
action :delete
end
systemd_contents = {
Unit: {
Description: 'Etcd Application Container Engine',
Documentation: 'https://coreos.com/etcd',
After: 'network.target',
},
Service: {
Type: 'notify',
ExecStart: etcd_cmd,
Restart: 'always',
RestartSec: '10s',
LimitNOFILE: '1048576',
LimitNPROC: '1048576',
LimitCORE: 'infinity',
TimeoutStartSec: new_resource.service_timeout.to_s,
},
Install: {
WantedBy: 'multi-user.target',
},
}
systemd_contents[:Service][:User] = new_resource.run_user if new_resource.run_user
systemd_contents[:Service][:Environment] = "HTTP_PROXY=#{new_resource.http_proxy}" if new_resource.http_proxy
systemd_contents[:Service][:Environment] = "HTTPS_PROXY=#{new_resource.https_proxy}" if new_resource.https_proxy
systemd_contents[:Service][:Environment] = "NO_PROXY=#{new_resource.no_proxy}" if new_resource.no_proxy
systemd_unit "#{etcd_name}.service" do
content(systemd_contents)
action :create
notifies :restart, new_resource unless ::File.exist? "/etc/#{etcd_name}-firstconverge"
notifies :restart, new_resource if new_resource.auto_restart
end
file "/etc/#{etcd_name}-firstconverge" do
action :create
end
# service management resource
service etcd_name do
supports status: true
ignore_failure true if new_resource.ignore_failure
action [:enable, :start]
end
end
action :stop do
end
action :restart do
action_stop
action_start
end
action_class do
include EtcdCookbook::EtcdHelpers::Service
end