From: Tom Hughes Date: Sat, 4 Mar 2017 11:16:13 +0000 (+0000) Subject: Add support for systemd path units X-Git-Url: https://git.openstreetmap.org/chef.git/commitdiff_plain/8ae6c72f340507fad8c3d75ad7543062b2c84bff Add support for systemd path units --- diff --git a/cookbooks/systemd/resources/path.rb b/cookbooks/systemd/resources/path.rb new file mode 100644 index 000000000..a2838e1b1 --- /dev/null +++ b/cookbooks/systemd/resources/path.rb @@ -0,0 +1,68 @@ +# +# Cookbook Name:: systemd +# Resource:: systemd_path +# +# Copyright 2017, 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 +# +# http://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 :name, String +property :description, String, :required => true +property :after, [String, Array] +property :wants, [String, Array] +property :path_exists, [String, Array] +property :path_exists_glob, [String, Array] +property :path_changed, [String, Array] +property :path_modified, [String, Array] +property :directory_not_empty, [String, Array] +property :unit, String +property :make_directory, [TrueClass, FalseClass] +property :directory_mode, Integer + +action :create do + path_variables = new_resource.to_hash + + template "/etc/systemd/system/#{name}.path" do + cookbook "systemd" + source "path.erb" + owner "root" + group "root" + mode 0o644 + variables path_variables + end + + execute "systemctl-reload-#{name}.path" do + action :nothing + command "systemctl daemon-reload" + user "root" + group "root" + subscribes :run, "template[/etc/systemd/system/#{name}.path]" + end +end + +action :delete do + file "/etc/systemd/system/#{name}.path" do + action :delete + end + + execute "systemctl-reload-#{name}.path" do + action :nothing + command "systemctl daemon-reload" + user "root" + group "root" + subscribes :run, "file[/etc/systemd/system/#{name}.path]" + end +end diff --git a/cookbooks/systemd/templates/default/path.erb b/cookbooks/systemd/templates/default/path.erb new file mode 100644 index 000000000..8d0852b19 --- /dev/null +++ b/cookbooks/systemd/templates/default/path.erb @@ -0,0 +1,37 @@ +# 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 -%> + +[Path] +<% Array(@path_exists).each do |path| -%> +PathExists=<%= path %> +<% end -%> +<% Array(@path_exists_glob).each do |path| -%> +PathExistsGlob=<%= path %> +<% end -%> +<% Array(@path_changed).each do |path| -%> +PathChanged=<%= path %> +<% end -%> +<% Array(@path_modified).each do |path| -%> +PathModified=<%= path %> +<% end -%> +<% Array(@directory_not_empty).each do |path| -%> +DirectoryNotEmpty=<%= path %> +<% end -%> +Unit=<%= @unit %> +<% if @make_directory -%> +MakeDirectory=<%= @make_directory %> +<% end -%> +<% if @directory_mode -%> +DirectoryMode=<%= sprintf("0%o", @directory_mode) %> +<% end -%> + +[Install] +WantedBy=multi-user.target