diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-01-29 19:35:33 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-01-29 19:35:33 +0000 |
commit | 6c61f0cc1c3607cd61215c73aaa2cc9c13386f8b (patch) | |
tree | e0ad729333f4ee0fe4537414fbdef27eed449ced /lib/puppet/provider | |
parent | 8198e7e4861e9f98773176f78c23e1246399186a (diff) | |
download | puppet-6c61f0cc1c3607cd61215c73aaa2cc9c13386f8b.tar.gz puppet-6c61f0cc1c3607cd61215c73aaa2cc9c13386f8b.tar.xz puppet-6c61f0cc1c3607cd61215c73aaa2cc9c13386f8b.zip |
Fixing #463. I redid all the autogen stuff so it can handle autogenerating string values for stupid os x.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2114 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet/provider')
-rw-r--r-- | lib/puppet/provider/nameservice.rb | 27 | ||||
-rw-r--r-- | lib/puppet/provider/nameservice/netinfo.rb | 13 | ||||
-rw-r--r-- | lib/puppet/provider/user/netinfo.rb | 22 |
3 files changed, 40 insertions, 22 deletions
diff --git a/lib/puppet/provider/nameservice.rb b/lib/puppet/provider/nameservice.rb index b10ac34ad..da2de7d57 100644 --- a/lib/puppet/provider/nameservice.rb +++ b/lib/puppet/provider/nameservice.rb @@ -109,10 +109,27 @@ class Puppet::Provider::NameService < Puppet::Provider @ops[state.name] || ("-" + state.name) end end + + # Autogenerate a value. Mostly used for uid/gid, but also used heavily with netinfo, because netinfo is stupid. + def autogen(field) + field = symbolize(field) + id_generators = {:user => :uid, :group => :gid} + if id_generators[@model.class.name] == field + return autogen_id(field) + else + if defined?(AUTOGEN_DEFAULTS) and value = AUTOGEN_DEFAULTS[field] + return value + elsif respond_to?("autogen_%s" % [field]) + return send("autogen_%s" % field) + else + return nil + end + end + end # Autogenerate either a uid or a gid. This is hard-coded: we can only # generate one field type per class. - def autogen + def autogen_id(field) highest = 0 group = method = nil @@ -141,14 +158,6 @@ class Puppet::Provider::NameService < Puppet::Provider return @@prevauto end - def autogen_gid - autogen(@model.class.name) - end - - def autogen_uid - autogen(@model.class.name) - end - def create self.ensure = :present end diff --git a/lib/puppet/provider/nameservice/netinfo.rb b/lib/puppet/provider/nameservice/netinfo.rb index 3cac8f0a7..b5e3d0536 100644 --- a/lib/puppet/provider/nameservice/netinfo.rb +++ b/lib/puppet/provider/nameservice/netinfo.rb @@ -108,7 +108,7 @@ class NetInfo < Puppet::Provider::NameService line2hash(line, params) } end - + # How to add an object. def addcmd creatorcmd("-create") @@ -136,18 +136,9 @@ class NetInfo < Puppet::Provider::NameService # Because our stupid type can't create the whole thing at once, # we have to do this hackishness. Yay. if arg == :present - # We need to generate the id if it's missing. @model.class.validstates.each do |name| next if name == :ensure - unless val = @model.should(name) - if (@model.class.name == :user and name == :uid) or - (@model.class.name == :group and name == :gid) - val = autogen() - else - # No value, and it's not required, so skip it. - next - end - end + next unless val = @model.should(name) || autogen(name) self.send(name.to_s + "=", val) end end diff --git a/lib/puppet/provider/user/netinfo.rb b/lib/puppet/provider/user/netinfo.rb index 6f82d1d34..de35213c1 100644 --- a/lib/puppet/provider/user/netinfo.rb +++ b/lib/puppet/provider/user/netinfo.rb @@ -3,13 +3,24 @@ require 'puppet/provider/nameservice/netinfo' Puppet::Type.type(:user).provide :netinfo, :parent => Puppet::Provider::NameService::NetInfo do - desc "User management in NetInfo." + desc "User management in NetInfo. Note that NetInfo is not smart enough to fill in default information + for users, so this provider will use default settings for home (``/var/empty``), shell (``/usr/bin/false``), + and comment (the user name, capitalized). These defaults are only used when the user is created." commands :nireport => "nireport", :niutil => "niutil" options :comment, :key => "realname" defaultfor :operatingsystem => :darwin + AUTOGEN_DEFAULTS = { + :home => "/var/empty", + :shell => "/usr/bin/false" + } + + def autogen_comment + return @model[:name].capitalize + end + def gid=(value) unless value.is_a?(Integer) raise ArgumentError, "gid= only accepts integers, not %s(%s)" % [value.class, value.inspect] @@ -43,7 +54,14 @@ Puppet::Type.type(:user).provide :netinfo, :parent => Puppet::Provider::NameServ # This is really lame. We have to iterate over each # of the groups and add us to them. def groups=(groups) - groups = groups.split(/\s*,\s*/) + case groups + when Fixnum: + groups = [groups.to_s] + when String + groups = groups.split(/\s*,\s*/) + else + raise Puppet::DevError, "got invalid groups value %s of type %s" % [groups.class, groups] + end # Get just the groups we need to modify diff = groups - (@is || []) |