Class: Fog::Compute::AWS::SpotRequest

Inherits:
Model
  • Object
show all
Defined in:
lib/fog/aws/models/compute/spot_request.rb

Instance Attribute Summary collapse

Attributes inherited from Model

#collection, #connection

Instance Method Summary collapse

Methods inherited from Model

#inspect, #reload, #symbolize_keys, #to_json, #wait_for

Methods included from Attributes::ClassMethods

#_load, #aliases, #attribute, #attributes, #identity, #ignore_attributes, #ignored_attributes

Methods included from Attributes::InstanceMethods

#_dump, #attributes, #dup, #identity, #identity=, #merge_attributes, #new_record?, #requires, #requires_one

Constructor Details

#initialize(attributes = {}) ⇒ SpotRequest

Returns a new instance of SpotRequest.



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/fog/aws/models/compute/spot_request.rb', line 40

def initialize(attributes={})
  self.groups ||= ["default"]
  self.flavor_id ||= 't1.micro'
  self.image_id   ||= begin
    self.username = 'ubuntu'
    case attributes[:connection].instance_variable_get(:@region) # Ubuntu 10.04 LTS 64bit (EBS)
    when 'ap-northeast-1'
      'ami-5e0fa45f'
    when 'ap-southeast-1'
      'ami-f092eca2'
    when 'eu-west-1'
      'ami-3d1f2b49'
    when 'us-east-1'
      'ami-3202f25b'
    when 'us-west-1'
      'ami-f5bfefb0'
    end
  end
  super
end

Instance Attribute Details

#private_keyObject



83
84
85
# File 'lib/fog/aws/models/compute/spot_request.rb', line 83

def private_key
  @private_key ||= private_key_path && File.read(private_key_path)
end

#private_key_pathObject



78
79
80
81
# File 'lib/fog/aws/models/compute/spot_request.rb', line 78

def private_key_path
  @private_key_path ||= Fog.credentials[:private_key_path]
  @private_key_path &&= File.expand_path(@private_key_path)
end

#public_keyObject



92
93
94
# File 'lib/fog/aws/models/compute/spot_request.rb', line 92

def public_key
  @public_key ||= public_key_path && File.read(public_key_path)
end

#public_key_pathObject



87
88
89
90
# File 'lib/fog/aws/models/compute/spot_request.rb', line 87

def public_key_path
  @public_key_path ||= Fog.credentials[:public_key_path]
  @public_key_path &&= File.expand_path(@public_key_path)
end

#username=(value) ⇒ Object (writeonly)

Sets the attribute username

Parameters:

  • value

    the value to set the attribute username to.



38
39
40
# File 'lib/fog/aws/models/compute/spot_request.rb', line 38

def username=(value)
  @username = value
end

Instance Method Details

#destroyObject



61
62
63
64
65
66
# File 'lib/fog/aws/models/compute/spot_request.rb', line 61

def destroy
  requires :id

  connection.cancel_spot_instance_requests(id)
  true
end

#key_pairObject



68
69
70
71
72
# File 'lib/fog/aws/models/compute/spot_request.rb', line 68

def key_pair
  requires :key_name

  connection.key_pairs.all(key_name).first
end

#key_pair=(new_keypair) ⇒ Object



74
75
76
# File 'lib/fog/aws/models/compute/spot_request.rb', line 74

def key_pair=(new_keypair)
  self.key_name = new_keypair && new_keypair.name
end

#ready?Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/fog/aws/models/compute/spot_request.rb', line 96

def ready?
  state == 'active'
end

#saveObject



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/fog/aws/models/compute/spot_request.rb', line 100

def save
  requires :image_id, :flavor_id, :price

  options = {
    'AvailabilityZoneGroup'                          => availability_zone_group,
    'InstanceCount'                                  => instance_count,
    'LaunchGroup'                                    => launch_group,
    'LaunchSpecification.BlockDeviceMapping'         => block_device_mapping,
    'LaunchSpecification.KeyName'                    => key_name,
    'LaunchSpecification.Monitoring.Enabled'         => monitoring,
    'LaunchSpecification.Placement.AvailabilityZone' => availability_zone,
    'LaunchSpecification.SecurityGroup'              => groups,
    'LaunchSpecification.UserData'                   => user_data,
    'LaunchSpecification.SubnetId'                   => subnet_id,
    'Type'                                           => request_type,
    'ValidFrom'                                      => valid_from,
    'ValidUntil'                                     => valid_until }
  options.delete_if {|key, value| value.nil?}
  
  # If subnet is defined then this is a Virtual Private Cloud.
  # subnet & security group cannot co-exist. Attempting to specify
  # both subnet and groups will cause an error.  Instead please make
  # use of Security Group Ids when working in a VPC.
  if subnet_id
    options.delete('LaunchSpecification.SecurityGroup')
  else
    options.delete('LaunchSpecification.SubnetId')
  end

  data = connection.request_spot_instances(image_id, flavor_id, price, options).body
  spot_instance_request = data['spotInstanceRequestSet'].first
  spot_instance_request['launchSpecification'].each do |name,value|
    spot_instance_request['LaunchSpecification.' + name[0,1].upcase + name[1..-1]] = value
  end
  spot_instance_request.merge(:groups => spot_instance_request['LaunchSpecification.GroupSet'])
  spot_instance_request.merge(options)
  merge_attributes( spot_instance_request )
end