diff options
author | Dean Wilson <dean.wilson@gmail.com> | 2010-08-27 12:11:31 +0100 |
---|---|---|
committer | Markus Roberts <Markus@reality.com> | 2010-09-29 12:04:11 -0700 |
commit | 34f87cfd74e5c93365da11a5e676f513e8819196 (patch) | |
tree | d80155bc83092a96560ee379d67151e20980ade3 | |
parent | a7fb9b112025e328304743c6453ece5d6ae81275 (diff) | |
download | puppet-34f87cfd74e5c93365da11a5e676f513e8819196.tar.gz puppet-34f87cfd74e5c93365da11a5e676f513e8819196.tar.xz puppet-34f87cfd74e5c93365da11a5e676f513e8819196.zip |
Add user account expiry to the useradd type and provider
-rw-r--r-- | lib/puppet/provider/user/useradd.rb | 12 | ||||
-rwxr-xr-x | lib/puppet/type/user.rb | 14 | ||||
-rwxr-xr-x | spec/unit/provider/user/useradd_spec.rb | 9 | ||||
-rwxr-xr-x | spec/unit/type/user_spec.rb | 16 |
4 files changed, 49 insertions, 2 deletions
diff --git a/lib/puppet/provider/user/useradd.rb b/lib/puppet/provider/user/useradd.rb index 7ef217d9e..7e68e4b32 100644 --- a/lib/puppet/provider/user/useradd.rb +++ b/lib/puppet/provider/user/useradd.rb @@ -17,7 +17,7 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ value !~ /\s/ end - has_features :manages_homedir, :allows_duplicates + has_features :manages_homedir, :allows_duplicates, :manages_expiry has_feature :manages_passwords if Puppet.features.libshadow? @@ -35,6 +35,15 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ cmd end + def check_manage_expiry + cmd = [] + if @resource[:expiry] + cmd << "-e #{@resource[:expiry]}" + end + + cmd + end + def add_properties cmd = [] Puppet::Type.type(:user).validproperties.each do |property| @@ -53,6 +62,7 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ cmd += add_properties cmd += check_allow_dup cmd += check_manage_home + cmd += check_manage_expiry cmd << @resource[:name] end diff --git a/lib/puppet/type/user.rb b/lib/puppet/type/user.rb index 007b760bc..c524a7da9 100755 --- a/lib/puppet/type/user.rb +++ b/lib/puppet/type/user.rb @@ -27,6 +27,9 @@ module Puppet feature :manages_solaris_rbac, "The provider can manage roles and normal users" + feature :manages_expiry, + "The provider can manage the expiry date for a user." + newproperty(:ensure, :parent => Puppet::Property::Ensure) do newvalue(:present, :event => :user_created) do provider.create @@ -210,6 +213,17 @@ module Puppet end end + newproperty(:expiry, :required_features => :manages_expiry) do + desc "The expiry date for this user. Must be provided in + a zero padded YYYY-MM-DD format - e.g 2010-02-19." + + validate do |value| + if value !~ /^\d{4}-\d{2}-\d{2}$/ + raise ArgumentError, "Expiry dates must be YYYY-MM-DD" + end + end + end + # Autorequire the group, if it's around autorequire(:group) do autos = [] diff --git a/spec/unit/provider/user/useradd_spec.rb b/spec/unit/provider/user/useradd_spec.rb index 6eb9717b8..9869ba935 100755 --- a/spec/unit/provider/user/useradd_spec.rb +++ b/spec/unit/provider/user/useradd_spec.rb @@ -109,6 +109,15 @@ describe provider_class do @provider.stubs(:command).with(:add).returns("useradd") @provider.stubs(:add_properties).returns(["-G", "somegroup"]) @resource.stubs(:[]).with(:name).returns("someuser") + @resource.stubs(:[]).with(:expiry).returns("somedate") + @provider.addcmd.must == ["useradd", "-G", "somegroup", "-o", "-m", '-e somedate', "someuser"] + end + + it "should return an array without -e if expery is undefined full command" do + @provider.stubs(:command).with(:add).returns("useradd") + @provider.stubs(:add_properties).returns(["-G", "somegroup"]) + @resource.stubs(:[]).with(:name).returns("someuser") + @resource.stubs(:[]).with(:expiry).returns nil @provider.addcmd.must == ["useradd", "-G", "somegroup", "-o", "-m", "someuser"] end end diff --git a/spec/unit/type/user_spec.rb b/spec/unit/type/user_spec.rb index 4c6eb1150..f978b309c 100755 --- a/spec/unit/type/user_spec.rb +++ b/spec/unit/type/user_spec.rb @@ -35,6 +35,10 @@ describe user do user.provider_feature(:manages_solaris_rbac).should_not be_nil end + it "should have a manages_expiry feature" do + user.provider_feature(:manages_expiry).should_not be_nil + end + describe "instances" do it "should have a valid provider" do user.new(:name => "foo").provider.class.ancestors.should be_include(Puppet::Provider) @@ -47,7 +51,7 @@ describe user do end end - properties = [:ensure, :uid, :gid, :home, :comment, :shell, :password, :groups, :roles, :auths, :profiles, :project, :keys] + properties = [:ensure, :uid, :gid, :home, :comment, :shell, :password, :groups, :roles, :auths, :profiles, :project, :keys, :expiry] properties.each do |property| it "should have a #{property} property" do @@ -227,6 +231,16 @@ describe user do end end + describe "when managing expiry" do + before do + @expiry = user.attrclass(:expiry).new(:resource => @resource) + end + + it "should fail if given an invalid date" do + lambda { @expiry.should = "200-20-20" }.should raise_error(Puppet::Error) + end + end + describe "when managing passwords" do before do @password = user.attrclass(:password).new(:resource => @resource, :should => "mypass") |