lib/fog/profitbricks/compute.rb
module Fog
module Compute
class ProfitBricks < Fog::Service
API_VERSION = 'v4'.freeze
autoload :Base, File.expand_path('../models/base', __FILE__)
requires :profitbricks_username, :profitbricks_password
recognizes :profitbricks_url, :profitbricks_user_agent
# Models
model_path 'fog/profitbricks/models/compute'
model :server
collection :servers
model :datacenter
collection :datacenters
model :region
collection :regions
model :image
collection :images
model :flavor
collection :flavors
model :volume
collection :volumes
model :lan
collection :lans
model :nic
collection :nics
model :location
collection :locations
model :snapshot
collection :snapshots
model :request
collection :requests
model :ip_block
collection :ip_blocks
model :firewall_rule
collection :firewall_rules
model :load_balancer
collection :load_balancers
model :contract_resource
collection :contract_resources
model :group
collection :groups
model :share
collection :shares
model :user
collection :users
model :resource
collection :resources
# Requests
request_path 'fog/profitbricks/requests/compute'
request :create_server # createServer
request :delete_server # deleteServer
request :update_server # updateServer
request :get_all_servers # getAllServers
request :get_server # getServer
request :list_attached_volumes # listAttachedVolumes
request :attach_volume # attachVolume
request :get_attached_volume # getAttachedVolume
request :detach_volume # detachVolume
request :list_attached_cdroms # listAttachedCdroms
request :attach_cdrom # attachCdrom
request :get_attached_cdrom # getAttachedCdrom
request :detach_cdrom # detachCdrom
request :reboot_server # rebootServer
request :start_server # startServer
request :stop_server # stopServer
request :create_datacenter # createDataCenter
request :delete_datacenter # deleteDataCenter
request :update_datacenter # updateDataCenter
request :get_all_datacenters # getAllDataCenters
request :get_datacenter # getDataCenter
request :get_all_locations # getAllLocations
request :get_location # getLocation
request :get_all_images # getAllImages
request :get_image # getImage
request :update_image # updateImage
request :delete_image # deleteImage
request :get_all_flavors # getAllFlavors
request :get_flavor # getFlavor
request :create_flavor # createFlavor
request :create_volume # createVolume
request :delete_volume # deleteVolume
request :update_volume # updateVolume
request :get_all_volumes # getAllVolumes
request :get_volume # getVolume
request :create_volume_snapshot # createVolumeSnapshot
request :restore_volume_snapshot # restoreVolumeSnapshot
request :get_all_lans # getAllLans
request :get_lan # getLans
request :create_lan # createLan
request :update_lan # updateLan
request :delete_lan # deleteLan
request :create_nic # createNic
request :delete_nic # deleteNic
request :update_nic # updateNic
request :get_all_nic # getAllNic
request :get_nic # getNic
request :delete_snapshot # deleteSnapshot
request :update_snapshot # updateSnapshot
request :get_all_snapshots # getAllSnapshots
request :get_snapshot # getSnapshot
request :get_all_requests # getAllRequests
request :get_request # getRequest
request :get_request_status # getRequestStatus
request :get_all_ip_blocks # getAllIpBlocks
request :get_ip_block # getIpBlock
request :create_ip_block # createIpBlock
request :delete_ip_block # deleteIpBlock
request :get_all_firewall_rules # getAllFireWallRules
request :get_firewall_rule # getFirewallRule
request :create_firewall_rule # createFirewallRule
request :update_firewall_rule # updateFirewallRule
request :delete_firewall_rule # deleteFirewallRule
request :get_all_load_balancers # getAllLoadBalancers
request :get_load_balancer # getLoadBalancer
request :create_load_balancer # createLoadBalancer
request :delete_load_balancer # deleteLoadBalancer
request :update_load_balancer # deleteLoadBalancer
request :get_all_load_balanced_nics # getAllLoadBalancedNics
request :get_load_balanced_nic # getLoadBalancedNic
request :associate_nic_to_load_balancer # associateNicToLoadBalancer
request :remove_nic_association # removeNicAssociation
request :get_all_contract_resources # getAllContractResources
request :get_all_groups # getAllGroups
request :get_group # getGroup
request :create_group # createGroup
request :update_group # updateGroup
request :delete_group # deleteGroup
request :get_all_shares # getAllShares
request :get_share # getShare
request :add_share # addShare
request :update_share # updateShare
request :delete_share # deleteShare
request :get_all_users # getAllUsers
request :get_user # getUser
request :create_user # createUser
request :update_user # updateUser
request :delete_user # deleteUser
request :get_group_users # getGroupUsers
request :add_user_to_group # addUserToGroup
request :remove_user_from_group # removeUserFromGroup
request :get_all_resources # getAllResources
request :get_resources_by_type # getResourcesByType
request :get_resource_by_type # getResourcesByType
class Real
def initialize(options = {})
@profitbricks_username = options[:profitbricks_username]
@profitbricks_password = options[:profitbricks_password]
@profitbricks_url = options[:profitbricks_url] || "https://api.profitbricks.com"
@user_agent = options[:profitbricks_user_agent] || ""
connection_options = options[:connection_options] || {}
connection_options[:headers] ||= {}
connection_options[:headers]["User-Agent"] = @user_agent != "" ? @user_agent + " " + Fog::Core::Connection.user_agents.to_s : Fog::Core::Connection.user_agents.to_s
connection_options[:omit_default_port] = true
connection_options[:path_prefix] = "/cloudapi/#{API_VERSION}"
@connection = Fog::Core::Connection.new(@profitbricks_url, false, connection_options)
end
def request(params)
params[:headers] ||= {}
params[:headers]["Authorization"] = "Basic #{auth_header}"
params[:path_style] = false
begin
response = @connection.request(params)
rescue Excon::Errors::Unauthorized => error
raise error, Fog::JSON.decode(error.response.body)['messages']
rescue Excon::Errors::HTTPStatusError => error
raise error, Fog::JSON.decode(error.response.body)['messages']
rescue Excon::Errors::InternalServerError => error
raise error, Fog::JSON.decode(error.response.body)['messages']
rescue Fog::Errors::NotFound => error
raise error, Fog::JSON.decode(error.response.body)['messages']
end
if response && response.body && !response.body.empty?
response.body = Fog::JSON.decode(response.body)
response.body['requestId'] = get_request_id(response.headers)
end
response
end
private
def auth_header
Base64.strict_encode64(
"#{@profitbricks_username}:#{@profitbricks_password}"
)
end
def get_request_id(headers)
location = headers['Location']
location.match(/requests\/([-a-f0-9]+)/i)[1] unless location.nil?
end
end
class Mock
def self.data
dc1_id = Fog::UUID.uuid
dc2_id = Fog::UUID.uuid
serv1_id = Fog::UUID.uuid
vol1_id = Fog::UUID.uuid
vol2_id = Fog::UUID.uuid
req1_id = Fog::UUID.uuid
req2_id = Fog::UUID.uuid
nic1_id = Fog::UUID.uuid
nic2_id = Fog::UUID.uuid
ipb1_id = Fog::UUID.uuid
ipb2_id = Fog::UUID.uuid
fwr1_id = Fog::UUID.uuid
fwr2_id = Fog::UUID.uuid
lb1_id = Fog::UUID.uuid
lb2_id = Fog::UUID.uuid
@data ||= Hash.new do |hash, key|
hash[key] = {
:datacenters => {
"id" => "datacenters",
"type" => "collection",
"href" => "https://api.profitbricks.com/rest/v2/datacenters",
"items" =>
[
{
'id' => dc1_id,
'type' => 'datacenter',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}",
'metadata' => {
'createdDate' => '2016-07-31T15:41:27Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '5b91832ee85a758568d4523a86bd8702',
'lastModifiedDate' => '2016-07-31T15:41:27Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'dc_1',
'description' => 'testing fog rest implementation',
'location' => 'us/las',
'version' => 1,
'features' => %w(SSD MULTIPLE_CPU)
}
},
{
'id' => dc2_id,
'type' => 'datacenter',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc2_id}",
'metadata' => {
'createdDate' => '2016-07-31T15:41:27Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '5b91832ee85a758568d4523a86bd8702',
'lastModifiedDate' => '2016-07-31T15:41:27Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'dc_2',
'description' => 'testing fog rest implementation',
'location' => 'de/fkb',
'version' => 1,
'features' => %w(SSD MULTIPLE_CPU)
}
}
]
},
:servers => {
'id' => 'servers',
'type' => 'collection',
"href" => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers",
'items' =>
[
{
'id' => serv1_id,
'type' => 'server',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}",
'metadata' => {
'createdDate' => '2014-10-20T21:20:46Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '0018832d7a7ba455db74ac41ae9f11fe',
'lastModifiedDate' => '2015-03-18T21:31:10Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'FogTestServer_1',
'cores' => 1,
'ram' => 1024,
'availabilityZone' => 'AUTO',
'vmState' => 'RUNNING',
'bootVolume' => {
'id' => 'c04a2198-7e60-4bc0-b869-6e9c9dbcb8e1',
'type' => 'volume',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/volumes/c04a2198-7e60-4bc0-b869-6e9c9dbcb8e1",
'metadata' => {
'createdDate' => '2014-10-20T21:20:46Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '7a539b539d8ca9e08c5ac5e63c9c4c8f',
'lastModifiedDate' => '2014-10-20T21:20:46Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'Storage',
'type' => 'HDD',
'size' => 50,
'image' => '4f363db0-4955-11e4-b362-52540066fee9',
'bus' => 'VIRTIO',
'licenceType' => 'LINUX',
'cpuHotPlug' => 'true',
'cpuHotUnplug' => 'false',
'ramHotPlug' => 'true',
'ramHotUnplug' => 'false',
'nicHotPlug' => 'true',
'nicHotUnplug' => 'true',
'discVirtioHotPlug' => 'true',
'discVirtioHotUnplug' => 'true',
'discScsiHotPlug' => 'false',
'discScsiHotUnplug' => 'false',
'deviceNumber' => 1
}
},
'cpuFamily' => 'AMD_OPTERON'
},
'entities' => {
'cdroms' => {
'id' => "#{serv1_id}/cdroms",
'type' => 'collection',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/cdroms",
'items' => []
},
'volumes' => {
'id' => "#{serv1_id}/volumes",
'type' => 'collection',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/volumes",
'items' =>
[
{
'id' => 'c04a2198-7e60-4bc0-b869-6e9c9dbcb8e1',
'type' => 'volume',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/volumes/c04a2198-7e60-4bc0-b869-6e9c9dbcb8e1",
'metadata' => {
'createdDate' => '2014-10-20T21:20:46Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '7a539b539d8ca9e08c5ac5e63c9c4c8f',
'lastModifiedDate' => '2014-10-20T21:20:46Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'Storage',
'type' => 'HDD',
'size' => 50,
'image' => '4f363db0-4955-11e4-b362-52540066fee9',
'bus' => 'VIRTIO',
'licenceType' => 'LINUX',
'cpuHotPlug' => 'true',
'cpuHotUnplug' => 'false',
'ramHotPlug' => 'true',
'ramHotUnplug' => 'false',
'nicHotPlug' => 'true',
'nicHotUnplug' => 'true',
'discVirtioHotPlug' => 'true',
'discVirtioHotUnplug' => 'true',
'discScsiHotPlug' => 'false',
'discScsiHotUnplug' => 'false',
'deviceNumber' => 1
}
},
{
'id' => '5c4d37ca-d620-4546-8b24-f92e3c608c2c',
'type' => 'volume',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/volumes/5c4d37ca-d620-4546-8b24-f92e3c608c2c",
'metadata' => {
'createdDate' => '2015-03-18T21:31:10Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '0018832d7a7ba455db74ac41ae9f11fe',
'lastModifiedDate' => '2015-03-18T21:31:10Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'Docker Registry Volume',
'type' => 'HDD',
'size' => 50,
'bus' => 'VIRTIO',
'licenceType' => 'OTHER',
'cpuHotPlug' => 'false',
'cpuHotUnplug' => 'false',
'ramHotPlug' => 'false',
'ramHotUnplug' => 'false',
'nicHotPlug' => 'false',
'nicHotUnplug' => 'false',
'discVirtioHotPlug' => 'false',
'discVirtioHotUnplug' => 'false',
'discScsiHotPlug' => 'false',
'discScsiHotUnplug' => 'false',
'deviceNumber' => 2
}
}
]
},
'nics' => {
'id' => "#{serv1_id}/nics",
'type' => 'collection',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/nics",
'items' =>
[
{
'id' => '01ea3bd9-047c-4941-85cf-ed6b7a2d1d7d',
'type' => 'nic',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/nics/01ea3bd9-047c-4941-85cf-ed6b7a2d1d7d",
'metadata' => {
'createdDate' => '2015-02-09T22:46:38Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => 'b4854a82738079d2c7f43b5324bd92e3',
'lastModifiedDate' => '2015-02-09T22:46:38Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'mac' => '00:02:94:9e:f4:b0',
'ips' => ['210.94.35.77'],
'dhcp' => 'true',
'lan' => 1,
'firewallActive' => 'false'
},
'entities' => {
'firewallrules' => {
'id' => '01ea3bd9-047c-4941-85cf-ed6b7a2d1d7d/firewallrules',
'type' => 'collection',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/664f0f1c-7384-462b-8f0c-cfc4c3f6e2a3/nics/01ea3bd9-047c-4941-85cf-ed6b7a2d1d7d/firewallrules",
'items' => []
}
}
}
]
}
},
'datacenter_id' => dc1_id
}
]
},
:locations => {
"id" => "locations",
"type" => "collection",
"href" => "https://api.profitbricks.com/rest/v2/locations",
"items" =>
[
{
'id' => 'de/fkb',
'type' => 'location',
'href' => 'https://api.profitbricks.com/rest/v2/locations/de/fkb',
'properties' => {
'name' => 'karlsruhe',
'features' => %w(SSD MULTIPLE_CPU)
}
},
{
'id' => 'de/fra',
'type' => 'location',
'href' => 'https://api.profitbricks.com/rest/v2/locations/de/fra',
'properties' => {
'name' => 'frankfurt',
'features' => %w(SSD MULTIPLE_CPU)
}
},
{
'id' => 'us/las',
'type' => 'location',
'href' => 'https://api.profitbricks.com/rest/v2/locations/us/las',
'properties' => {
'name' => 'lasvegas',
'features' => %w(SSD MULTIPLE_CPU)
}
}
]
},
:images =>
{
"id" => "images",
"type" => "collection",
"href" => "https://api.profitbricks.com/rest/v2/images",
"items" =>
[
{
'id' => 'dfcb40db-28b5-11e6-9336-52540005ab80',
'type' => 'image',
'href' => 'https=>//api.profitbricks.com/rest/v2/images/dfcb40db-28b5-11e6-9336-52540005ab80',
'metadata' => {
'createdDate' => '2016-06-02T11:33:49Z',
'createdBy' => 'System',
'etag' => '9909709d99655c6f31aca789998d7d89',
'lastModifiedDate' => '2016-06-02T11:33:49Z',
'lastModifiedBy' => 'System',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'CentOS-6.8-x86_64-netinstall.iso',
'description' => '',
'location' => 'us/las',
'size' => 0.23,
'cpuHotPlug' => 'true',
'cpuHotUnplug' => 'false',
'ramHotPlug' => 'true',
'ramHotUnplug' => 'false',
'nicHotPlug' => 'true',
'nicHotUnplug' => 'true',
'discVirtioHotPlug' => 'true',
'discVirtioHotUnplug' => 'true',
'discScsiHotPlug' => 'false',
'discScsiHotUnplug' => 'false',
'licenceType' => 'LINUX',
'imageType' => 'CDROM',
'public' => 'true'
}
},
{
'id' => 'dfcb40db-28b5-11e6-9336-52540005ab80',
'type' => 'image',
'href' => 'https=>//api.profitbricks.com/rest/v2/images/dfcb40db-28b5-11e6-9336-52540005ab80',
'metadata' => {
'createdDate' => '2016-06-02T11:33:49Z',
'createdBy' => 'System',
'etag' => '9909709d99655c6f31aca789998d7d89',
'lastModifiedDate' => '2016-06-02T11:33:49Z',
'lastModifiedBy' => 'System',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'CentOS-6.8-x86_64-netinstall.iso',
'description' => '',
'location' => 'us/las',
'size' => 0.23,
'cpuHotPlug' => 'true',
'cpuHotUnplug' => 'false',
'ramHotPlug' => 'true',
'ramHotUnplug' => 'false',
'nicHotPlug' => 'true',
'nicHotUnplug' => 'true',
'discVirtioHotPlug' => 'true',
'discVirtioHotUnplug' => 'true',
'discScsiHotPlug' => 'false',
'discScsiHotUnplug' => 'false',
'licenceType' => 'LINUX',
'imageType' => 'HDD',
'public' => 'true'
}
},
{
'id' => '05cadf29-6c12-11e4-beeb-52540066fee9',
'type' => 'image',
'href' => 'https=>//api.profitbricks.com/rest/v2/images/05cadf29-6c12-11e4-beeb-52540066fee9',
'metadata' => {
'createdDate' => '2014-11-14T15:22:19Z',
'createdBy' => 'System',
'etag' => '957e0eac7456fa7554e73bf0d18860eb',
'lastModifiedDate' => '2014-11-14T15=>22=>19Z',
'lastModifiedBy' => 'System',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'Microsoft-SQL-2012-Full-trial-english.iso',
'description' => '',
'location' => 'us/las',
'size' => 4,
'cpuHotPlug' => 'false',
'cpuHotUnplug' => 'false',
'ramHotPlug' => 'false',
'ramHotUnplug' => 'false',
'nicHotPlug' => 'false',
'nicHotUnplug' => 'false',
'discVirtioHotPlug' => 'false',
'discVirtioHotUnplug' => 'false',
'discScsiHotPlug' => 'false',
'discScsiHotUnplug' => 'false',
'licenceType' => 'OTHER',
'imageType' => 'CDROM',
'public' => 'true'
}
}
]
},
:flavors =>
[
{
'flavorId' => Fog::UUID.uuid,
'flavorName' => 'Micro',
'ram' => 1024,
'disk' => 50,
'cores' => 1
},
{
'flavorId' => Fog::UUID.uuid,
'flavorName' => 'Small',
'ram' => 2048,
'disk' => 50,
'cores' => 1
}
],
:volumes => {
"id" => "#{dc1_id}/volumes",
"type" => 'collection',
"href" => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/volumes",
"items" =>
[
{
'id' => vol1_id,
'type' => 'volume',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/volumes/#{vol1_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' => 'master 1 Storage',
'type' => 'HDD',
'size' => 50,
'image' => '681673e7-bfc2-11e4-850c-52540066fee9',
'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' => dc1_id
},
{
'id' => vol2_id,
'type' => 'volume',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/volumes/#{vol2_id}",
'metadata' => {
'createdDate' => '2015-03-18T21:31:10Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '0018832d7a7ba455db74ac41ae9f11fe',
'lastModifiedDate' => '2015-03-18T21:31:10Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'Docker Registry Volume',
'type' => 'HDD',
'size' => 50,
'bus' => 'VIRTIO',
'licenceType' => 'OTHER',
'cpuHotPlug' => 'false',
'cpuHotUnplug' => 'false',
'ramHotPlug' => 'false',
'ramHotUnplug' => 'false',
'nicHotPlug' => 'false',
'nicHotUnplug' => 'false',
'discVirtioHotPlug' => 'false',
'discVirtioHotUnplug' => 'false',
'discScsiHotPlug' => 'false',
'discScsiHotUnplug' => 'false',
'deviceNumber' => 2
},
'datacenter_id' => dc1_id
}
]
},
:lans => {
'id' => "#{dc1_id}/lans",
'type' => 'collection',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/lans",
'items' =>
[
{
'id' => '9',
'type' => 'nic',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/lans/9",
'metadata' => {
'createdDate' => '2015-03-18T19:00:51Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => 'faa67fbacb1c0e2e02cf9650657251f1',
'lastModifiedDate' => '2015-03-18T19:00:51Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'FogTestLAN_1',
'public' => 'true'
},
'entities' => {
'nics' => {
'id' => '9/nics',
'type' => 'collection',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/lans/9/nics",
'items' => []
}
},
'datacenter_id' => dc1_id
}
]
},
:nics => {
'id' => "#{serv1_id}/nics",
'type' => 'collection',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/nics",
'items' =>
[
{
'id' => nic1_id,
'type' => 'nic',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/nics/#{nic1_id}",
'metadata' => {
'createdDate' => '2015-03-18T19:00:51Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => 'faa67fbacb1c0e2e02cf9650657251f1',
'lastModifiedDate' => '2015-03-18T19:00:51Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'FogTestNIC_1',
'mac' => '02:01:36:5f:09:da',
'ips' => ['10.9.194.12'],
'dhcp' => 'true',
'lan' => 2,
'firewallActive' => 'false'
},
'entities' => {
'firewallrules' => {
'id' => "#{nic1_id}/firewallrules",
'type' => 'collection',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/nics/#{nic1_id}/firewallrules",
'items' => []
}
},
'datacenter_id' => dc1_id
},
{
'id' => nic2_id,
'type' => 'nic',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/nics/#{nic2_id}",
'metadata' => {
'createdDate' => '2015-03-18T19:00:51Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => 'faa67fbacb1c0e2e02cf9650657251f1',
'lastModifiedDate' => '2015-03-18T19:00:51Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'FogTestNIC_2',
'mac' => '03:01:60:bf:d4:8a',
'ips' => ['192.96.159.188'],
'dhcp' => 'true',
'lan' => 1,
'firewallActive' => 'false'
},
'entities' => {
'firewallrules' => {
'id' => 'cf6d01d3-295d-48bd-8d07-568cce63cbbc/firewallrules',
'type' => 'collection',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/nics/#{nic2_id}/firewallrules",
'items' => []
}
},
'datacenter_id' => dc1_id
}
]
},
:snapshots => {
'id' => 'snapshots',
'type' => 'collection',
'href' => 'https =>//api.profitbricks.com/rest/v2/snapshots',
'items' =>
[
{
'id' => '3d52b13d-bec4-49de-ad05-fd2f8c687be6',
'type' => 'snapshot',
'href' => 'https =>//api.profitbricks.com/rest/v2/snapshots/3d52b13d-bec4-49de-ad05-fd2f8c687be6',
'metadata' => {
'createdDate' => '2016-08-07T22:28:38Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '83ad78a4757ab0d9bdeaebc3a6485dcf',
'lastModifiedDate' => '2016-08-07T22:28:38Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'FogTestSnapshot',
'description' => 'Testing fog create volume snapshot',
'location' => 'de/fkb',
'size' => 5,
'cpuHotPlug' => 'false',
'cpuHotUnplug' => 'false',
'ramHotPlug' => 'false',
'ramHotUnplug' => 'false',
'nicHotPlug' => 'false',
'nicHotUnplug' => 'false',
'discVirtioHotPlug' => 'false',
'discVirtioHotUnplug' => 'false',
'discScsiHotPlug' => 'false',
'discScsiHotUnplug' => 'false',
'licenceType' => 'LINUX'
}
}
]
},
:requests => {
'id' => 'requests',
'type' => 'collection',
'href' => 'https=>//api.profitbricks.com/rest/v2/requests',
'items' =>
[
{
'id' => req1_id,
'type' => 'request',
'href' => "https=>//api.profitbricks.com/rest/v2/requests/#{req1_id}",
'metadata' => {
'createdDate' => '2016-08-07T23:32:17Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '37a6259cc0c1dae299a7866489dff0bd',
'requestStatus' => {
'id' => "#{req1_id}/status",
'type' => 'request-status',
'href' => "https://api.profitbricks.com/rest/v2/requests/#{req1_id}/status"
}
},
'properties' => {
'method' => 'POST',
'headers' => {
'content-type' => 'application/x-www-form-urlencoded',
'connection' => 'Keep-Alive',
'host' => 'api.profitbricks.com',
'x-forwarded-for' => '100.00.00.01',
'content-length' => '47',
'x-forwarded-host' => 'api.profitbricks.com',
'x-reseller' => 'pb.domain',
'user-agent' => 'fog-core/1.42.0',
'x-forwarded-server' => 'my.profitbricks.com'
},
'body' => '{\'snapshotId\': \'3d52b13d-bec4-49de-ad05-fd2f8c687be6\'}',
'url' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/volumes/#{vol1_id}/restore-snapshot"
}
},
{
'id' => req2_id,
'type' => 'request',
'href' => "https=>//api.profitbricks.com/rest/v2/requests/#{req2_id}",
'metadata' => {
'createdDate' => '2016-08-07T23:32:17Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '37a6259cc0c1dae299a7866489dff0bd',
'requestStatus' => {
'id' => "#{req2_id}/status",
'type' => 'request-status',
'href' => "https://api.profitbricks.com/rest/v2/requests/#{req2_id}/status"
}
},
'properties' => {
'method' => 'POST',
'headers' => {
'content-type' => 'application/x-www-form-urlencoded',
'connection' => 'Keep-Alive',
'host' => 'api.profitbricks.com',
'x-forwarded-for' => '100.00.00.01',
'content-length' => '47',
'x-forwarded-host' => 'api.profitbricks.com',
'x-reseller' => 'pb.domain',
'user-agent' => 'fog-core/1.42.0',
'x-forwarded-server' => 'my.profitbricks.com'
},
'body' => '{\'snapshotId\': \'3d52b13d-bec4-49de-ad05-fd2f8c687be6\'}',
'url' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/volumes/#{vol2_id}/restore-snapshot"
}
}
]
},
:request_status => {
'id' => "#{req1_id}/status",
'type' => 'request-status',
'href' => "https=>//api.profitbricks.com/rest/v2/requests/#{req1_id}/status",
'metadata' => {
'status' => 'DONE',
'message' => 'Request has been successfully executed',
'etag' => '2ba22e58ca17bb728d522bba36cf8350',
'targets' =>
[
{
'target' => {
'id' => '752df03a-b9a6-48ee-b9f5-58433184aa1a',
'type' => 'volume',
'href' => 'TO_BE_INJECTED'
},
'status' => 'DONE'
}
]
}
},
:ip_blocks => {
'id' => 'ipblocks',
'type' => 'collection',
'href' => 'https://api.profitbricks.com/rest/v2/ipblocks',
'items' =>
[
{
'id' => ipb1_id,
'type' => 'ipblock',
'href' => "https://api.profitbricks.com/rest/v2/ipblocks/#{ipb1_id}",
'metadata' => {
'createdDate' => '2016-07-31T15:41:27Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '5b91832ee85a758568d4523a86bd8702',
'lastModifiedDate' => '2016-07-31T15:41:27Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'ips' => ["111.111.111.111", "222.222.222.222"],
'location' => 'us/las',
'size' => 2,
'name' => 'Fog test IP Block 1'
}
},
{
'id' => ipb2_id,
'type' => 'ipblock',
'href' => "https://api.profitbricks.com/rest/v2/ipblocks/#{ipb2_id}",
'metadata' => {
'createdDate' => '2016-07-31T15:41:27Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '5b91832ee85a758568d4523a86bd8702',
'lastModifiedDate' => '2016-07-31T15:41:27Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'ips' => ["333.333.333.333"],
'location' => 'us/las',
'size' => 1,
'name' => 'Fog test IP Block 2'
}
}
]
},
:firewall_rules => {
'id' => "#{nic1_id}/firewallrules",
'type' => 'collection',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/nics/#{nic1_id}/firewallrules",
'items' =>
[
{
'id' => fwr1_id,
'type' => 'firewall-rule',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/nics/#{nic1_id}/firewallrules/#{fwr1_id}",
'metadata' => {
'createdDate' => '2016-07-31T15:41:27Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '5b91832ee85a758568d4523a86bd8703',
'lastModifiedDate' => '2016-07-31T15:41:27Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'Fog test Firewall Rule 1',
'protocol' => 'TCP',
'sourceMac' => 'null',
'sourceIp' => 'null',
'targetIp' => 'null',
'icmpCode' => 'null',
'icmpType' => 'null',
'portRangeStart' => 22,
'portRangeEnd' => 22
},
'datacenter_id' => dc1_id,
'server_id' => serv1_id,
'nic_id' => nic1_id
},
{
'id' => fwr2_id,
'type' => 'firewall-rule',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/nics/#{nic1_id}/firewallrules/#{fwr2_id}",
'metadata' => {
'createdDate' => '2016-07-31T15:41:27Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '5b91832ee85a758568d4523a86bd8701',
'lastModifiedDate' => '2016-07-31T15:41:27Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'Fog test Firewall Rule 2',
'protocol' => 'TCP',
'sourceMac' => 'null',
'sourceIp' => 'null',
'targetIp' => 'null',
'icmpCode' => 'null',
'icmpType' => 'null',
'portRangeStart' => 24,
'portRangeEnd' => 25
},
'datacenter_id' => dc1_id,
'server_id' => serv1_id,
'nic_id' => nic1_id
}
]
},
:load_balancers => {
'id' => "#{dc1_id}/loadbalancers",
'type' => 'collection',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/loadbalancers",
'items' =>
[
{
'id' => lb1_id,
'type' => 'loadbalancer',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/loadbalancers/#{lb1_id}",
'metadata' => {
'createdDate' => '2016-07-31T15:41:27Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '5b91832ee85a758568d4523a86bd8723',
'lastModifiedDate' => '2016-07-31T15:41:27Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'Fog test Load Balancer 1',
'ip' => 'null',
'dhcp' => 'true'
},
'entities' => {
'balancednics' => {
'id' => "#{lb1_id}/balancednics",
'type' => 'collection',
'href' => "https=>//api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/loadbalancers/#{lb1_id}/balancednics",
'items' =>
[
{
'id' => nic1_id,
'type' => 'nic',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/nics/#{nic1_id}",
'metadata' => {
'createdDate' => '2015-03-18T19:00:51Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => 'faa67fbacb1c0e2e02cf9650657251f1',
'lastModifiedDate' => '2015-03-18T19:00:51Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'properties' => {
'name' => 'FogTestLoadBalancedNIC_1',
'mac' => '02:01:36:5f:09:da',
'ips' => ['10.9.194.12'],
'dhcp' => 'true',
'lan' => 2,
'firewallActive' => 'false'
},
'entities' => {
'firewallrules' => {
'id' => "#{nic1_id}/firewallrules",
'type' => 'collection',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/servers/#{serv1_id}/nics/#{nic1_id}/firewallrules",
'items' => []
}
},
'datacenter_id' => dc1_id,
'load_balancer_id' => lb1_id
}
]
}
},
'datacenter_id' => dc1_id
},
{
'id' => lb2_id,
'type' => 'loadbalancer',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/loadbalancers/#{lb2_id}",
'metadata' => {
'createdDate' => '2016-07-31T15:41:27Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '5b91832ee85a758568d4523a86bd8721',
'lastModifiedDate' => '2016-07-31T15:41:27Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'INACTIVE'
},
'properties' => {
'name' => 'Fog test Load Balancer 2',
'ip' => 'null',
'dhcp' => 'false'
},
'entities' => {
'balancednics' => {
'id' => "#{lb2_id}/balancednics",
'type' => 'collection',
'href' => "https://api.profitbricks.com/rest/v2/datacenters/#{dc1_id}/loadbalancers/#{lb2_id}/balancednics",
'items' => []
}
},
'datacenter_id' => dc1_id
}
]
},
:contracts => {
'type' => 'contract',
'contractNumber' => '12345678',
'owner' => 'test@domain.com',
'status' => 'BILLABLE',
'resourceLimits' => {
'coresPerServer' => '20',
'coresPerContract' => '30',
'coresProvisioned' => '0',
'ramPerServer' => '204800',
'ramPerContract' => '3072000',
'ramProvisioned' => '0',
'hddLimitPerVolume' => '2048000',
'hddLimitPerContract' => '3072000',
'hddVolumeProvisioned' => '0',
'ssdLimitPerVolume' => '2048000',
'ssdLimitPerContract' => '3072000',
'ssdVolumeProvisioned' => '0',
'reservableIps' => '3',
'reservedIpsOnContract' => '0',
'reservedIpsInUse' => '0',
}
},
:groups => {
'id' => "groups",
'type' => 'collection',
'href' => "https://api.profitbricks.com/cloudapi/v4/um/groups",
'items' => []
},
:shares => {
'id' => "059c4d71-f97a-4bfd-b3a5-XXXXXXXXXXXX/shares",
'type' => 'collection',
'href' => "https://api.profitbricks.com/cloudapi/v4/um/groups/059c4d71-f97a-4bfd-b3a5-XXXXXXXXXXXX/shares",
'items' => []
},
:users => {
'id' => "users",
'type' => 'collection',
'href' => "https://api.profitbricks.com/cloudapi/v4/users",
'items' => []
},
:resources => {
'id' => "resources",
'type' => 'collection',
'href' => "https://api.profitbricks.com/cloudapi/v4/um/resources",
'items' => [
{
'id' => dc1_id,
'type' => 'datacenter',
'href' => "https://api.profitbricks.com/cloudapi/v4/um/resources/datacenter/#{dc1_id}",
'metadata' => {
'createdDate' => '2016-07-31T15:41:27Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '5b91832ee85a758568d4523a86bd8702',
'lastModifiedDate' => '2016-07-31T15:41:27Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'entities' => {
'groups' => {
'id' => "#{dc1_id}/groups",
'type' => 'collection',
'href' => "https://api.profitbricks.com/cloudapi/v4/um/groups",
'items' => []
}
}
},
{
'id' => 'dfcb40db-28b5-11e6-9336-52540005ab80',
'type' => 'image',
'href' => 'https://api.profitbricks.com/cloudapi/v4/um/resources/image/dfcb40db-28b5-11e6-9336-52540005ab80',
'metadata' => {
'createdDate' => '2016-06-02T11:33:49Z',
'createdBy' => 'System',
'etag' => '9909709d99655c6f31aca789998d7d89',
'lastModifiedDate' => '2016-06-02T11:33:49Z',
'lastModifiedBy' => 'System',
'state' => 'AVAILABLE'
},
'entities' => {
'groups' => {
'id' => "dfcb40db-28b5-11e6-9336-52540005ab80/groups",
'type' => 'collection',
'href' => "https://api.profitbricks.com/cloudapi/v4/um/groups",
'items' => []
}
}
},
{
'id' => '3d52b13d-bec4-49de-ad05-fd2f8c687be6',
'type' => 'snapshot',
'href' => 'https://api.profitbricks.com/cloudapi/v4/um/resources/snapshot/3d52b13d-bec4-49de-ad05-fd2f8c687be6',
'metadata' => {
'createdDate' => '2016-08-07T22:28:38Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '83ad78a4757ab0d9bdeaebc3a6485dcf',
'lastModifiedDate' => '2016-08-07T22:28:38Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'entities' => {
'groups' => {
'id' => "3d52b13d-bec4-49de-ad05-fd2f8c687be6/groups",
'type' => 'collection',
'href' => "https://api.profitbricks.com/cloudapi/v4/um/groups",
'items' => []
}
}
},
{
'id' => ipb1_id,
'type' => 'ipblock',
'href' => "https://api.profitbricks.com/cloudapi/v4/um/resources/ipblock/#{ipb1_id}",
'metadata' => {
'createdDate' => '2016-07-31T15:41:27Z',
'createdBy' => 'test@stackpointcloud.com',
'etag' => '5b91832ee85a758568d4523a86bd8702',
'lastModifiedDate' => '2016-07-31T15:41:27Z',
'lastModifiedBy' => 'test@stackpointcloud.com',
'state' => 'AVAILABLE'
},
'entities' => {
'groups' => {
'id' => "#{ipb1_id}/groups",
'type' => 'collection',
'href' => "https://api.profitbricks.com/cloudapi/v4/um/groups",
'items' => []
}
}
}
]
}
}
end
end
def self.reset
@data = nil
end
def initialize(options = {})
@profitbricks_username = options[:profitbricks_username]
@profitbricks_password = options[:profitbricks_password]
end
def data
self.class.data[@profitbricks_username]
end
def reset_data
self.class.data.delete(@profitbricks_username)
end
end
end
end
end