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
|