lib/fog/profitbricks/compute.rb in fog-profitbricks-4.0.0 vs lib/fog/profitbricks/compute.rb in fog-profitbricks-4.1.0

- old
+ new

@@ -4,11 +4,11 @@ API_VERSION = 'v4'.freeze autoload :Base, File.expand_path('../models/base', __FILE__) requires :profitbricks_username, :profitbricks_password - recognizes :profitbricks_url + recognizes :profitbricks_url, :profitbricks_user_agent # Models model_path 'fog/profitbricks/models/compute' model :server collection :servers @@ -49,131 +49,132 @@ 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_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 :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_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_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 :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 :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 :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 :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 :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_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_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_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_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_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_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_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_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 + 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"] = Fog::Core::Connection.user_agents.to_s + 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 @@ -183,10 +184,11 @@ params[:headers]["Authorization"] = "Basic #{auth_header}" params[:path_style] = false begin response = @connection.request(params) + rescue Excon::Errors::Unauthorized => error Logger.warning('Unauthorized error') raise error, Fog::JSON.decode(error.response.body)['messages'] rescue Excon::Errors::HTTPStatusError => error Logger.warning('HTTPStatusError error') @@ -261,11 +263,11 @@ 'properties' => { 'name' => 'dc_1', 'description' => 'testing fog rest implementation', 'location' => 'us/las', 'version' => 1, - 'features' => %w[SSD MULTIPLE_CPU] + 'features' => %w(SSD MULTIPLE_CPU) } }, { 'id' => dc2_id, 'type' => 'datacenter', @@ -281,11 +283,11 @@ 'properties' => { 'name' => 'dc_2', 'description' => 'testing fog rest implementation', 'location' => 'de/fkb', 'version' => 1, - 'features' => %w[SSD MULTIPLE_CPU] + 'features' => %w(SSD MULTIPLE_CPU) } } ] }, :servers => { @@ -475,29 +477,29 @@ 'id' => 'de/fkb', 'type' => 'location', 'href' => 'https://api.profitbricks.com/rest/v2/locations/de/fkb', 'properties' => { 'name' => 'karlsruhe', - 'features' => %w[SSD MULTIPLE_CPU] + '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] + '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] + 'features' => %w(SSD MULTIPLE_CPU) } } ] }, :images => @@ -538,10 +540,42 @@ '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', @@ -1096,13 +1130,14 @@ 'datacenter_id' => dc1_id } ] }, :contracts => { - 'contractNumber' => '12345678', - 'owner' => 'test@domain.com', - 'status' => 'BILLABLE', + 'type' => 'contract', + 'contractNumber' => '12345678', + 'owner' => 'test@domain.com', + 'status' => 'BILLABLE', 'resourceLimits' => { 'coresPerServer' => '20', 'coresPerContract' => '30', 'coresProvisioned' => '0', 'ramPerServer' => '204800', @@ -1114,11 +1149,120 @@ 'ssdLimitPerVolume' => '2048000', 'ssdLimitPerContract' => '3072000', 'ssdVolumeProvisioned' => '0', 'reservableIps' => '3', 'reservedIpsOnContract' => '0', - 'reservedIpsInUse' => '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