lib/fog/profitbricks/requests/compute/create_volume.rb
module Fog
module Compute
class ProfitBricks
class Real
# Creates a volume within the data center. This will NOT attach the volume to a server.
#
# ==== Parameters
# * datacenter_id<~String> - Required, UUID of virtual data center
# * options<~Hash>:
# * name<~String> - The name of the volume
# * size<~Integer> - Required, the size of the volume in GB
# * bus<~String> - The bus type of the volume (VIRTIO or IDE). Default: VIRTIO.
# * image<~String> - Required**, the image or snapshot ID
# * imageAlias<~String> - Required**, an alias to a ProfitBricks public image. Use instead of "image".
# * type<~String> - The volume type, HDD or SSD
# * licenceType<~String> - Required**, the licence type of the volume. Options: LINUX, WINDOWS, UNKNOWN, OTHER
# * imagePassword<~String> - One-time password is set on the Image for the appropriate account.
# This field may only be set in creation requests. When reading, it always returns null.
# Password has to contain 8-50 characters.
# Only these characters are allowed: [abcdefghjkmnpqrstuvxABCDEFGHJKLMNPQRSTUVX23456789]
# * sshKeys<~String> - SSH keys to allow access to the volume via SSH
#
# ** Either the image or the licenceType parameters need to be provided.
# licenceType is required, but if image is supplied, it will already have a licenceType set.
#
# ==== Returns
# * response<~Excon::Response>:
# * body<~Hash>:
# * id<~String> - The resource's unique identifier
# * type<~String> - The type of the created resource
# * href<~String> - URL to the object's representation (absolute path)
# * metadata<~Hash> - Hash containing the volume metadata
# * createdDate<~String> - The date the resource was created
# * createdBy<~String> - The user who created the resource
# * etag<~String> - The etag for the resource
# * lastModifiedDate<~String> - The last time the resource has been modified
# * lastModifiedBy<~String> - The user who last modified the resource
# * state<~String> - Volume state
# * properties<~Hash> - Hash containing the volume properties
# * name<~String> - The name of the volume.
# * type<~String> - The volume type, HDD or SSD.
# * size<~Integer> - The size of the volume in GB.
# * image<~String> - The image or snapshot ID.
# * imagePassword<~String> - Indicates if a password is set on the image.
# * sshKeys<~String> - SSH keys
# * bus<~String> - The bus type of the volume (VIRTIO or IDE). Default: VIRTIO.
# * licenceType<~String> - Volume licence type. ( WINDOWS, LINUX, OTHER, UNKNOWN)
# * cpuHotPlug<~Boolean> - This volume is capable of CPU hot plug (no reboot required)
# * cpuHotUnplug<~Boolean> - This volume is capable of CPU hot unplug (no reboot required)
# * ramHotPlug<~Boolean> - This volume is capable of memory hot plug (no reboot required)
# * ramHotUnplug<~Boolean> - This volume is capable of memory hot unplug (no reboot required)
# * nicHotPlug<~Boolean> - This volume is capable of nic hot plug (no reboot required)
# * nicHotUnplug<~Boolean> - This volume is capable of nic hot unplug (no reboot required)
# * discVirtioHotPlug<~Boolean> - This volume is capable of Virt-IO drive hot plug (no reboot required)
# * discVirtioHotPlug<~Boolean> - This volume is capable of Virt-IO drive hot unplug (no reboot required)
# * discScsiHotPlug<~Boolean> - This volume is capable of Scsi drive hot plug (no reboot required)
# * discScsiHotUnplug<~Boolean> - This volume is capable of Scsi drive hot unplug (no reboot required)
# * deviceNumber<~Integer> - The LUN ID of the volume volume
#
# {ProfitBricks API Documentation}[https://devops.profitbricks.com/api/cloud/v2/#create-volume]
def create_volume(datacenter_id, options = {})
volume = {
:properties => options
}
request(
:expects => [202],
:method => 'POST',
:path => "/datacenters/#{datacenter_id}/volumes",
:body => Fog::JSON.encode(volume)
)
end
end
class Mock
def create_volume(datacenter_id, options = {})
response = Excon::Response.new
response.status = 202
if options[:size] == nil
raise Excon::Error::HTTPStatus, "Attribute 'size' is required"
end
if datacenter = data[:datacenters]['items'].find do |attrib|
attrib['id'] == datacenter_id
end
datacenter['version'] += 1 if datacenter['version']
else
raise Excon::Error::HTTPStatus, 'Resource does not exist'
end
volume_id = Fog::UUID.uuid
volume = {
'id' => volume_id,
'type' => 'volume',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{datacenter['id']}/volumes/#{volume_id}",
'metadata' => {
'createdDate' => '2015-03-18T19=>00=>51Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => 'c4a2fde6ba91a038ff953b939cc21efe',
'lastModifiedDate' => '2015-03-18T19=>00=>51Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => options[:name],
'type' => options[:type],
'size' => options[:size],
'image' => options[:image],
'availabilityZone' => options[:availabilityZone],
'bus' => 'VIRTIO',
'licenceType' => 'OTHER',
'cpuHotPlug' => 'true',
'cpuHotUnplug' => 'false',
'ramHotPlug' => 'false',
'ramHotUnplug' => 'false',
'nicHotPlug' => 'true',
'nicHotUnplug' => 'true',
'discVirtioHotPlug' => 'true',
'discVirtioHotUnplug' => 'true',
'discScsiHotPlug' => 'false',
'discScsiHotUnplug' => 'false',
'deviceNumber' => 1
},
'datacenter_id' => datacenter['id']
}
data[:volumes]['items'] << volume
response.body = volume
response
end
end
end
end
end