From d4abc496a29c600862b9e7175cdea675a7b6c946 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 7 Apr 2019 19:20:18 +0100 Subject: [PATCH] Add support for systemd timer units --- cookbooks/systemd/resources/timer.rb | 72 +++++++++++++++++++ cookbooks/systemd/templates/default/timer.erb | 51 +++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 cookbooks/systemd/resources/timer.rb create mode 100644 cookbooks/systemd/templates/default/timer.erb diff --git a/cookbooks/systemd/resources/timer.rb b/cookbooks/systemd/resources/timer.rb new file mode 100644 index 000000000..4cf920a9b --- /dev/null +++ b/cookbooks/systemd/resources/timer.rb @@ -0,0 +1,72 @@ +# +# Cookbook Name:: systemd +# Resource:: systemd_timer +# +# Copyright 2019, OpenStreetMap Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +default_action :create + +property :timer, String, :name_property => true +property :description, String, :required => true +property :after, [String, Array] +property :wants, [String, Array] +property :on_active_sec, [Integer, String] +property :on_boot_sec, [Integer, String] +property :on_startup_sec, [Integer, String] +property :on_unit_active_sec, [Integer, String] +property :on_unit_inactive_sec, [Integer, String] +property :on_calendar, String +property :accuracy_sec, [Integer, String] +property :randomized_delay_sec, [Integer, String] +property :unit, String +property :persistent, [TrueClass, FalseClass] +property :wake_system, [TrueClass, FalseClass] +property :remain_after_elapse, [TrueClass, FalseClass] + +action :create do + timer_variables = new_resource.to_hash + + template "/etc/systemd/system/#{new_resource.timer}.timer" do + cookbook "systemd" + source "timer.erb" + owner "root" + group "root" + mode 0o644 + variables timer_variables + end + + execute "systemctl-reload-#{new_resource.timer}.timer" do + action :nothing + command "systemctl daemon-reload" + user "root" + group "root" + subscribes :run, "template[/etc/systemd/system/#{new_resource.timer}.timer]" + end +end + +action :delete do + file "/etc/systemd/system/#{new_resource.timer}.timer" do + action :delete + end + + execute "systemctl-reload-#{new_resource.timer}.timer" do + action :nothing + command "systemctl daemon-reload" + user "root" + group "root" + subscribes :run, "file[/etc/systemd/system/#{new_resource.timer}.timer]" + end +end diff --git a/cookbooks/systemd/templates/default/timer.erb b/cookbooks/systemd/templates/default/timer.erb new file mode 100644 index 000000000..8ebdd90ac --- /dev/null +++ b/cookbooks/systemd/templates/default/timer.erb @@ -0,0 +1,51 @@ +# DO NOT EDIT - This file is being maintained by Chef + +[Unit] +Description=<%= @description %> +<% if @after -%> +After=<%= Array(@after).join(" ") %> +<% end -%> +<% if @wants -%> +Wants=<%= Array(@wants).join(" ") %> +<% end -%> + +[Timer] +<% if @on_active_sec -%> +OnActiveSec=<%= @on_active_sec %> +<% end -%> +<% if @on_boot_sec -%> +OnBootSec=<%= @on_boot_sec %> +<% end -%> +<% if @on_startup_sec -%> +OnStartupSec=<%= @on_startup_sec %> +<% end -%> +<% if @on_unit_active_sec -%> +OnUnitActiveSec=<%= @on_unit_active_sec %> +<% end -%> +<% if @on_unit_inactive_sec -%> +OnUnitInactiveSec=<%= @on_unit_inactive_sec %> +<% end -%> +<% if @on_calendar -%> +OnCalendar=<%= @on_calendar %> +<% end -%> +<% if @accuracy_sec -%> +AccuracySec=<%= @accuracy_sec %> +<% end -%> +<% if @randomized_delay_sec -%> +RandomizedDelaySec=<%= @randomized_delay_sec %> +<% end -%> +<% if @unit -%> +Unit=<%= @unit %> +<% end -%> +<% if @persistent -%> +Persistent=<%= @persistent %> +<% end -%> +<% if @wake_system -%> +WakeSystem=<%= @wake_system %> +<% end -%> +<% if @remain_after_elapse -%> +RemainAfterElapse=<%= @remain_after_elapse %> +<% end -%> + +[Install] +WantedBy=multi-user.target -- 2.43.2