diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-11-13 08:40:35 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-11-13 08:40:35 +0000 |
commit | 5d2f95475d558197a56674cb641fa5def8f16065 (patch) | |
tree | bebcad12ac2296764f926ef6194d2d6b7fb5003d /lib/puppet | |
parent | f8b9e866082794e5d7fb0082ebf4df24823b2053 (diff) | |
download | puppet-5d2f95475d558197a56674cb641fa5def8f16065.tar.gz puppet-5d2f95475d558197a56674cb641fa5def8f16065.tar.xz puppet-5d2f95475d558197a56674cb641fa5def8f16065.zip |
Fixes to the test system, and a couple of small fixes to the main code. Also, disabled the "port" type, because I cannot seem to model it correctly.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1875 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet')
-rwxr-xr-x | lib/puppet/provider/port/parsed.rb | 340 | ||||
-rwxr-xr-x | lib/puppet/type/port.rb | 232 | ||||
-rwxr-xr-x | lib/puppet/type/user.rb | 2 | ||||
-rw-r--r-- | lib/puppet/type/yumrepo.rb | 2 |
4 files changed, 289 insertions, 287 deletions
diff --git a/lib/puppet/provider/port/parsed.rb b/lib/puppet/provider/port/parsed.rb index 17633e23a..f5f12d3a1 100755 --- a/lib/puppet/provider/port/parsed.rb +++ b/lib/puppet/provider/port/parsed.rb @@ -1,174 +1,174 @@ require 'puppet/provider/parsedfile' -services = nil -case Facter.value(:operatingsystem) -when "Solaris": services = "/etc/inet/services" -else - services = "/etc/services" -end - -Puppet::Type.type(:port).provide(:parsed, - :parent => Puppet::Provider::ParsedFile, - :default_target => services, - :filetype => :flat -) do - text_line :comment, :match => /^\s*#/ - text_line :blank, :match => /^\s*$/ - - # We're cheating horribly here -- we don't support ddp, because it assigns - # the same number to already-used names, and the same name to different - # numbers. - text_line :ddp, :match => /^\S+\s+\d+\/ddp/ - - # Also, just ignore the lines on OS X that don't have service names. - text_line :funky_darwin, :match => /^\s+\d+\// - - # We have to manually parse the line, since it's so darn complicated. - record_line :parsed, :fields => %w{name port protocols alias description}, - :optional => %w{alias description} do |line| - if line =~ /\/ddp/ - raise "missed ddp in %s" % line - end - # The record might contain multiple port lines separated by \n. - hashes = line.split("\n").collect { |l| parse_port(l) } - - # It's easy if there's just one hash. - if hashes.length == 1 - return hashes.shift - end - - # Else, merge the two records into one. - return port_merge(*hashes) - end - - # Override how we split into lines, so that we always treat both protocol - # lines as a single line. This drastically simplifies merging the two lines - # into one record. - def self.lines(text) - names = {} - lines = [] - - # We organize by number, because that's apparently how the ports work. - # You'll never be able to use Puppet to manage multiple entries - # with the same name but different numbers, though. - text.split("\n").each do |line| - if line =~ /^([-\w]+)\s+(\d+)\/[^d]/ # We want to skip ddp proto stuff - names[$1] ||= [] - names[$1] << line - lines << [:special, $1] - else - lines << line - end - end - - # Now, return each line in order, but join the ones with the same name - lines.collect do |line| - if line.is_a?(Array) - name = line[1] - if names[name] - t = names[name].join("\n") - names.delete(name) - t - end - else - line - end - end.reject { |l| l.nil? } - end - - # Parse a single port line, returning a hash. - def self.parse_port(line) - hash = {} - if line.sub!(/^(\S+)\s+(\d+)\/(\w+)\s*/, '') - hash[:name] = $1 - hash[:number] = $2 - hash[:protocols] = [$3] - - unless line == "" - line.sub!(/^([^#]+)\s*/) do |value| - aliases = $1 - - # Remove any trailing whitespace - aliases.strip! - unless aliases =~ /^\s*$/ - hash[:alias] = aliases.split(/\s+/) - end - - "" - end - - line.sub!(/^\s*#\s*(.+)$/) do |value| - desc = $1 - unless desc =~ /^\s*$/ - hash[:description] = desc.sub(/\s*$/, '') - end - - "" - end - end - else - if line =~ /^\s+\d+/ and - Facter["operatingsystem"].value == "Darwin" - #Puppet.notice "Skipping wonky OS X port entry %s" % - # line.inspect - next - end - Puppet.notice "Ignoring unparseable line '%s' in %s" % [line, self.target] - end - - if hash.empty? - return nil - else - return hash - end - end - - # Merge two records into one. - def self.port_merge(one, two) - keys = [one.keys, two.keys].flatten.uniq - - # We'll be returning the 'one' hash. so make any necessary modifications - # to it. - keys.each do |key| - # The easy case - if one[key] == two[key] - next - elsif one[key] and ! two[key] - next - elsif ! one[key] and two[key] - one[key] = two[key] - elsif one[key].is_a?(Array) and two[key].is_a?(Array) - one[key] = [one[key], two[key]].flatten.uniq - else - # Keep the info from the first hash, so don't do anything - #Puppet.notice "Cannot merge %s in %s with %s" % - # [key, one.inspect, two.inspect] - end - end - - return one - end - - # Convert the current object into one or more services entry. - def self.to_line(hash) - unless hash[:record_type] == :parsed - return super - end - - # Strangely, most sites seem to use tabs as separators. - hash[:protocols].collect { |proto| - str = "%s\t\t%s/%s" % [hash[:name], hash[:number], proto] - - if value = hash[:alias] and value != :absent - str += "\t\t%s" % value.join(" ") - end - - if value = hash[:description] and value != :absent - str += "\t# %s" % value - end - str - }.join("\n") - end -end +#services = nil +#case Facter.value(:operatingsystem) +#when "Solaris": services = "/etc/inet/services" +#else +# services = "/etc/services" +#end +# +#Puppet::Type.type(:port).provide(:parsed, +# :parent => Puppet::Provider::ParsedFile, +# :default_target => services, +# :filetype => :flat +#) do +# text_line :comment, :match => /^\s*#/ +# text_line :blank, :match => /^\s*$/ +# +# # We're cheating horribly here -- we don't support ddp, because it assigns +# # the same number to already-used names, and the same name to different +# # numbers. +# text_line :ddp, :match => /^\S+\s+\d+\/ddp/ +# +# # Also, just ignore the lines on OS X that don't have service names. +# text_line :funky_darwin, :match => /^\s+\d+\// +# +# # We have to manually parse the line, since it's so darn complicated. +# record_line :parsed, :fields => %w{name port protocols alias description}, +# :optional => %w{alias description} do |line| +# if line =~ /\/ddp/ +# raise "missed ddp in %s" % line +# end +# # The record might contain multiple port lines separated by \n. +# hashes = line.split("\n").collect { |l| parse_port(l) } +# +# # It's easy if there's just one hash. +# if hashes.length == 1 +# return hashes.shift +# end +# +# # Else, merge the two records into one. +# return port_merge(*hashes) +# end +# +# # Override how we split into lines, so that we always treat both protocol +# # lines as a single line. This drastically simplifies merging the two lines +# # into one record. +# def self.lines(text) +# names = {} +# lines = [] +# +# # We organize by number, because that's apparently how the ports work. +# # You'll never be able to use Puppet to manage multiple entries +# # with the same name but different numbers, though. +# text.split("\n").each do |line| +# if line =~ /^([-\w]+)\s+(\d+)\/[^d]/ # We want to skip ddp proto stuff +# names[$1] ||= [] +# names[$1] << line +# lines << [:special, $1] +# else +# lines << line +# end +# end +# +# # Now, return each line in order, but join the ones with the same name +# lines.collect do |line| +# if line.is_a?(Array) +# name = line[1] +# if names[name] +# t = names[name].join("\n") +# names.delete(name) +# t +# end +# else +# line +# end +# end.reject { |l| l.nil? } +# end +# +# # Parse a single port line, returning a hash. +# def self.parse_port(line) +# hash = {} +# if line.sub!(/^(\S+)\s+(\d+)\/(\w+)\s*/, '') +# hash[:name] = $1 +# hash[:number] = $2 +# hash[:protocols] = [$3] +# +# unless line == "" +# line.sub!(/^([^#]+)\s*/) do |value| +# aliases = $1 +# +# # Remove any trailing whitespace +# aliases.strip! +# unless aliases =~ /^\s*$/ +# hash[:alias] = aliases.split(/\s+/) +# end +# +# "" +# end +# +# line.sub!(/^\s*#\s*(.+)$/) do |value| +# desc = $1 +# unless desc =~ /^\s*$/ +# hash[:description] = desc.sub(/\s*$/, '') +# end +# +# "" +# end +# end +# else +# if line =~ /^\s+\d+/ and +# Facter["operatingsystem"].value == "Darwin" +# #Puppet.notice "Skipping wonky OS X port entry %s" % +# # line.inspect +# next +# end +# Puppet.notice "Ignoring unparseable line '%s' in %s" % [line, self.target] +# end +# +# if hash.empty? +# return nil +# else +# return hash +# end +# end +# +# # Merge two records into one. +# def self.port_merge(one, two) +# keys = [one.keys, two.keys].flatten.uniq +# +# # We'll be returning the 'one' hash. so make any necessary modifications +# # to it. +# keys.each do |key| +# # The easy case +# if one[key] == two[key] +# next +# elsif one[key] and ! two[key] +# next +# elsif ! one[key] and two[key] +# one[key] = two[key] +# elsif one[key].is_a?(Array) and two[key].is_a?(Array) +# one[key] = [one[key], two[key]].flatten.uniq +# else +# # Keep the info from the first hash, so don't do anything +# #Puppet.notice "Cannot merge %s in %s with %s" % +# # [key, one.inspect, two.inspect] +# end +# end +# +# return one +# end +# +# # Convert the current object into one or more services entry. +# def self.to_line(hash) +# unless hash[:record_type] == :parsed +# return super +# end +# +# # Strangely, most sites seem to use tabs as separators. +# hash[:protocols].collect { |proto| +# str = "%s\t\t%s/%s" % [hash[:name], hash[:number], proto] +# +# if value = hash[:alias] and value != :absent +# str += "\t\t%s" % value.join(" ") +# end +# +# if value = hash[:description] and value != :absent +# str += "\t# %s" % value +# end +# str +# }.join("\n") +# end +#end # $Id$ diff --git a/lib/puppet/type/port.rb b/lib/puppet/type/port.rb index c1eed299b..0460c0972 100755 --- a/lib/puppet/type/port.rb +++ b/lib/puppet/type/port.rb @@ -1,119 +1,121 @@ require 'puppet/type/parsedtype' -module Puppet - newtype(:port) do - @doc = "Installs and manages port entries. For most systems, these - entries will just be in /etc/services, but some systems (notably OS X) - will have different solutions." - - newstate(:protocols) do - desc "The protocols the port uses. Valid values are *udp* and *tcp*. - Most services have both protocols, but not all. If you want - both protocols, you must specify that; Puppet replaces the - current values, it does not merge with them. If you specify - multiple protocols they must be as an array." - - def is=(value) - case value - when String - @is = value.split(/\s+/) - else - @is = value - end - end - - def is - @is - end - - # We actually want to return the whole array here, not just the first - # value. - def should - if defined? @should - if @should[0] == :absent - return :absent - else - return @should - end - else - return nil - end - end - - validate do |value| - valids = ["udp", "tcp", "ddp", :absent] - unless valids.include? value - raise Puppet::Error, - "Protocols can be either 'udp' or 'tcp', not %s" % value - end - end - end - - newstate(:number) do - desc "The port number." - end - - newstate(:description) do - desc "The port description." - end - - newstate(:alias) do - desc "Any aliases the port might have. Multiple values must be - specified as an array. Note that this state has the same name as - one of the metaparams; using this state to set aliases will make - those aliases available in your Puppet scripts and also on disk." - - # We actually want to return the whole array here, not just the first - # value. - def should - if defined? @should - if @should[0] == :absent - return :absent - else - return @should - end - else - return nil - end - end - - validate do |value| - if value.is_a? String and value =~ /\s/ - raise Puppet::Error, - "Aliases cannot have whitespace in them: %s" % - value.inspect - end - end - - munge do |value| - unless value == "absent" or value == :absent - # Add the :alias metaparam in addition to the state - @parent.newmetaparam( - @parent.class.metaparamclass(:alias), value - ) - end - value - end - end - - newstate(:target) do - desc "The file in which to store service information. Only used by - those providers that write to disk (i.e., not NetInfo)." - - defaultto { if @parent.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile) - @parent.class.defaultprovider.default_target - else - nil - end - } - end - - newparam(:name) do - desc "The port name." - - isnamevar - end - end -end +#module Puppet +# newtype(:port) do +# @doc = "Installs and manages port entries. For most systems, these +# entries will just be in /etc/services, but some systems (notably OS X) +# will have different solutions." +# +# ensurable +# +# newstate(:protocols) do +# desc "The protocols the port uses. Valid values are *udp* and *tcp*. +# Most services have both protocols, but not all. If you want +# both protocols, you must specify that; Puppet replaces the +# current values, it does not merge with them. If you specify +# multiple protocols they must be as an array." +# +# def is=(value) +# case value +# when String +# @is = value.split(/\s+/) +# else +# @is = value +# end +# end +# +# def is +# @is +# end +# +# # We actually want to return the whole array here, not just the first +# # value. +# def should +# if defined? @should +# if @should[0] == :absent +# return :absent +# else +# return @should +# end +# else +# return nil +# end +# end +# +# validate do |value| +# valids = ["udp", "tcp", "ddp", :absent] +# unless valids.include? value +# raise Puppet::Error, +# "Protocols can be either 'udp' or 'tcp', not %s" % value +# end +# end +# end +# +# newstate(:number) do +# desc "The port number." +# end +# +# newstate(:description) do +# desc "The port description." +# end +# +# newstate(:alias) do +# desc "Any aliases the port might have. Multiple values must be +# specified as an array. Note that this state has the same name as +# one of the metaparams; using this state to set aliases will make +# those aliases available in your Puppet scripts and also on disk." +# +# # We actually want to return the whole array here, not just the first +# # value. +# def should +# if defined? @should +# if @should[0] == :absent +# return :absent +# else +# return @should +# end +# else +# return nil +# end +# end +# +# validate do |value| +# if value.is_a? String and value =~ /\s/ +# raise Puppet::Error, +# "Aliases cannot have whitespace in them: %s" % +# value.inspect +# end +# end +# +# munge do |value| +# unless value == "absent" or value == :absent +# # Add the :alias metaparam in addition to the state +# @parent.newmetaparam( +# @parent.class.metaparamclass(:alias), value +# ) +# end +# value +# end +# end +# +# newstate(:target) do +# desc "The file in which to store service information. Only used by +# those providers that write to disk (i.e., not NetInfo)." +# +# defaultto { if @parent.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile) +# @parent.class.defaultprovider.default_target +# else +# nil +# end +# } +# end +# +# newparam(:name) do +# desc "The port name." +# +# isnamevar +# end +# end +#end # $Id$ diff --git a/lib/puppet/type/user.rb b/lib/puppet/type/user.rb index 2fffc6f48..661d10e4a 100755 --- a/lib/puppet/type/user.rb +++ b/lib/puppet/type/user.rb @@ -89,7 +89,7 @@ module Puppet end # Set ourselves to whatever our should value is. - self.set + self.set(self.should) end end diff --git a/lib/puppet/type/yumrepo.rb b/lib/puppet/type/yumrepo.rb index 92f83b384..5c06edc57 100644 --- a/lib/puppet/type/yumrepo.rb +++ b/lib/puppet/type/yumrepo.rb @@ -21,7 +21,7 @@ module Puppet if insync? result = nil else - result = set + result = set(self.should) if should == :absent parent.section[inikey] = nil else |