From 3cc3389c27f25ad1f6f4e956833578ebf4ad22f5 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Thu, 8 Aug 2019 19:04:05 +0100 Subject: [PATCH] Use systemd cookbook to configure cron dropin --- cookbooks/systemd/resources/service.rb | 47 ++++++++++++++----- .../systemd/templates/default/service.erb | 8 ++++ cookbooks/tools/metadata.rb | 1 + cookbooks/tools/recipes/default.rb | 17 +++---- .../tools/templates/default/cron.service.erb | 2 - 5 files changed, 52 insertions(+), 23 deletions(-) delete mode 100644 cookbooks/tools/templates/default/cron.service.erb diff --git a/cookbooks/systemd/resources/service.rb b/cookbooks/systemd/resources/service.rb index c2d125b18..b01f6787b 100644 --- a/cookbooks/systemd/resources/service.rb +++ b/cookbooks/systemd/resources/service.rb @@ -20,12 +20,11 @@ default_action :create property :service, String, :name_property => true -property :description, String, :required => true +property :dropin, String +property :description, String property :after, [String, Array] property :wants, [String, Array] -property :type, String, - :default => "simple", - :is => %w[simple forking oneshot dbus notify idle] +property :type, String, :is => %w[simple forking oneshot dbus notify idle] property :limit_nofile, Integer property :limit_as, [Integer, String] property :limit_cpu, [Integer, String] @@ -38,7 +37,7 @@ property :user, String property :group, String property :working_directory, String property :exec_start_pre, String -property :exec_start, String, :required => true +property :exec_start, String property :exec_start_post, String property :exec_stop, String property :exec_reload, String @@ -65,6 +64,10 @@ property :pid_file, String action :create do service_variables = new_resource.to_hash + unless new_resource.dropin + service_variables[:type] ||= "simple" + end + if new_resource.environment_file.is_a?(Hash) template "/etc/default/#{new_resource.service}" do cookbook "systemd" @@ -78,21 +81,29 @@ action :create do service_variables[:environment_file] = "/etc/default/#{new_resource.service}" end - template "/etc/systemd/system/#{new_resource.service}.service" do + if new_resource.dropin + directory dropin_directory do + owner "root" + group "root" + mode 0o755 + end + end + + template config_name do cookbook "systemd" source "service.erb" owner "root" group "root" mode 0o644 variables service_variables + notifies :run, "execute[systemctl-reload]" end - execute "systemctl-reload-#{new_resource.service}.service" do + execute "systemctl-reload" do action :nothing command "systemctl daemon-reload" user "root" group "root" - subscribes :run, "template[/etc/systemd/system/#{new_resource.service}.service]" end end @@ -102,15 +113,29 @@ action :delete do only_if { new_resource.environment_file.is_a?(Hash) } end - file "/etc/systemd/system/#{new_resource.service}.service" do + file config_name do action :delete + notifies :run, "execute[systemctl-reload]" end - execute "systemctl-reload-#{new_resource.service}.service" do + execute "systemctl-reload" do action :nothing command "systemctl daemon-reload" user "root" group "root" - subscribes :run, "file[/etc/systemd/system/#{new_resource.service}.service]" + end +end + +action_class do + def dropin_directory + "/etc/systemd/system/#{new_resource.service}.service.d" + end + + def config_name + if new_resource.dropin + "#{dropin_directory}/#{new_resource.dropin}.conf" + else + "/etc/systemd/system/#{new_resource.service}.service" + end end end diff --git a/cookbooks/systemd/templates/default/service.erb b/cookbooks/systemd/templates/default/service.erb index 151b01790..9620d1c8d 100644 --- a/cookbooks/systemd/templates/default/service.erb +++ b/cookbooks/systemd/templates/default/service.erb @@ -1,7 +1,9 @@ # DO NOT EDIT - This file is being maintained by Chef [Unit] +<% if @description -%> Description=<%= @description %> +<% end -%> <% if @after -%> After=<%= Array(@after).join(" ") %> <% end -%> @@ -10,7 +12,9 @@ Wants=<%= Array(@wants).join(" ") %> <% end -%> [Service] +<% if @type -%> Type=<%= @type %> +<% end -%> <% if @limit_nofile -%> LimitNOFILE=<%= @limit_nofile %> <% end -%> @@ -47,7 +51,9 @@ WorkingDirectory=<%= @working_directory %> <% if @exec_start_pre -%> ExecStartPre=<%= @exec_start_pre %> <% end -%> +<% if @exec_start -%> ExecStart=<%= @exec_start %> +<% end -%> <% if @exec_start_post -%> ExecStartPost=<%= @exec_start_post %> <% end -%> @@ -102,6 +108,8 @@ TimeoutSec=<%= @timeout_sec %> <% if @pid_file -%> PIDFile=<%= @pid_file %> <% end -%> +<% unless @dropin -%> [Install] WantedBy=multi-user.target +<% end -%> diff --git a/cookbooks/tools/metadata.rb b/cookbooks/tools/metadata.rb index 47873a625..acb65d945 100644 --- a/cookbooks/tools/metadata.rb +++ b/cookbooks/tools/metadata.rb @@ -6,3 +6,4 @@ description "Installs system administration tools" long_description IO.read(File.join(File.dirname(__FILE__), "README.md")) version "1.0.0" supports "ubuntu" +depends "systemd" diff --git a/cookbooks/tools/recipes/default.rb b/cookbooks/tools/recipes/default.rb index 5154ecd12..4ab9414df 100644 --- a/cookbooks/tools/recipes/default.rb +++ b/cookbooks/tools/recipes/default.rb @@ -53,19 +53,16 @@ file "/etc/init.d/screen-cleanup" do action :delete end -# Create drop in directory for cron service -directory "/etc/systemd/system/cron.service.d" do - owner "root" - group "root" - mode 0o755 +# Cleanup unused file +file "/etc/systemd/system/cron.service.d/chef.conf" do + action :delete end # Configure cron to run in the local timezone of the machine -template "/etc/systemd/system/cron.service.d/chef.conf" do - source "cron.service.erb" - owner "root" - group "root" - mode 0o644 +systemd_service "cron-timezone" do + service "cron" + dropin "timezone" + environment "TZ" => node[:timezone] notifies :restart, "service[cron]" only_if { node[:timezone] } end diff --git a/cookbooks/tools/templates/default/cron.service.erb b/cookbooks/tools/templates/default/cron.service.erb deleted file mode 100644 index c659ab22e..000000000 --- a/cookbooks/tools/templates/default/cron.service.erb +++ /dev/null @@ -1,2 +0,0 @@ -[Service] -Environment=TZ=<%= node[:timezone] -%> -- 2.39.5