diff --git a/lib/puppet/provider/entropy_splitdebug/parsed.rb b/lib/puppet/provider/entropy_splitdebug/parsed.rb new file mode 100644 index 0000000..7bf34b5 --- /dev/null +++ b/lib/puppet/provider/entropy_splitdebug/parsed.rb @@ -0,0 +1,47 @@ +require 'puppet/provider/parsedfile' +file = "/etc/entropy/packages/package.splitdebug" + +Puppet::Type.type(:entropy_splitdebug).provide(:parsed, + :parent => Puppet::Provider::ParsedFile, + :default_target => file, + :filetype => :flat +) do + + desc "File splitdebug provider for entropy packages" + + defaultfor :operatingsystem => :sabayon + + text_line :blank, + :match => /^\s*$/ + + text_line :comment, + :match => /^\s*#/ + + text_line :unmanaged, + :match => %r{^([<>]?=)?([a-zA-Z+\/-]*)(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::(\w+))?(?:\[([^\]]*)\])?(?:#(\w+))?(?:::(\w+))?\s*$} + + record_line :parsed, + :fields => %w{operator package version slot use tag repo name}, + :match => %r{^([<>]?=)?([a-zA-Z+\/-]*)(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::(\w+))?(?:\[([^\]]*)\])?(?:#(\w+))?(?:::(\w+))?\s+# Puppet Name: (.*)\s*$}, + :block_eval => :instance do + + def to_line(record) + line = "" + line += record[:operator] if record[:operator] + line += record[:package] + line += "-" + record[:version] if record[:version] + line += ":" + record[:slot] if record[:slot] + line += "[" + record[:use] + "]" if record[:use] + line += "#" + record[:tag] if record[:tag] + line += "::" + record[:repo] if record[:repo] + line += " # Puppet Name: " + record[:name] + + line + end + + end + +end + +# vim: set ts=2 shiftwidth=2 expandtab : + diff --git a/lib/puppet/type/entropy_splitdebug.rb b/lib/puppet/type/entropy_splitdebug.rb new file mode 100644 index 0000000..db9c376 --- /dev/null +++ b/lib/puppet/type/entropy_splitdebug.rb @@ -0,0 +1,64 @@ +Puppet::Type.newtype(:entropy_splitdebug) do + @desc = "Manages splitdebug for packages in Entropy" + + ensurable + + newparam(:name) do + desc "Unique name for this splitdebug specification" + end + + newproperty(:operator) do + desc "Operator that applies to the version. If not specified, defaults to '=' if a version is provided, not used if no version is provided" + end + + newproperty(:package) do + desc "Name of the package with splitdebug" + end + + newproperty(:version) do + desc "Version of the package" + + validate do |value| + raise(ArgumentError, "") if value !~ /^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$/ + end + end + + newproperty(:slot) do + desc "Slot the package is in" + end + + newproperty(:use) do + desc "Useflags for the package" + end + + newproperty(:tag) do + desc "Tag for the package" + end + + newproperty(:repo) do + desc "Repo for the package" + end + + newproperty(:target) do + desc "Location of the package.splitdebug file being managed" + + defaultto { + if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile) + @resource.class.defaultprovider.default_target + else + nil + end + } + end + + validate do + raise(ArgumentError, "Version is required when an operator is specified") if self[:version].nil? && !self[:operator].nil? + end + + autobefore(:package) do + [self[:package]] + end +end + +# vim: set ts=2 sw=2 expandtab: +