class SecurityGroupParser

Public Instance Methods

parse(cfn_model:, resource:) click to toggle source
# File lib/cfn-model/parser/security_group_parser.rb, line 10
def parse(cfn_model:, resource:)
   security_group = resource

   objectify_egress cfn_model, security_group

   objectify_ingress cfn_model, security_group

   wire_ingress_rules_to_security_group(cfn_model: cfn_model, security_group: security_group)
   wire_egress_rules_to_security_group(cfn_model: cfn_model, security_group: security_group)
   security_group
end

Private Instance Methods

initialLower(str) click to toggle source
# File lib/cfn-model/parser/security_group_parser.rb, line 73
def initialLower(str)
  str.slice(0).downcase + str[1..(str.length)]
end
objectify_egress(cfn_model, security_group) click to toggle source
# File lib/cfn-model/parser/security_group_parser.rb, line 50
def objectify_egress(cfn_model, security_group)
  if security_group.securityGroupEgress.is_a? Hash
    security_group.securityGroupEgress = [security_group.securityGroupEgress]
  end

  security_group.egresses = security_group.securityGroupEgress.map do |egress|
    mapped_at_least_one_attribute = false

    egress_object = AWS::EC2::SecurityGroupEgress.new cfn_model
    egress.each do |k, v|
      next if k.match /::/
      silently_fail do
        egress_object.send("#{initialLower(k)}=", References.resolve_value(cfn_model, v))
        mapped_at_least_one_attribute = true
      end

    end.reject { |ingress| ingress.nil? }
    #egress_object.valid?
    egress_object
    mapped_at_least_one_attribute ? egress_object : nil
  end
end
objectify_ingress(cfn_model, security_group) click to toggle source
# File lib/cfn-model/parser/security_group_parser.rb, line 31
def objectify_ingress(cfn_model, security_group)
  if security_group.securityGroupIngress.is_a? Hash
    security_group.securityGroupIngress = [security_group.securityGroupIngress]
  end

  security_group.ingresses = security_group.securityGroupIngress.map do |ingress|
    mapped_at_least_one_attribute = false
    ingress_object = AWS::EC2::SecurityGroupIngress.new cfn_model
    ingress.each do |k, v|
      silently_fail do
        ingress_object.send("#{initialLower(k)}=", References.resolve_value(cfn_model, v))
        mapped_at_least_one_attribute = true
      end
    end
    #ingress_object.valid?
    mapped_at_least_one_attribute ? ingress_object : nil
  end.reject { |ingress| ingress.nil? }
end
silently_fail() { || ... } click to toggle source
# File lib/cfn-model/parser/security_group_parser.rb, line 24
def silently_fail
  begin
    yield
  rescue
  end
end
wire_egress_rules_to_security_group(cfn_model:, security_group:) click to toggle source
# File lib/cfn-model/parser/security_group_parser.rb, line 91
def wire_egress_rules_to_security_group(cfn_model:, security_group:)
  egress_rules = cfn_model.resources_by_type 'AWS::EC2::SecurityGroupEgress'
  egress_rules.each do |security_group_egress|
    group_id = References.resolve_security_group_id(security_group_egress.groupId)

    # standalone ingress rules are legal - referencing an external security group
    next if group_id.nil?

    if security_group.logical_resource_id == group_id
      security_group.egresses << security_group_egress
    end
  end
end
wire_ingress_rules_to_security_group(cfn_model:, security_group:) click to toggle source
# File lib/cfn-model/parser/security_group_parser.rb, line 77
def wire_ingress_rules_to_security_group(cfn_model:, security_group:)
  ingress_rules = cfn_model.resources_by_type 'AWS::EC2::SecurityGroupIngress'
  ingress_rules.each do |security_group_ingress|
    group_id = References.resolve_security_group_id(security_group_ingress.groupId)

    # standalone ingress rules are legal - referencing an external security group
    next if group_id.nil?

    if security_group.logical_resource_id == group_id
      security_group.ingresses << security_group_ingress
    end
  end
end