summaryrefslogtreecommitdiffstats
path: root/lib/puppet/provider
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-01-29 19:35:33 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-01-29 19:35:33 +0000
commit6c61f0cc1c3607cd61215c73aaa2cc9c13386f8b (patch)
treee0ad729333f4ee0fe4537414fbdef27eed449ced /lib/puppet/provider
parent8198e7e4861e9f98773176f78c23e1246399186a (diff)
downloadpuppet-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.rb27
-rw-r--r--lib/puppet/provider/nameservice/netinfo.rb13
-rw-r--r--lib/puppet/provider/user/netinfo.rb22
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 || [])