Class: Puppet::Util::Windows::ADSI::Group

Inherits:
ADSIObject show all
Defined in:
lib/puppet/util/windows.rb,
lib/puppet/util/windows/adsi.rb

Instance Attribute Summary

Attributes inherited from ADSIObject

#name

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ADSIObject

#[], #[]=, #commit, delete, each, exists?, get_sids, #initialize, localized_domains, name_sid_hash, #native_object, #object_class, parse_name, #sid, #uri, uri

Constructor Details

This class inherits a constructor from Puppet::Util::Windows::ADSI::ADSIObject

Class Method Details

.create(name) ⇒ Object

Raises:



610
611
612
613
614
615
# File 'lib/puppet/util/windows/adsi.rb', line 610

def create(name)
  # Windows error 2224: The account already exists.
  raise Puppet::Error, _("Cannot create group if user '%{name}' exists.") % { name: name } if Puppet::Util::Windows::ADSI::User.exists?(name)

  new(name, Puppet::Util::Windows::ADSI.create(name, @object_class))
end

.list_allObject



606
607
608
# File 'lib/puppet/util/windows/adsi.rb', line 606

def list_all
  Puppet::Util::Windows::ADSI.execquery('select name from win32_group where localaccount = "TRUE"')
end

Instance Method Details

#add_member_sids(*sids) ⇒ Object



618
619
620
621
622
# File 'lib/puppet/util/windows/adsi.rb', line 618

def add_member_sids(*sids)
  sids.each do |sid|
    native_object.Add(Puppet::Util::Windows::ADSI.sid_uri(sid))
  end
end

#membersObject Also known as: member_sids

returns Puppet::Util::Windows::SID::Principal[] may contain objects that represent unresolvable SIDs qualified account names are returned by calling #domain_account



633
634
635
# File 'lib/puppet/util/windows/adsi.rb', line 633

def members
  self.class.get_sids(native_object.Members)
end

#remove_member_sids(*sids) ⇒ Object



624
625
626
627
628
# File 'lib/puppet/util/windows/adsi.rb', line 624

def remove_member_sids(*sids)
  sids.each do |sid|
    native_object.Remove(Puppet::Util::Windows::ADSI.sid_uri(sid))
  end
end

#set_members(desired_members, inclusive = true) ⇒ Object



638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
# File 'lib/puppet/util/windows/adsi.rb', line 638

def set_members(desired_members, inclusive = true)
  return if desired_members.nil?

  current_hash = member_sids.to_h { |sid| [sid.sid, sid] }
  desired_hash = self.class.name_sid_hash(desired_members)

  # First we add all missing members
  unless desired_hash.empty?
    members_to_add = (desired_hash.keys - current_hash.keys).map { |sid| desired_hash[sid] }
    add_member_sids(*members_to_add)
  end

  # Then we remove all extra members if inclusive
  if inclusive
    if desired_hash.empty?
      members_to_remove = current_hash.values
    else
      members_to_remove = (current_hash.keys - desired_hash.keys).map { |sid| current_hash[sid] }
    end

    remove_member_sids(*members_to_remove)
  end
end