
This patch converts the write_package_names function into a proper resource. Using the write_package_names only works if the function comes last in the puppet manifest. By making the same functionality a custom resource we allow for it to exist anywhere in the manifest and provide the same functionality. The new syntax would be: package_manifest{'/tmp/foo': ensure => present} Co-Authored-By: Martin Mágr <mmagr@redhat.com> Change-Id: If3e03b1983fed47082fac8ce63f975557dbc503c
40 lines
862 B
Ruby
40 lines
862 B
Ruby
|
|
require 'set'
|
|
|
|
|
|
Puppet::Type.type(:package_manifest).provide(:flat_file) do
|
|
|
|
desc "Write package manifest to a flat file"
|
|
|
|
def exists?
|
|
# exists? is always run before create, so we can create package list here
|
|
@packages = resource.catalog.resources.collect { |r|
|
|
r.name if r.type == :package
|
|
}.compact.sort
|
|
|
|
exists = File.exist?(resource[:path])
|
|
if exists
|
|
new_content = Set.new @packages
|
|
old_content = Set.new(
|
|
File.open(resource[:path], 'r').each_line.collect{ |pkg| pkg.strip() }
|
|
)
|
|
exists = new_content == old_content
|
|
end
|
|
exists
|
|
end
|
|
|
|
def create
|
|
FileUtils.mkdir_p(File.dirname(resource[:path]))
|
|
File.open(resource[:path], 'w') do |f|
|
|
@packages.each do |pkg_name|
|
|
f.puts(pkg_name)
|
|
end
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
File.delete(resource[:path])
|
|
end
|
|
|
|
end
|