summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDean Wilson <dean.wilson@gmail.com>2010-08-27 12:11:31 +0100
committerMarkus Roberts <Markus@reality.com>2010-09-29 12:04:11 -0700
commit34f87cfd74e5c93365da11a5e676f513e8819196 (patch)
treed80155bc83092a96560ee379d67151e20980ade3
parenta7fb9b112025e328304743c6453ece5d6ae81275 (diff)
downloadpuppet-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.rb12
-rwxr-xr-xlib/puppet/type/user.rb14
-rwxr-xr-xspec/unit/provider/user/useradd_spec.rb9
-rwxr-xr-xspec/unit/type/user_spec.rb16
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")