Class: Fog::Compute::RackspaceV2::Server

Inherits:
Server
  • Object
show all
Defined in:
lib/fog/rackspace/models/compute_v2/server.rb

Constant Summary collapse

ACTIVE =

States

'ACTIVE'
BUILD =
'BUILD'
DELETED =
'DELETED'
ERROR =
'ERROR'
HARD_REBOOT =
'HARD_REBOOT'
MIGRATING =
'MIGRATING'
PASSWORD =
'PASSWORD'
REBOOT =
'REBOOT'
REBUILD =
'REBUILD'
RESCUE =
'RESCUE'
RESIZE =
'RESIZE'
REVERT_RESIZE =
'REVERT_RESIZE'
SUSPENDED =
'SUSPENDED'
UNKNOWN =
'UNKNOWN'
VERIFY_RESIZE =
'VERIFY_RESIZE'

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 = {}) ⇒ Server

Returns a new instance of Server.



140
141
142
143
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 140

def initialize(attributes={})
  @service = attributes[:service]
  super
end

Instance Attribute Details

#addressHash<String, Array[Hash]> (readonly)

Returns IP addresses allocated for server by network.

Examples:

{ 
   "public" => [
        {"version"=>4, "addr"=>"166.78.105.63"}, 
        {"version"=>6, "addr"=>"2001:4801:7817:0072:0fe1:75e8:ff10:61a9"}
               ], 
  "private"=> [{"version"=>4, "addr"=>"10.177.18.209"}]
}

Returns:

  • (Hash<String, Array[Hash]>)

    IP addresses allocated for server by network



123
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 123

attribute :addresses

#bandwidthArray (readonly)

Returns The amount of bandwidth used for the specified audit period.

Returns:

  • (Array)

    The amount of bandwidth used for the specified audit period.

See Also:



111
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 111

attribute :bandwidth, :aliases => 'rax-bandwidth:bandwidth'

#createdString (readonly)

Returns The time stamp for the creation date.

Returns:

  • (String)

    The time stamp for the creation date.



35
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 35

attribute :created

#disk_configString<AUTO, MANUAL>

The disk configuration value.

* AUTO -   The server is built with a single partition the size of the target flavor disk. The file system is automatically adjusted to fit the entire partition. 
           This keeps things simple and automated. AUTO is valid only for images and servers with a single partition that use the EXT3 file system. 
           This is the default setting for applicable Rackspace base images.

* MANUAL - The server is built using whatever partition scheme and file system is in the source image. If the target flavor disk is larger, 
           the remaining disk space is left unpartitioned. This enables images to have non-EXT3 file systems, multiple partitions, 
           and so on, and enables you to manage the disk configuration.

Returns:

  • (String<AUTO, MANUAL>)

    The disk configuration value.

See Also:



106
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 106

attribute :disk_config, :aliases => 'OS-DCF:diskConfig'

#flavor_idString (readonly)

Returns The flavor Id.



128
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 128

attribute :flavor_id, :aliases => 'flavor', :squash => 'id'

#host Id(Id) ⇒ Object (readonly)

The host Id. The compute provisioning algorithm has an anti-affinity property that attempts to spread customer VMs across hosts. Under certain situations, VMs from the same customer might be placed on the same host. hostId represents the host your server runs on and can be used to determine this scenario if it is relevant to your application. HostId is unique per account and is not globally unique.



48
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 48

attribute :host_id, :aliases => 'hostId'

#idString (readonly)

Returns The server id.

Returns:



27
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 27

identity :id

#image_idString (readonly)

Returns The image Id.



133
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 133

attribute :image_id, :aliases => 'image', :squash => 'id'

#ipv4_addressString Also known as: access_ipv4_address

Note:

This field will populate once the server is ready to use.

Returns The public IP version 4 access address.



86
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 86

attribute :ipv4_address, :aliases => 'accessIPv4'

#ipv6_addressString Also known as: access_ipv6_address

Note:

This field will populate once the server is ready to use.

Returns The public IP version 6 access address.



92
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 92

attribute :ipv6_address, :aliases => 'accessIPv6'

Returns Server links.

Returns:

  • (Array)

    Server links.



69
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 69

attribute :links

#nameString

Returns The server name.

Returns:

  • (String)

    The server name.



31
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 31

attribute :name

#passwordString (readonly)

Note:

This value is ONLY populated on server creation.

Returns Password for system adminstrator account.

Returns:

  • (String)

    Password for system adminstrator account.



137
138
139
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 137

def password
  @password
end

#personalityHash

Note:

This attribute is only used for server creation. This field will be nil on subsequent retrievals.

Returns Hash containing data to inject into the file system of the cloud server instance during server creation.

Examples:

To inject fog.txt into file system

:personality => [{ :path => '/root/fog.txt',
                   :contents => Base64.encode64('Fog was here!')
                }]

Returns:

  • (Hash)

    Hash containing data to inject into the file system of the cloud server instance during server creation.

See Also:



80
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 80

attribute :personality

#progressFixnum (readonly)

Returns The build completion progress, as a percentage. Value is from 0 to 100.

Returns:

  • (Fixnum)

    The build completion progress, as a percentage. Value is from 0 to 100.



57
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 57

attribute :progress

#stateString (readonly)

Returns server status.



53
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 53

attribute :state, :aliases => 'status'

#tenant_idString (readonly)

Returns The tenant Id.

Returns:



65
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 65

attribute :tenant_id

#updatedString (readonly)

Returns The time stamp for the last update.

Returns:

  • (String)

    The time stamp for the last update.



39
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 39

attribute :updated

#user_idString (readonly)

Returns The user Id.

Returns:



61
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 61

attribute :user_id

Instance Method Details

#attach_volume(volume, device = nil) ⇒ Fog::Compute::RackspaceV2::Attachment

Attaches Cloud Block Volume

Parameters:

Returns:

See Also:



292
293
294
295
296
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 292

def attach_volume(volume, device=nil)
  requires :identity
  volume_id = volume.is_a?(String) ? volume : volume.id
  attachments.create(:server_id => identity, :volume_id => volume_id, :device => device)
end

#attachmentsFog::Compute::RackspaceV2::Attachments

Attached Cloud Block Volumes



278
279
280
281
282
283
284
285
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 278

def attachments
  @attachments ||= begin
    Fog::Compute::RackspaceV2::Attachments.new({
      :service => service,
      :server => self
    })
  end
end

#change_admin_password(password) ⇒ Boolean

Note:

Though Rackspace does not enforce complexity requirements for the password, the operating system might. If the password is not complex enough, the server might enter an ERROR state.

Change admin password

  • Status Transition:

    • ACTIVE -> PASSWORD -> ACTIVE

    • ACTIVE -> PASSWORD -> ERROR (on error)

Parameters:

  • password (String)

    The administrator password.

Returns:

  • (Boolean)

    returns true if operation was scheduled

See Also:



408
409
410
411
412
413
414
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 408

def change_admin_password(password)
  requires :identity
  service.change_server_password(identity, password)
  self.state = PASSWORD
  @password = password
  true
end

#confirm_resizeObject

Note:

All resizes are automatically confirmed after 24 hours if you do not explicitly confirm or revert the resize.

Confirms server resize operation

  • Status Transition:

    • VERIFY_RESIZE -> ACTIVE

    • VERIFY_RESIZE -> ERROR (on error)



379
380
381
382
383
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 379

def confirm_resize
  requires :identity
  service.confirm_resize_server(identity)
  true
end

#create(options) ⇒ Boolean

Note:

You should use servers.create to create servers instead calling this method directly

Creates server

  • requires attributes: service:, :name, :image_id, and :flavor_id

  • optional attributes :disk_config, :metadata, :personality

  • State Transitions

    • BUILD -> ACTIVE

    • BUILD -> ERROR (on error)

Returns:

  • (Boolean)

    returns true if server is being created

See Also:



190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 190

def create(options)
  requires :name, :image_id, :flavor_id

  options[:disk_config] = disk_config unless disk_config.nil?
  options[:metadata] = .to_hash unless @metadata.nil?
  options[:personality] = personality unless personality.nil?

  if options[:networks]
    options[:networks].map! { |id| { :uuid => id } }
  end

  data = service.create_server(name, image_id, flavor_id, 1, 1, options)
  merge_attributes(data.body['server'])
  true
end

#create_image(name, options = {}) ⇒ Fog::ComputeRackspaceV2::Image

Creates Image from server. Once complete, a new image is available that you can use to rebuild or create servers.

Parameters:

  • name (String)

    name of image to create

  • options (Hash) (defaults to: {})

    :

Options Hash (options):

  • metadata (Hash<String, String>)

    hash of containing metadata key value pairs.

Returns:

  • (Fog::ComputeRackspaceV2::Image)

    image being created

See Also:



264
265
266
267
268
269
270
271
272
273
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 264

def create_image(name, options = {})
  requires :identity
  response = service.create_image(identity, name, options)
  begin
    image_id = response.headers["Location"].match(/\/([^\/]+$)/)[1]
    Fog::Compute::RackspaceV2::Image.new(:collection => service.images, :service => service, :id => image_id)
  rescue
    nil
  end
end

#destroyBoolean

Destroy the server

Returns:

  • (Boolean)

    returns true if server has started deleting

See Also:



234
235
236
237
238
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 234

def destroy
  requires :identity
  service.delete_server(identity)
  true
end

#flavorFog::Compute::RackspaceV2::Flavor

Server flavor

Returns:



242
243
244
245
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 242

def flavor
  requires :flavor_id
  @flavor ||= service.flavors.get(flavor_id)
end

#imageFog::Compute::RackspaceV2::Image

Server image

Returns:



249
250
251
252
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 249

def image
  requires :image_id
  @image ||= service.images.get(image_id)
end

#metadataFog::Compute::RackspaceV2::Metadata

Server metadata

Returns:



152
153
154
155
156
157
158
159
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 152

def 
  @metadata ||= begin
    Fog::Compute::RackspaceV2::Metadata.new({
      :service => service,
      :parent => self
    })
  end
end

#metadata=(hash = {}) ⇒ Object

Set server metadata

Parameters:

  • hash (Hash) (defaults to: {})

    contains key value pairs



163
164
165
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 163

def metadata=(hash={})
  .from_hash(hash)
end

#private_ip_addressString

Server’s private IPv4 address

Returns:

  • (String)

    private IPv4 address



300
301
302
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 300

def private_ip_address
  addresses['private'].select{|a| a["version"] == 4}[0]["addr"]
end

#public_ip_addressString

Server’s public IPv4 address

Returns:

  • (String)

    public IPv4 address



306
307
308
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 306

def public_ip_address
  ipv4_address
end

#ready?(ready_state = ACTIVE, error_states = [ERROR]) ⇒ Boolean

Is server is in ready state

Parameters:

  • ready_state (String) (defaults to: ACTIVE)

    By default state is ACTIVE

  • error_states (Array, String) (defaults to: [ERROR])

    By default state is ERROR

Returns:

  • (Boolean)

    returns true if server is in a ready state

Raises:

  • (RuntimeException)

    if server state is an error state



315
316
317
318
319
320
321
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 315

def ready?(ready_state = ACTIVE, error_states=[ERROR])
  if error_states
    error_states = Array(error_states)
    raise "Server should have transitioned to '#{ready_state}' not '#{state}'" if error_states.include?(state)
  end
  state == ready_state
end

#reboot(type = 'SOFT') ⇒ Object

Reboot server

  • State transition:

    • ACTIVE -> REBOOT -> ACTIVE (soft reboot)

    • ACTIVE -> HARD_REBOOT -> ACTIVE (hard reboot)

Parameters:

  • type (String<SOFT, HARD>) (defaults to: 'SOFT')

    ‘SOFT’ will do a soft reboot. ‘HARD’ will do a hard reboot.

See Also:



330
331
332
333
334
335
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 330

def reboot(type = 'SOFT')
  requires :identity
  service.reboot_server(identity, type)
  self.state = type == 'SOFT' ? REBOOT : HARD_REBOOT
  true
end

#rebuild(image_id, options = {}) ⇒ Boolean

Rebuild removes all data on the server and replaces it with the specified image. The id and all IP addresses remain the same.

  • Status Transition:

    • ACTIVE -> REBUILD -> ACTIVE

    • ACTIVE -> REBUILD -> ERROR (on error)

Parameters:

  • image_id (String)

    image to use for rebuild

Returns:

  • (Boolean)

    returns true if rebuild is in process

See Also:



346
347
348
349
350
351
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 346

def rebuild(image_id, options={})
  requires :identity
  service.rebuild_server(identity, image_id, options)
  self.state = REBUILD
  true
end

#resize(flavor_id) ⇒ Boolean

Note:

All resizes are automatically confirmed after 24 hours if you do not explicitly confirm or revert the resize.

Resize existing server to a different flavor, in essence, scaling the server up or down. The original server is saved for a period of time to allow rollback if there is a problem. All resizes should be tested and explicitly confirmed, at which time the original server is removed. All resizes are automatically confirmed after 24 hours if they are not confirmed or reverted.

  • Status Transition:

    • ACTIVE -> QUEUE_RESIZE -> PREP_RESIZE -> VERIFY_RESIZE

    • ACTIVE -> QUEUE_RESIZE -> ACTIVE (on error)

Parameters:

  • flavor_id (String)

    to resize

Returns:

  • (Boolean)

    returns true if resize is in process

See Also:



364
365
366
367
368
369
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 364

def resize(flavor_id)
  requires :identity
  service.resize_server(identity, flavor_id)
  self.state = RESIZE
  true
end

#revert_resizeObject

Note:

All resizes are automatically confirmed after 24 hours if you do not explicitly confirm or revert the resize.

Reverts server resize operation

  • Status Transition:

    • VERIFY_RESIZE -> ACTIVE

    • VERIFY_RESIZE -> ERROR (on error)



393
394
395
396
397
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 393

def revert_resize
  requires :identity
  service.revert_resize_server(identity)
  true
end

#save(options = {}) ⇒ Boolean

Saves the server. Creates server if it is new, otherwise it will update server attributes name, accessIPv4, and accessIPv6.

Returns:

  • (Boolean)

    true if server has started saving



170
171
172
173
174
175
176
177
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 170

def save(options = {})
  if persisted?
    update
  else
    create(options)
  end
  true
end

#setup(credentials = {}) ⇒ Object

Setup server for SSH access This requires public_key_path and private_key_path to be passed into Compute service via Fog::Compute constructor or .fog file



419
420
421
422
423
424
425
426
427
428
429
430
431
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 419

def setup(credentials = {})
  requires :public_ip_address, :identity, :public_key, :username
  Fog::SSH.new(public_ip_address, username, credentials).run([
    %{mkdir .ssh},
    %{echo "#{public_key}" >> ~/.ssh/authorized_keys},
    %{passwd -l #{username}},
    %{echo "#{Fog::JSON.encode(attributes)}" >> ~/attributes.json},
    %{echo "#{Fog::JSON.encode()}" >> ~/metadata.json}
  ])
rescue Errno::ECONNREFUSED
  sleep(1)
  retry
end

#updateObject

Note:

If you edit the server name, the server host name does not change. Also, server names are not guaranteed to be unique.

Updates server This will update :name, :accessIPv4, and :accessIPv6 attributes.

  • State Transition

    • ACTIVE -> ACTIVE

Returns:

  • true if update has started updating

See Also:



214
215
216
217
218
219
220
221
222
223
224
225
# File 'lib/fog/rackspace/models/compute_v2/server.rb', line 214

def update
  requires :identity
  options = {
    'name' => name,
    'accessIPv4' => ipv4_address,
    'accessIPv6' => ipv6_address
  }

  data = service.update_server(identity, options)
  merge_attributes(data.body['server'])
  true
end