class Cumulus::IAM::IamGroups

Public: Manager class for IAM Groups

Public Class Methods

new(iam) click to toggle source
Calls superclass method
# File lib/iam/manager/IamGroups.rb, line 15
def initialize(iam)
  super(iam)
  @type = "group"
  @migration_dir = "groups"
end

Public Instance Methods

aws_resources() click to toggle source
# File lib/iam/manager/IamGroups.rb, line 33
def aws_resources
  @aws_groups ||= init_aws_groups
end
create(difference) click to toggle source
# File lib/iam/manager/IamGroups.rb, line 43
def create(difference)
  @iam.create_group({
    :group_name => difference.local.name
  })
  resource = Aws::IAM::Group.new(difference.local.name, { :client => @iam })
  add_users(resource, difference.local.users)
  resource
end
empty_config() click to toggle source
# File lib/iam/manager/IamGroups.rb, line 69
def empty_config
  GroupConfig.new
end
init_aws_groups() click to toggle source
# File lib/iam/manager/IamGroups.rb, line 37
def init_aws_groups
  @iam.list_groups().groups.map do |group|
    Aws::IAM::Group.new(group.group_name, { :client => @iam })
  end
end
local_resources() click to toggle source
# File lib/iam/manager/IamGroups.rb, line 21
def local_resources
  local = {}
  Loader.groups.each do |group|
    local[group.name] = group
  end
  local
end
migrate_additional(configs_to_aws) click to toggle source
# File lib/iam/manager/IamGroups.rb, line 73
def migrate_additional(configs_to_aws)
  configs_to_aws.map do |config, resource|
    config.users = resource.users.map { |u| u.name }
  end
end
one_local(name) click to toggle source
# File lib/iam/manager/IamGroups.rb, line 29
def one_local(name)
  Loader.group(name)
end
update(resource, diffs) click to toggle source
Calls superclass method
# File lib/iam/manager/IamGroups.rb, line 52
def update(resource, diffs)
  super(resource, diffs)

  if diffs.size == 1 and diffs[0].type == Common::DiffChange::ADD
    puts Colors.blue("\tadding users...")
    add_users(resource, diffs[0].local.users)
  else
    diffs.each do |diff|
      if diff.type == IamChange::USER
        puts Colors.blue("\tupdating users...")
        add_users(resource, diff.added_users)
        diff.removed_users.each { |u| resource.remove_user({ :user_name => u }) }
      end
    end
  end
end

Private Instance Methods

add_users(resource, users) click to toggle source

Internal: Add the users assigned to the group to the group, handling the case that the user doesn't exist

resource - the aws group resource users - the users to add

# File lib/iam/manager/IamGroups.rb, line 86
def add_users(resource, users)
  users.each do |u|
    begin
      resource.add_user({ :user_name => u })
    rescue Aws::IAM::Errors::NoSuchEntity
      puts Colors.red("\tNo such user #{u}!")
    end
  end
end