Class: Puppet::Util::Windows::ADSI::Group
- Extended by:
- Enumerable
- Defined in:
- lib/puppet/util/windows.rb,
lib/puppet/util/windows/adsi.rb
Instance Attribute Summary collapse
- #name ⇒ Object readonly
- #native_group ⇒ Object
- #sid ⇒ Object readonly
Class Method Summary collapse
- .create(name) ⇒ Object
- .delete(name) ⇒ Object
- .each(&block) ⇒ Object
- .exists?(name) ⇒ Boolean
- .name_sid_hash(names) ⇒ Object
- .uri(name, host = '.') ⇒ Object
Instance Method Summary collapse
- #add_member_sids(*sids) ⇒ Object
- #add_members(*names) ⇒ Object (also: #add_member)
- #commit ⇒ Object
-
#initialize(name, native_group = nil) ⇒ Group
constructor
A new instance of Group.
- #member_sids ⇒ Object
- #members ⇒ Object
- #remove_member_sids(*sids) ⇒ Object
- #remove_members(*names) ⇒ Object (also: #remove_member)
- #set_members(desired_members) ⇒ Object
- #uri ⇒ Object
Constructor Details
#initialize(name, native_group = nil) ⇒ Group
Returns a new instance of Group.
305 306 307 308 |
# File 'lib/puppet/util/windows/adsi.rb', line 305 def initialize(name, native_group = nil) @name = name @native_group = native_group end |
Instance Attribute Details
#name ⇒ Object (readonly)
304 305 306 |
# File 'lib/puppet/util/windows/adsi.rb', line 304 def name @name end |
#native_group ⇒ Object
303 304 305 |
# File 'lib/puppet/util/windows/adsi.rb', line 303 def native_group @native_group end |
#sid ⇒ Object (readonly)
304 305 306 |
# File 'lib/puppet/util/windows/adsi.rb', line 304 def sid @sid end |
Class Method Details
.create(name) ⇒ Object
405 406 407 408 409 |
# File 'lib/puppet/util/windows/adsi.rb', line 405 def self.create(name) # Windows error 2224: The account already exists. raise Puppet::Error.new( "Cannot create group if user '#{name}' exists." ) if Puppet::Util::Windows::ADSI::User.exists? name new(name, Puppet::Util::Windows::ADSI.create(name, 'group')) end |
.delete(name) ⇒ Object
415 416 417 |
# File 'lib/puppet/util/windows/adsi.rb', line 415 def self.delete(name) Puppet::Util::Windows::ADSI.delete(name, 'group') end |
.each(&block) ⇒ Object
419 420 421 422 423 424 425 426 427 428 |
# File 'lib/puppet/util/windows/adsi.rb', line 419 def self.each(&block) wql = Puppet::Util::Windows::ADSI.execquery( 'select name from win32_group where localaccount = "TRUE"' ) groups = [] wql.each do |g| groups << new(g.name) end groups.each(&block) end |
.exists?(name) ⇒ Boolean
411 412 413 |
# File 'lib/puppet/util/windows/adsi.rb', line 411 def self.exists?(name) Puppet::Util::Windows::ADSI.connectable?(Group.uri(name)) end |
.name_sid_hash(names) ⇒ Object
337 338 339 340 341 342 343 344 345 346 347 |
# File 'lib/puppet/util/windows/adsi.rb', line 337 def self.name_sid_hash(names) return [] if names.nil? or names.empty? sids = names.map do |name| sid = Puppet::Util::Windows::SID.name_to_sid_object(name) raise Puppet::Error.new( "Could not resolve username: #{name}" ) if !sid [sid.to_s, sid] end Hash[ sids ] end |
Instance Method Details
#add_member_sids(*sids) ⇒ Object
363 364 365 366 367 |
# File 'lib/puppet/util/windows/adsi.rb', line 363 def add_member_sids(*sids) sids.each do |sid| native_group.Add(Puppet::Util::Windows::ADSI.sid_uri(sid)) end end |
#add_members(*names) ⇒ Object Also known as: add_member
349 350 351 352 353 |
# File 'lib/puppet/util/windows/adsi.rb', line 349 def add_members(*names) Puppet.deprecation_warning('Puppet::Util::Windows::ADSI::Group#add_members is deprecated; please use Puppet::Util::Windows::ADSI::Group#add_member_sids') sids = self.class.name_sid_hash(names) add_member_sids(*sids.values) end |
#commit ⇒ Object
328 329 330 331 332 333 334 335 |
# File 'lib/puppet/util/windows/adsi.rb', line 328 def commit begin native_group.SetInfo unless native_group.nil? rescue Exception => e raise Puppet::Error.new( "Group update failed: #{e}", e ) end self end |
#member_sids ⇒ Object
382 383 384 385 386 387 388 |
# File 'lib/puppet/util/windows/adsi.rb', line 382 def member_sids sids = [] native_group.Members.each do |m| sids << Puppet::Util::Windows::SID.octet_string_to_sid_object(m.objectSID) end sids end |
#members ⇒ Object
375 376 377 378 379 380 |
# File 'lib/puppet/util/windows/adsi.rb', line 375 def members # WIN32OLE objects aren't enumerable, so no map members = [] native_group.Members.each {|m| members << m.Name} members end |
#remove_member_sids(*sids) ⇒ Object
369 370 371 372 373 |
# File 'lib/puppet/util/windows/adsi.rb', line 369 def remove_member_sids(*sids) sids.each do |sid| native_group.Remove(Puppet::Util::Windows::ADSI.sid_uri(sid)) end end |
#remove_members(*names) ⇒ Object Also known as: remove_member
356 357 358 359 360 |
# File 'lib/puppet/util/windows/adsi.rb', line 356 def remove_members(*names) Puppet.deprecation_warning('Puppet::Util::Windows::ADSI::Group#remove_members is deprecated; please use Puppet::Util::Windows::ADSI::Group#remove_member_sids') sids = self.class.name_sid_hash(names) remove_member_sids(*sids.values) end |
#set_members(desired_members) ⇒ Object
390 391 392 393 394 395 396 397 398 399 400 401 402 403 |
# File 'lib/puppet/util/windows/adsi.rb', line 390 def set_members(desired_members) return if desired_members.nil? or desired_members.empty? current_hash = Hash[ self.member_sids.map { |sid| [sid.to_s, sid] } ] desired_hash = self.class.name_sid_hash(desired_members) # First we add all missing members members_to_add = (desired_hash.keys - current_hash.keys).map { |sid| desired_hash[sid] } add_member_sids(*members_to_add) # Then we remove all extra members members_to_remove = (current_hash.keys - desired_hash.keys).map { |sid| current_hash[sid] } remove_member_sids(*members_to_remove) end |
#uri ⇒ Object
310 311 312 |
# File 'lib/puppet/util/windows/adsi.rb', line 310 def uri self.class.uri(name) end |