diff options
| author | Cameron Thomas <cs.thomas.dev@gmail.com> | 2011-08-10 12:21:10 -0700 |
|---|---|---|
| committer | Cameron Thomas <cs.thomas.dev@gmail.com> | 2011-08-10 12:21:10 -0700 |
| commit | 6d692af86b70977b73be051992e18e34a1d64d65 (patch) | |
| tree | 28656f82827ba450dcb801c09fb3c170b755a6be /lib/puppet/provider | |
| parent | 2b9b7c114e7c599f88be4f3be70f504add8072f8 (diff) | |
| parent | 01f09f5f395bab66b90a4e81e958aa89025977b4 (diff) | |
Merge pull request #25 from nicklewis/feature/master/windows-users-and-groups
(#8408/8409) Windows user and group providers
Diffstat (limited to 'lib/puppet/provider')
| -rw-r--r-- | lib/puppet/provider/group/windows_adsi.rb | 48 | ||||
| -rw-r--r-- | lib/puppet/provider/user/windows_adsi.rb | 71 |
2 files changed, 119 insertions, 0 deletions
diff --git a/lib/puppet/provider/group/windows_adsi.rb b/lib/puppet/provider/group/windows_adsi.rb new file mode 100644 index 000000000..4468d0071 --- /dev/null +++ b/lib/puppet/provider/group/windows_adsi.rb @@ -0,0 +1,48 @@ +require 'puppet/util/adsi' + +Puppet::Type.type(:group).provide :windows_adsi do + desc "Group management for Windows" + + defaultfor :operatingsystem => :windows + confine :operatingsystem => :windows + confine :feature => :microsoft_windows + + has_features :manages_members + + def group + @group ||= Puppet::Util::ADSI::Group.new(@resource[:name]) + end + + def members + group.members + end + + def members=(members) + group.set_members(members) + end + + def create + @group = Puppet::Util::ADSI::Group.create(@resource[:name]) + self.members = @resource[:members] + end + + def exists? + Puppet::Util::ADSI::Group.exists?(@resource[:name]) + end + + def delete + Puppet::Util::ADSI::Group.delete(@resource[:name]) + end + + def gid + nil + end + + def gid=(value) + warning "No support for managing property gid of group #{@resource[:name]} on Windows" + end + + def self.instances + Puppet::Util::ADSI::Group.map { |g| new(:ensure => :present, :name => g.name) } + end +end 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 |
