class Deltacloud::Drivers::Eucalyptus::EucalyptusDriver

Constants

DEFAULT_PORT
SERVICE_STUBS

Public Class Methods

instance_state_machine() click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 65
def self.instance_state_machine
  Ec2::Ec2Driver.instance_state_machine
end

Public Instance Methods

create_firewall_rule(credentials, opts={}) click to toggle source

override EC2 implementation; Eucalyptus implements the older definition of EC2 security group; docs.amazonwebservices.com/AWSEC2/2009-07-15/APIReference/index.html?ApiReference-query-AuthorizeSecurityGroupIngress.html if the rule specifies a source group, port&protocol will be ignored. And source group and cidr range can't be mixed in a request

# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 149
def create_firewall_rule(credentials, opts={})
# only either source groups or cidr IP range can be given, not both;
  if !(opts['groups'].nil?) && opts['groups'].length>0
    ec2 = new_client(credentials)
    opts['groups'].each do |group,owner|
      safely do
        ec2.authorize_security_group_named_ingress(opts['id'], owner, group)
      end
    end
  elsif !(opts['addresses'].nil?) && opts['addresses'].length>0
    ec2 = new_client(credentials)
    opts['addresses'].each do |ip|
      ec2.authorize_security_group_IP_ingress(opts['id'], opts['port_from'], opts['port_to'], opts['protocol'], ip)
    end
  end
end
create_load_balancer(credentials, opts={}) click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 101
def create_load_balancer(credentials, opts={})
  raise Deltacloud::BackendError.new(500, "Loadbalancer",
          "Loadbalancer not supported in Eucalyptus", "")
end
default_image_owner() click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 73
def default_image_owner
  "self"
end
default_image_type() click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 77
def default_image_type
  nil
end
delete_firewall_rule(credentials, opts={}) click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 166
def delete_firewall_rule(credentials, opts={})
  ec2 = new_client(credentials)
  firewall = opts[:firewall]
  protocol, from_port, to_port, addresses, groups = firewall_rule_params(opts[:rule_id])
  unless groups.nil?
    groups.each_index do |i|
      ec2.revoke_security_group_named_ingress(firewall, groups[i]['owner'], groups[i]['group_name'])
    end
  end
  unless addresses.nil?
    addresses.each do |ip|
      ec2.revoke_security_group_IP_ingress(firewall, from_port, to_port, protocol, ip )
    end
  end
end
destroy_load_balancer(credentials, id) click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 106
def destroy_load_balancer(credentials, id)
  raise Deltacloud::BackendError.new(500, "Loadbalancer",
          "Loadbalancer not supported in Eucalyptus", "")
end
endpoint_for_service(service) click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 201
def endpoint_for_service(service)
  service = service.to_s
  endpoint = api_provider
  if endpoint && endpoint.include?(service)
    # example endpoint: 'ec2=192.168.1.1; s3=192.168.1.2'
    addr = Hash[endpoint.split(";").map { |svc| svc.strip.split("=") }][service]
    host = addr.split(':')[0]
    port = addr.split(':')[1] || DEFAULT_PORT
    stub = SERVICE_STUBS[service]
    { :endpoint_url => "http://#{host}:#{port}#{stub}",
      :connection_mode => :per_thread }
  else
    #EC2_URL/S3_URL env variable will be used by AWS
    { :connection_mode => :per_thread }
  end
end
instance_state_machine() click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 69
def instance_state_machine
  self.class.instance_state_machine
end
lb_register_instance(credentials, opts={}) click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 111
def lb_register_instance(credentials, opts={})
  raise Deltacloud::BackendError.new(500, "Loadbalancer",
          "Loadbalancer not supported in Eucalyptus", "")
end
lb_unregister_instance(credentials, opts={}) click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 116
def lb_unregister_instance(credentials, opts={})
  raise Deltacloud::BackendError.new(500, "Loadbalancer",
          "Loadbalancer not supported in Eucalyptus", "")
end
load_balancer(credentials, opts={}) click to toggle source

because load balancer is not on the supported_collections, the following methods shouldn't be called.

# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 91
def load_balancer(credentials, opts={})
  raise Deltacloud::BackendError.new(500, "Loadbalancer",
          "Loadbalancer not supported in Eucalyptus", "")
end
load_balancers(credentials, opts=nil) click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 96
def load_balancers(credentials, opts=nil)
  raise Deltacloud::BackendError.new(500, "Loadbalancer",
          "Loadbalancer not supported in Eucalyptus", "")
end
new_client(credentials, type = :ec2) click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 182
def new_client(credentials, type = :ec2)
  klass = case type
          when :ec2 then Aws::Ec2
          when :s3 then Aws::S3
          when :elb then raise Deltacloud::BackendError.new(500,
                                 "Loadbalancer",
                  "Loadbalancer not supported in Eucalyptus", "")
          end
  klass.new(credentials.user, credentials.password,
            endpoint_for_service(type))
end
realms(credentials, opts={}) click to toggle source

override ec2 driver realms - euca API doesn't support vpc/subnet concepts docs.aws.amazon.com/AWSEC2/2009-04-04/DeveloperGuide/

# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 123
def realms(credentials, opts={})
  ec2 = new_client(credentials)
  realms = []
  safely do
    if opts[:id] and !opts[:id].empty?
      begin
        ec2.describe_availability_zones([opts[:id]]).collect do |realm|
          realms << convert_realm(realm) unless realm.empty?
        end
      rescue => e
        raise e unless e.message =~ /Invalid availability zone/
        realms = []
      end
    else
      realms = ec2.describe_availability_zones.collect do |realm|
        convert_realm(realm) unless realm.empty?
      end
    end
  end
  realms
end
tag_instance(credentials, instance, name) click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 81
def tag_instance(credentials, instance, name)
  # dummy
end
untag_instance(credentials, instance_id) click to toggle source
# File lib/deltacloud/drivers/eucalyptus/eucalyptus_driver.rb, line 85
def untag_instance(credentials, instance_id)
  # dummy
end