class Piculet::EC2Wrapper::SecurityGroupCollection::SecurityGroup::PermissionCollection::Permission

Public Class Methods

new(permission, collection, options) click to toggle source
# File lib/piculet/wrapper/permission.rb, line 14
def initialize(permission, collection, options)
  @permission = permission
  @collection = collection
  @options = options
end

Public Instance Methods

delete() click to toggle source
# File lib/piculet/wrapper/permission.rb, line 39
def delete
  log(:info, 'Delete Permission', :red, log_id)

  self_ip_ranges, self_groups = normalize_self_attrs([])

  unless (self_ip_ranges + self_groups).empty?
    @collection.revoke(protocol, port_range, (self_ip_ranges + self_groups), :log_color => :red)
  end
end
eql?(dsl) click to toggle source
# File lib/piculet/wrapper/permission.rb, line 20
def eql?(dsl)
  dsl_ip_ranges, dsl_groups, self_ip_ranges, self_groups = normalize_attrs(dsl)
  (self_ip_ranges == dsl_ip_ranges) and (self_groups == dsl_groups)
end
update(dsl) click to toggle source
# File lib/piculet/wrapper/permission.rb, line 25
def update(dsl)
  log(:info, 'Update Permission', :green, log_id)

  plus_ip_ranges, minus_ip_ranges, plus_groups, minus_groups = diff(dsl)

  unless (plus_ip_ranges + plus_groups).empty?
    @collection.authorize(protocol, port_range, (plus_ip_ranges + plus_groups), :log_color => :green)
  end

  unless (minus_ip_ranges + minus_groups).empty?
    @collection.revoke(protocol, port_range, (minus_ip_ranges + minus_groups), :log_color => :green)
  end
end

Private Instance Methods

diff(dsl) click to toggle source
# File lib/piculet/wrapper/permission.rb, line 54
def diff(dsl)
  dsl_ip_ranges, dsl_groups, self_ip_ranges, self_groups = normalize_attrs(dsl)

  [
    dsl_ip_ranges - self_ip_ranges,
    self_ip_ranges - dsl_ip_ranges,
    dsl_groups - self_groups,
    self_groups - dsl_groups,
  ]
end
log_id() click to toggle source
# File lib/piculet/wrapper/permission.rb, line 50
def log_id
  "#{@collection.log_id} > #{protocol} #{port_range}"
end
normalize_attrs(dsl) click to toggle source
# File lib/piculet/wrapper/permission.rb, line 65
def normalize_attrs(dsl)
  dsl_ip_ranges = (dsl.ip_ranges || []).sort
  dsl_groups = (dsl.groups || []).map {|i|
    if i.kind_of?(Array)
      i
    elsif AWS::EC2::SecurityGroup.elb?(i)
      [AWS::EC2::SecurityGroup::ELB_OWNER, AWS::EC2::SecurityGroup::ELB_NAME]
    else
      [@options.ec2.owner_id, i]
    end
  }.sort

  self_ip_ranges, self_groups = normalize_self_attrs(dsl_groups.map { |g| g[1] })

  [dsl_ip_ranges, dsl_groups, self_ip_ranges, self_groups]
end
normalize_self_attrs(dsl_group_names) click to toggle source
# File lib/piculet/wrapper/permission.rb, line 82
def normalize_self_attrs(dsl_group_names)
  self_ip_ranges = (@permission.ip_ranges || []).sort
  self_groups = (@permission.groups || []).map {|i|
    if dsl_group_names.include?(i.security_group_id)
      [i.owner_id, i.security_group_id]
    else
      [i.owner_id, i.name]
    end
  }.sort

  [self_ip_ranges, self_groups]
end