Class: Chef::Resource::File::Verification::SystemdUnit

Inherits:
Chef::Resource::File::Verification show all
Includes:
Mixin::Which
Defined in:
lib/chef/resource/file/verification/systemd_unit.rb

Overview

Systemd provides a binary for verifying the correctness of unit files. Unfortunately some units have constraints on the filename meaning that normal verification against temp files won't work.

Working around that requires placing a copy of the temp file in a temp directory, under its real name and running the verification tool against that file.

Instance Attribute Summary

Attributes inherited from Chef::Resource::File::Verification

#output

Instance Method Summary collapse

Methods inherited from Chef::Resource::File::Verification

#logger, lookup, provides, provides?, #to_s, #verify_block, #verify_command, #verify_registered_verification

Methods included from Mixin::DescendantsTracker

#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited

Constructor Details

#initialize(parent_resource, command, opts, &block) ⇒ SystemdUnit

Returns a new instance of SystemdUnit.



42
43
44
45
# File 'lib/chef/resource/file/verification/systemd_unit.rb', line 42

def initialize(parent_resource, command, opts, &block)
  super
  @command = systemd_analyze_cmd
end

Instance Method Details

#systemd_analyze_cmdObject



60
61
62
# File 'lib/chef/resource/file/verification/systemd_unit.rb', line 60

def systemd_analyze_cmd
  @systemd_analyze_cmd ||= "#{systemd_analyze_path} verify %{path}"
end

#systemd_analyze_pathObject



64
65
66
# File 'lib/chef/resource/file/verification/systemd_unit.rb', line 64

def systemd_analyze_path
  @systemd_analyze_path ||= which("systemd-analyze")
end

#verify(path, opts = {}) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/chef/resource/file/verification/systemd_unit.rb', line 47

def verify(path, opts = {})
  return true unless systemd_analyze_path

  # Verification uses guards, which are not yet fully supported in TM
  return true if Chef::Config.target_mode?

  Dir.mktmpdir("chef-systemd-unit") do |dir|
    temp = "#{dir}/#{::File.basename(@parent_resource.path)}"
    ::TargetIO::FileUtils.cp(path, temp)
    verify_command(temp, opts)
  end
end