X-Git-Url: https://git.adam-barratt.org.uk/?p=mirror%2Fdsa-puppet.git;a=blobdiff_plain;f=3rdparty%2Fmodules%2Fconcat%2Flib%2Fpuppet%2Ftype%2Fconcat_fragment.rb;h=c66a55769bca5e76ee5d472611ee933e204a2c57;hp=45f080194aa4cbe1834515c099e27842b0e6526a;hb=30caaa85aed7015ca0d77216bff175eebd917eb7;hpb=6f656bd4265e3dab13b9af2bf96e9044322e9d8f diff --git a/3rdparty/modules/concat/lib/puppet/type/concat_fragment.rb b/3rdparty/modules/concat/lib/puppet/type/concat_fragment.rb index 45f080194..c66a55769 100644 --- a/3rdparty/modules/concat/lib/puppet/type/concat_fragment.rb +++ b/3rdparty/modules/concat/lib/puppet/type/concat_fragment.rb @@ -1,64 +1,95 @@ Puppet::Type.newtype(:concat_fragment) do - @doc = "Create a concat fragment to be used by concat. - the `concat_fragment` type creates a file fragment to be collected by concat based on the tag. - The example is based on exported resources. - - Example: - @@concat_fragment { \"uniqe_name_${::fqdn}\": - tag => 'unique_name', - order => 10, # Optional. Default to 10 - content => 'some content' # OR - content => template('template.erb') # OR - source => 'puppet:///path/to/file' - } - " - - newparam(:name, :namevar => true) do - desc "Unique name" + @doc = <<-DOC + @summary + Manages the fragment. + + @example + # The example is based on exported resources. + + concat_fragment { \"uniqe_name_${::fqdn}\": + tag => 'unique_name', + order => 10, # Optional. Default to 10 + content => 'some content' # OR + # content => template('template.erb') + source => 'puppet:///path/to/file' + } + DOC + + newparam(:name, namevar: true) do + desc 'Name of resource.' end newparam(:target) do - desc "Target" + desc <<-DOC + Required. Specifies the destination file of the fragment. Valid options: a string containing the path or title of the parent + concat_file resource. + DOC + + validate do |value| + raise ArgumentError, _('Target must be a String') unless value.is_a?(String) + end end newparam(:content) do - desc "Content" + desc <<-DOC + Supplies the content of the fragment. Note: You must supply either a content parameter or a source parameter. Valid options: a string + DOC + + validate do |value| + raise ArgumentError, _('Content must be a String') unless value.is_a?(String) + end end newparam(:source) do - desc "Source" + desc <<-DOC + Specifies a file to read into the content of the fragment. Note: You must supply either a content parameter or a source parameter. + Valid options: a string or an array, containing one or more Puppet URLs. + DOC + + validate do |value| + raise ArgumentError, _('Content must be a String or Array') unless [String, Array].include?(value.class) + end end newparam(:order) do - desc "Order" + desc <<-DOC + Reorders your fragments within the destination file. Fragments that share the same order number are ordered by name. The string + option is recommended. + DOC + defaultto '10' validate do |val| - fail Puppet::ParseError, '$order is not a string or integer.' if !(val.is_a? String or val.is_a? Integer) - fail Puppet::ParseError, "Order cannot contain '/', ':', or '\n'." if val.to_s =~ /[:\n\/]/ + raise Puppet::ParseError, _('$order is not a string or integer.') unless val.is_a?(String) || val.is_a?(Integer) + raise Puppet::ParseError, _('Order cannot contain \'/\', \':\', or \'\\n\'.') if val.to_s =~ %r{[:\n\/]} end end newparam(:tag) do - desc "Tag name to be used by concat to collect all concat_fragments by tag name" + desc 'Specifies a unique tag to be used by concat_file to reference and collect content.' end autorequire(:file) do - if catalog.resources.select {|x| x.class == Puppet::Type.type(:concat_file) and (x[:path] == self[:target] || x.title == self[:target]) }.empty? - warning "Target Concat_file with path of #{self[:target]} not found in the catalog" + found = catalog.resources.select do |resource| + next unless resource.is_a?(Puppet::Type.type(:concat_file)) + + resource[:path] == self[:target] || resource.title == self[:target] || + (resource[:tag] && resource[:tag] == self[:tag]) + end + + if found.empty? + tag_message = (self[:tag]) ? "or tag '#{self[:tag]} " : '' + warning "Target Concat_file with path or title '#{self[:target]}' #{tag_message}not found in the catalog" end end validate do # Check if target is set - fail Puppet::ParseError, "Target not set" if self[:target].nil? - - # Check if tag is set - fail Puppet::ParseError, "Tag not set" if self[:tag].nil? + raise Puppet::ParseError, _("No 'target' or 'tag' set") unless self[:target] || self[:tag] # Check if either source or content is set. raise error if none is set - fail Puppet::ParseError, "Set either 'source' or 'content'" if self[:source].nil? && self[:content].nil? + raise Puppet::ParseError, _("Set either 'source' or 'content'") if self[:source].nil? && self[:content].nil? # Check if both are set, if so rais error - fail Puppet::ParseError, "Can't use 'source' and 'content' at the same time" if !self[:source].nil? && !self[:content].nil? + raise Puppet::ParseError, _("Can't use 'source' and 'content' at the same time") if !self[:source].nil? && !self[:content].nil? end end