class McSecurityGroup

API 1.5

Public Class Methods

create(cloud_id, opts={}) click to toggle source

NOTE: Create & Destroy require “security_manager” permissions

# File lib/rest_connection/rightscale/mc_security_group.rb, line 58
def self.create(cloud_id, opts={})
  url = "#{parse_args(cloud_id)}#{self.resource_plural_name}"
  location = connection.post(url, self.resource_singular_name.to_sym => opts)
  newrecord = self.new('links' => [ {'rel' => 'self', 'href' => location } ])

  rules = opts[:rules] || opts["rules"]
  [rules].flatten.each { |rule_hash| newrecord.add_rule(rule_hash) } if rules

  newrecord.reload
  newrecord
end
filters() click to toggle source
# File lib/rest_connection/rightscale/mc_security_group.rb, line 53
def self.filters
  [:name, :resource_uid]
end
parse_args(cloud_id) click to toggle source
# File lib/rest_connection/rightscale/mc_security_group.rb, line 49
def self.parse_args(cloud_id)
  "clouds/#{cloud_id}/"
end
resource_plural_name() click to toggle source
# File lib/rest_connection/rightscale/mc_security_group.rb, line 41
def self.resource_plural_name
  "security_groups"
end
resource_singular_name() click to toggle source
# File lib/rest_connection/rightscale/mc_security_group.rb, line 45
def self.resource_singular_name
  "security_group"
end

Public Instance Methods

add_rule(opts={}) click to toggle source
# File lib/rest_connection/rightscale/mc_security_group.rb, line 74
def add_rule(opts={})
  opts.each { |k,v| opts["#{k}".to_sym] = v }
  fields = [
    {"1.0" => :owner,     "1.5" => :group_owner},         # optional
    {"1.0" => :group,     "1.5" => :group_name},          # optional
    {"1.0" => :cidr_ip,   "1.5" => :cidr_ips},            # optional
    {"1.0" => :protocol,  "1.5" => :protocol},            # "tcp" || "udp" || "icmp"
    {"1.0" => :from_port, "1.5" => :start_port},          # optional
    {"1.0" => :to_port,   "1.5" => :end_port},            # optional
    {                     "1.5" => :source_type},         # "cidr_ips" || "group"
    {                     "1.5" => :icmp_code},           # optional
    {                     "1.5" => :icmp_type},           # optional
    {                     "1.5" => :security_group_href}, # optional
  ]
  unless opts[:protocol]
    raise ArgumentError.new("add_rule requires the 'protocol' option")
  end
  params = {
    :source_type => ((opts[:cidr_ip] || opts[:cidr_ips]) ? "cidr_ips" : "group"),
    :security_group_href => self.href,
    :protocol_details => {}
  }

  fields.each { |ver|
    next unless val = opts[ver["1.0"]] || opts[ver["1.5"]]
    if ver["1.5"].to_s =~ /port|icmp/
      params[:protocol_details][ver["1.5"]] = val
    else
      params[ver["1.5"]] = val
    end
  }

  SecurityGroupRule.create(params)
end
remove_rules_by_filters(filters={}) click to toggle source
# File lib/rest_connection/rightscale/mc_security_group.rb, line 109
def remove_rules_by_filters(filters={})
  rules_to_delete = rules
  filters.each do |filter,regex|
    @rules.reject! { |rule| rule[filter] =~ Regexp.new(regex) }
  end
  @rules.each { |rule| rule.destroy }
end
resource_plural_name() click to toggle source
# File lib/rest_connection/rightscale/mc_security_group.rb, line 33
def resource_plural_name
  "security_groups"
end
resource_singular_name() click to toggle source
# File lib/rest_connection/rightscale/mc_security_group.rb, line 37
def resource_singular_name
  "security_group"
end
rules() click to toggle source
# File lib/rest_connection/rightscale/mc_security_group.rb, line 70
def rules
  self.load(SecurityGroupRule)
end