diff options
| author | Nick Lewis <nick@puppetlabs.com> | 2011-08-09 13:04:25 -0700 |
|---|---|---|
| committer | Jacob Helwig <jacob@puppetlabs.com> | 2011-08-19 13:52:59 -0700 |
| commit | 4f7170a0fd7d77d7d9941001cdb7dbcb0662d6b4 (patch) | |
| tree | 7040d63c6c64078bd3daaa4eaafc4795a3f23d6b /lib | |
| parent | f19a0ea8c12c06bb01ddfe53e47e3a02ae87bdbb (diff) | |
| download | puppet-4f7170a0fd7d77d7d9941001cdb7dbcb0662d6b4.tar.gz puppet-4f7170a0fd7d77d7d9941001cdb7dbcb0662d6b4.tar.xz puppet-4f7170a0fd7d77d7d9941001cdb7dbcb0662d6b4.zip | |
(#8408) Add a default user provider for Windows
This provider, windows_adsi, uses the Puppet::Util::ADSI module to manage
users. It can currently only manage group memberships, comments, and home
directories, which are the only fields that can be managed via ADSI.
Based on work by: Joel Rosario <joel.r@.internal.directi.com>
Based on work by: Cameron Thomas <cameron@puppetlabs.com>
Reviewed-By: Matt Robinson <matt@puppetlabs.com>
(cherry picked from commit ac00e9e289f8fdc81f060e7dd289e1a8e0f133c0)
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/puppet/provider/user/windows_adsi.rb | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/puppet/provider/user/windows_adsi.rb b/lib/puppet/provider/user/windows_adsi.rb new file mode 100644 index 000000000..9250def59 --- /dev/null +++ b/lib/puppet/provider/user/windows_adsi.rb @@ -0,0 +1,71 @@ +require 'puppet/util/adsi' + +Puppet::Type.type(:user).provide :windows_adsi do + desc "User management for Windows" + + defaultfor :operatingsystem => :windows + confine :operatingsystem => :windows + confine :feature => :microsoft_windows + + has_features :manages_homedir + + def user + @user ||= Puppet::Util::ADSI::User.new(@resource[:name]) + end + + def groups + user.groups.join(',') + end + + def groups=(groups) + user.set_groups(groups, @resource[:membership] == :minimum) + end + + def create + @user = Puppet::Util::ADSI::User.create(@resource[:name]) + [:comment, :home, :groups].each do |prop| + send("#{prop}=", @resource[prop]) if @resource[prop] + end + end + + def exists? + Puppet::Util::ADSI::User.exists?(@resource[:name]) + end + + def delete + Puppet::Util::ADSI::User.delete(@resource[:name]) + end + + # Only flush if we created or modified a user, not deleted + def flush + @user.commit if @user + end + + def comment + user['Description'] + end + + def comment=(value) + user['Description'] = value + end + + def home + user['HomeDirectory'] + end + + def home=(value) + user['HomeDirectory'] = value + end + + [:uid, :gid, :shell].each do |prop| + define_method(prop) { nil } + + define_method("#{prop}=") do |v| + warning "No support for managing property #{prop} of user #{@resource[:name]} on Windows" + end + end + + def self.instances + Puppet::Util::ADSI::User.map { |u| new(:ensure => :present, :name => u.name) } + end +end |
