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

Inherits:
Server show all
Defined in:
lib/fog/aws/models/compute/spot_request.rb

Instance Attribute Summary collapse

Attributes inherited from Server

#private_key, #private_key_path, #public_key, #public_key_path, #ssh_port, #username

Attributes inherited from Model

#collection, #service

Instance Method Summary collapse

Methods inherited from Server

#scp, #scp_download, #ssh, #sshable?

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 Fog::Core::DeprecatedConnectionAccessors

#connection, #connection=, #prepare_service_value

Methods included from Attributes::InstanceMethods

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

Constructor Details

#initialize(attributes = {}) ⇒ SpotRequest

Returns a new instance of SpotRequest.



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

def initialize(attributes={})
  self.groups ||= ["default"]
  self.flavor_id ||= 't1.micro'
  self.image_id   ||= begin
    self.username = 'ubuntu'

    # Old 'connection' is renamed as service and should be used instead
    prepare_service_value(attributes)

    case @service.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

#iam_instance_profile_arn=(value) ⇒ Object (writeonly)

Sets the attribute iam_instance_profile_arn

Parameters:

  • value

    the value to set the attribute iam_instance_profile_arn to.



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

def iam_instance_profile_arn=(value)
  @iam_instance_profile_arn = value
end

#iam_instance_profile_name=(value) ⇒ Object (writeonly)

Sets the attribute iam_instance_profile_name

Parameters:

  • value

    the value to set the attribute iam_instance_profile_name to.



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

def iam_instance_profile_name=(value)
  @iam_instance_profile_name = value
end

Instance Method Details

#destroyObject



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

def destroy
  requires :id

  service.cancel_spot_instance_requests(id)
  true
end

#key_pairObject



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

def key_pair
  requires :key_name

  service.key_pairs.all(key_name).first
end

#key_pair=(new_keypair) ⇒ Object



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

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

#ready?Boolean

Returns:

  • (Boolean)


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

def ready?
  state == 'active'
end

#saveObject



87
88
89
90
91
92
93
94
95
96
97
98
99
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
# File 'lib/fog/aws/models/compute/spot_request.rb', line 87

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.EbsOptimized'               => ebs_optimized,
    'LaunchSpecification.UserData'                   => user_data,
    'LaunchSpecification.SubnetId'                   => subnet_id,
    'LaunchSpecification.IamInstanceProfile.Arn'     => @iam_instance_profile_arn,
    'LaunchSpecification.IamInstanceProfile.Name'    => @iam_instance_profile_name,
    '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 = service.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