Sha256: 83bdfb790c07a0aafddb7df3827d12f11c0a8079de3fb1e3b86454d75c0a249c

Contents?: true

Size: 1.81 KB

Versions: 1

Compression:

Stored size: 1.81 KB

Contents

module Kakine
  class SecurityGroup
    attr_reader :target_object_name, :name, :transaction_type, :tenant_id, :tenant_name, :description, :rules, :prev_rules

    def initialize(tenant_name, diff)
      unset_security_rules
      Kakine::DiffParser.parse_parameters(tenant_name, diff).each do|k,v|
        instance_variable_set(eval(":@#{k.to_s}"), v)
      end
      set_remote_security_group_id
    end

    def initialize_copy(obj)
      @rules = Marshal.load(Marshal.dump(obj.rules))
      @prev_rules = Marshal.load(Marshal.dump(obj.prev_rules))
      unset_security_rules
    end

    def has_rules?
      @rules.detect {|v| !v.nil? && v.size > 0}
    end

    def add?
      @transaction_type == "+"
    end

    def delete?
      @transaction_type == "-"
    end

    def update_attr?
      @transaction_type == "~"
    end

    def update_rule?
      !@target_object_name.split(/[\[]/, 2)[1].nil?
    end

    def get_prev_instance
      prev_sg = self.clone
      prev_sg.add_security_rules(@prev_rules)
      prev_sg
    end

    def set_default_rules
      unset_security_rules
      ["IPv4", "IPv6"].each do |ip|
          add_security_rules({"direction"=>"egress", "protocol"=>nil, "port"=>nil, "remote_ip"=>nil, "ethertype"=>ip})
      end
    end

    def add_security_rules(rule)
      case
        when rule.instance_of?(Array)
          @rules = rule
        when rule.instance_of?(Hash)
          @rules << rule
      end
    end

    private

    def unset_security_rules
      @rules = []
    end

    def set_remote_security_group_id
      @rules.each do |rule|
        unless rule['remote_group'].nil?
          remote_security_group = Kakine::Resource.security_group(@tenant_name, rule.delete("remote_group"))
          rule["remote_group_id"] = remote_security_group.id
        end
      end if has_rules?
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kakine-0.2.0 lib/kakine/security_group.rb