Class: Fog::Compute::Bluebox::Real

Inherits:
Object
  • Object
show all
Defined in:
lib/fog/bluebox/compute.rb,
lib/fog/bluebox/requests/compute/get_block.rb,
lib/fog/bluebox/requests/compute/get_blocks.rb,
lib/fog/bluebox/requests/compute/get_product.rb,
lib/fog/bluebox/requests/compute/create_block.rb,
lib/fog/bluebox/requests/compute/get_location.rb,
lib/fog/bluebox/requests/compute/get_products.rb,
lib/fog/bluebox/requests/compute/get_template.rb,
lib/fog/bluebox/requests/compute/reboot_block.rb,
lib/fog/bluebox/requests/compute/destroy_block.rb,
lib/fog/bluebox/requests/compute/get_locations.rb,
lib/fog/bluebox/requests/compute/get_templates.rb,
lib/fog/bluebox/requests/compute/create_template.rb,
lib/fog/bluebox/requests/compute/destroy_template.rb

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Real

Returns a new instance of Real.



59
60
61
62
63
64
65
66
67
68
# File 'lib/fog/bluebox/compute.rb', line 59

def initialize(options={})
  @bluebox_api_key      = options[:bluebox_api_key]
  @bluebox_customer_id  = options[:bluebox_customer_id]
  @connection_options   = options[:connection_options] || {}
  @host       = options[:bluebox_host]    || "boxpanel.bluebox.net"
  @persistent = options[:persistent]      || false
  @port       = options[:bluebox_port]    || 443
  @scheme     = options[:bluebox_scheme]  || 'https'
  @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
end

Instance Method Details

#create_block(product_id, template_id, location_id, options = {}) ⇒ Object

Create a new block

Parameters

  • product_id<~String> - ID of block product (size)

  • template_id<~String> - ID of block OS/build template

  • location_id<~String> - ID of deployment location

  • options<~Hash>:

    * password<~String>   - Password for block
    

    or

    * ssh_public_key<~String> - SSH public key
    * username<~String>   - Defaults to deploy
    

Returns

  • response<~Excon::Response>:

    • body<~Hash>:



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/fog/bluebox/requests/compute/create_block.rb', line 20

def create_block(product_id, template_id, location_id, options = {})
  unless options.key?('password') || options.key?('ssh_public_key')
    raise ArgumentError, 'Either password or public_key must be supplied'
  end

  query = {
    'product'  => product_id,
    'template' => template_id,
    'location' => location_id
  }

  query['ipv6_only'] = options.delete('ipv6_only') if options['ipv6_only']

  request(
    :expects  => 200,
    :method   => 'POST',
    :path     => '/api/blocks.json',
    :query    => query,
    :body     => options.map {|k,v| "#{CGI.escape(k)}=#{CGI.escape(v)}"}.join('&')
  )
end

#create_template(block_id, options = {}) ⇒ Object

Create a template from block

Parameters

  • block_id<~Integer> - Id of block to create template from

Returns

  • response<~Excon::Response>:

    • body<~Array>:

TODO



14
15
16
17
18
19
20
21
# File 'lib/fog/bluebox/requests/compute/create_template.rb', line 14

def create_template(block_id, options={})
  request(
    :expects  => 202,
    :method   => 'POST',
    :path     => "api/block_templates.json",
    :query    => {'id' => block_id}.merge!(options)
  )
end

#destroy_block(block_id) ⇒ Object

Destroy a block

Parameters

  • block_id<~Integer> - Id of block to destroy

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

TODO



14
15
16
17
18
19
20
# File 'lib/fog/bluebox/requests/compute/destroy_block.rb', line 14

def destroy_block(block_id)
  request(
    :expects  => 200,
    :method   => 'DELETE',
    :path     => "api/blocks/#{block_id}.json"
  )
end

#destroy_template(id) ⇒ Object

Create a template from block

Parameters

  • id<~Integer> - Id of image to destroy

Returns

  • response<~Excon::Response>:

    • body<~Array>:

TODO



14
15
16
17
18
19
20
# File 'lib/fog/bluebox/requests/compute/destroy_template.rb', line 14

def destroy_template(id)
  request(
    :expects  => 200,
    :method   => 'DELETE',
    :path     => "api/block_templates/#{id}.json"
  )
end

#get_block(block_id) ⇒ Object

Get details of a block.

Parameters

  • block_id<~Integer> - Id of block to lookup

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

TODO



14
15
16
17
18
19
20
# File 'lib/fog/bluebox/requests/compute/get_block.rb', line 14

def get_block(block_id)
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => "api/blocks/#{block_id}.json"
  )
end

#get_blocksObject

Get list of blocks

Returns

  • response<~Excon::Response>:

    • body<~Array>:

      • ‘ips’<~Array> - Ip addresses for the block

      • ‘id’<~String> - Id of the block

      • ‘storage’<~Integer> - Disk space quota for the block

      • ‘memory’<~Integer> - RAM quota for the block

      • ‘cpu’<~Float> - The fractional CPU quota for this block

      • ‘hostname’<~String> - The hostname for the block



16
17
18
19
20
21
22
# File 'lib/fog/bluebox/requests/compute/get_blocks.rb', line 16

def get_blocks
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => 'api/blocks.json'
  )
end

#get_location(location_id) ⇒ Object

Get details of a location

Parameters

  • location_id<~Integer> - Id of location to lookup

Returns

  • response<~Excon::Response>:

    • body<~Array>:

TODO



14
15
16
17
18
19
20
# File 'lib/fog/bluebox/requests/compute/get_location.rb', line 14

def get_location(location_id)
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => "api/locations/#{location_id}.json"
  )
end

#get_locationsObject

Get list of locations

Returns

  • response<~Excon::Response>:

    • body<~Array>:

      • ‘id’<~String> - UUID of the location

      • ‘description’<~String> - Description of the location



12
13
14
15
16
17
18
# File 'lib/fog/bluebox/requests/compute/get_locations.rb', line 12

def get_locations
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => 'api/locations.json'
  )
end

#get_product(product_id) ⇒ Object

Get details of a product

Parameters

  • product_id<~Integer> - Id of flavor to lookup

Returns

  • response<~Excon::Response>:

    • body<~Array>:

TODO



14
15
16
17
18
19
20
# File 'lib/fog/bluebox/requests/compute/get_product.rb', line 14

def get_product(product_id)
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => "api/block_products/#{product_id}.json"
  )
end

#get_productsObject

Get list of products

Returns

  • response<~Excon::Response>:

    • body<~Array>:

      • ‘id’<~String> - UUID of the product

      • ‘description’<~String> - Description of the product

      • ‘cost’<~Decimal> - Hourly cost of the product



13
14
15
16
17
18
19
# File 'lib/fog/bluebox/requests/compute/get_products.rb', line 13

def get_products
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => 'api/block_products.json'
  )
end

#get_template(template_id) ⇒ Object

Get details of a template

Parameters

  • template_id<~Integer> - Id of template to lookup

Returns

  • response<~Excon::Response>:

    • body<~Array>:

TODO



14
15
16
17
18
19
20
# File 'lib/fog/bluebox/requests/compute/get_template.rb', line 14

def get_template(template_id)
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => "api/block_templates/#{template_id}.json"
  )
end

#get_templatesObject

Get list of OS templates

Returns

  • response<~Excon::Response>:

    • body<~Array>:

      • ‘id’<~String> - UUID of the image

      • ‘description’<~String> - Description of the image

      • ‘public’<~Boolean> - Public / Private image

      • ‘created’<~Datetime> - Timestamp of when the image was created



14
15
16
17
18
19
20
# File 'lib/fog/bluebox/requests/compute/get_templates.rb', line 14

def get_templates
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => 'api/block_templates.json'
  )
end

#reboot_block(block_id, type = 'SOFT') ⇒ Object

Reboot block

Parameters

  • block_id<~String> - Id of block to reboot

  • type<~String> - Type of reboot, must be in [‘HARD’, ‘SOFT’]

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

TODO



15
16
17
18
19
20
21
# File 'lib/fog/bluebox/requests/compute/reboot_block.rb', line 15

def reboot_block(block_id, type = 'SOFT')
  request(
    :expects  => 200,
    :method   => 'PUT',
    :path     => "api/blocks/#{block_id}/#{'soft_' if type == 'SOFT'}reboot.json"
  )
end

#reloadObject



70
71
72
# File 'lib/fog/bluebox/compute.rb', line 70

def reload
  @connection.reset
end

#request(params) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/fog/bluebox/compute.rb', line 74

def request(params)
  params[:headers] ||= {}
  params[:headers].merge!({
    'Authorization' => "Basic #{Base64.encode64([@bluebox_customer_id, @bluebox_api_key].join(':')).delete("\r\n")}"
  })

  begin
    response = @connection.request(params)
  rescue Excon::Errors::HTTPStatusError => error
    raise case error
    when Excon::Errors::NotFound
      Fog::Compute::Bluebox::NotFound.slurp(error)
    else
      error
    end
  end
  unless response.body.empty?
    response.body = Fog::JSON.decode(response.body)
  end
  response
end