diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-03-19 21:29:08 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-03-19 21:29:08 +0000 |
commit | 60ea7d2a9df65f3c2ed492ec4447420c5e5151fe (patch) | |
tree | de99ac27de31df3cadc4b721406b579404106d9c /lib/puppet/provider | |
parent | 3d17685f9954b584cf84a6fe224b2513007108f0 (diff) | |
download | puppet-60ea7d2a9df65f3c2ed492ec4447420c5e5151fe.tar.gz puppet-60ea7d2a9df65f3c2ed492ec4447420c5e5151fe.tar.xz puppet-60ea7d2a9df65f3c2ed492ec4447420c5e5151fe.zip |
Fixing #432 - you can now manage home dirs with users. You cannot yet purge home directories, because there is still controversy over how that should be done. Also, allowdupe is now handled like a feature, which is, um, better.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2328 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet/provider')
-rw-r--r-- | lib/puppet/provider/nameservice.rb | 32 | ||||
-rw-r--r-- | lib/puppet/provider/user/useradd.rb | 11 |
2 files changed, 23 insertions, 20 deletions
diff --git a/lib/puppet/provider/nameservice.rb b/lib/puppet/provider/nameservice.rb index 377393973..3af5bfe35 100644 --- a/lib/puppet/provider/nameservice.rb +++ b/lib/puppet/provider/nameservice.rb @@ -84,6 +84,19 @@ class Puppet::Provider::NameService < Puppet::Provider return names end + def model=(model) + super + @model.validproperties.each do |prop| + next if prop == :ensure + unless public_method_defined?(prop) + define_method(prop) { get(prop) || :absent} + end + unless public_method_defined?(prop.to_s + "+") + define_method(prop.to_s + "=") { |*vals| set(prop, *vals) } + end + end + end + # This is annoying, but there really aren't that many options, # and this *is* built into Ruby. def section @@ -309,25 +322,6 @@ class Puppet::Provider::NameService < Puppet::Provider @objectinfo = nil end - # - def method_missing(name, *args) - name = name.to_s - - # Make sure it's a valid property. We go up our class structure instead of - # our model's because the model is fake during testing. - unless self.class.model.validproperty?(name.sub("=",'')) - raise Puppet::DevError, "%s is not a valid %s property" % - [name, @model.class.name] - end - - # Each class has to override this manually - if name =~ /=/ - set(name.to_s.sub("=", ''), *args) - else - return get(name.intern) || :absent - end - end - def set(param, value) #self.class.validate(param, value) cmd = modifycmd(param, value) diff --git a/lib/puppet/provider/user/useradd.rb b/lib/puppet/provider/user/useradd.rb index 55cc2d5dd..8ed0a9bd1 100644 --- a/lib/puppet/provider/user/useradd.rb +++ b/lib/puppet/provider/user/useradd.rb @@ -17,6 +17,8 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ value !~ /\s/ end + has_features :manages_homedir, :allows_duplicates + def addcmd cmd = [command(:add)] @model.class.validproperties.each do |property| @@ -33,10 +35,17 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ cmd << "-M" else end - if @model[:allowdupe] == :true + + if @model.allowdupe? cmd << "-o" end + if @model.managehome? + cmd << "-m" + elsif %w{Fedora RedHat}.include?(Facter.value("operatingsystem")) + cmd << "-M" + end + cmd << @model[:name] cmd |