lib/fog/arubacloud/compute.rb in fog-arubacloud-0.0.3 vs lib/fog/arubacloud/compute.rb in fog-arubacloud-0.0.5
- old
+ new
@@ -1,17 +1,19 @@
+# coding: utf-8
#
# Author:: Alessio Rocchi (<alessio.rocchi@staff.aruba.it>)
# © Copyright ArubaCloud.
#
# LICENSE: MIT (http://opensource.org/licenses/MIT)
#
require 'fog/arubacloud/service'
+require 'benchmark'
module Fog
- module Compute
- class ArubaCloud < Fog::Service
+ module ArubaCloud
+ class Compute < Fog::Service
# Define global constant to enumerate service type (We will need them in Vagrant :P)
PRO_HV = 1
PRO_VMW = 2
PRO_HV_LC = 3
@@ -19,24 +21,34 @@
recognizes :url
requires :arubacloud_username, :arubacloud_password
# Models
- model_path 'fog/arubacloud/models/compute'
+ model_path 'fog/arubacloud/compute/models'
collection :servers
model :server
collection :ips
model :ip
collection :templates
model :template
collection :disks
model :disk
collection :network_adapters
model :network_adapter
+ collection :snapshots
+ model :snapshot
+ collection :schedules
+ model :schedule
+ collection :loadbalancers
+ model :loadbalancer
+ collection :custom_templates
+ model :custom_template
+ collection :sharedstorages
+ model :sharedstorage
# Requests
- request_path 'fog/arubacloud/requests/compute'
+ request_path 'fog/arubacloud/compute/requests'
request :power_on_vm
request :power_off_vm
request :get_servers
request :get_server_details
request :delete_vm
@@ -45,13 +57,45 @@
request :purchase_ip
request :remove_ip
request :get_purchased_ip_addresses
request :get_hypervisors
request :reinitialize_vm
+ request :create_snapshot
+ request :apply_snapshot
+ request :delete_snapshot
+ request :archive_vm
+ request :restore_vm
+ request :get_scheduled_operations
+ request :suspend_scheduled_operations
+ request :delete_scheduled_operation
+ request :create_scheduled_operation
+ request :create_scheduled_occurrence
+ request :create_loadbalancer
+ request :remove_loadbalancer
+ request :get_loadbalancer
+ request :modify_loadbalancer
+ request :enable_loadbalancer
+ request :disable_loadbalancer
+ request :get_lb_stats
+ request :get_lb_loads
+ request :add_lb_rule
+ request :remove_instance
+ request :add_instance
+ request :get_notifications
+ request :add_contact
+ request :remove_contact
+ request :manage_custom_template
+ request :delete_custom_template
+ request :get_custom_templates
+ request :get_shared_storage
+ request :create_shared_storage
+ request :edit_shared_storage
+ request :delete_shared_storage
+ request :rename_shared_storage
+ request :get_package_id
- # Mock class to run a fake instance of the Service with no real connections.
- class Mock < Fog::ArubaCloud::Service
+ class BaseObject < Fog::ArubaCloud::Service
def initialize(options={})
@arubacloud_username = options[:arubacloud_username] || ''
@arubacloud_password = options[:arubacloud_password] || ''
@ws_enduser_url = options[:url] || Fog::ArubaCloud::DEFAULT_WS_ENDUSER_URL
end
@@ -66,31 +110,71 @@
:Sessionid => method,
:Username => @arubacloud_username,
:Password => @arubacloud_password
}
end
+
+ # Method generator to wrap around request inside requests files.
+ # @param [Hash] body
+ # @param [String] method_name
+ # @param [String] failure_message
+ # @param [Bool] benchmark
+ def request(body={}, method_name='', failure_message='', benchmark=true)
+ options = {
+ :http_method => :post,
+ :method => method_name,
+ :body => Fog::JSON.encode(body)
+ }
+ response = nil
+
+ if benchmark
+ time = Benchmark.realtime {
+ response = _request(options)
+ }
+ Fog::Logger.debug("#{options[:method]} took: #{time}")
+ else
+ response = _request(options)
+ end
+ if response['Success']
+ response
+ else
+ Fog::Logger.debug("Request failed. Debug: #{response}")
+ if !response['ResultMessage'] || response['ResultMessage'].empty?
+ raise Fog::ArubaCloud::Errors::RequestError.new(failure_message)
+ else
+ raise Fog::ArubaCloud::Errors::RequestError.new(response['ResultMessage'], response )
+ end
+ end
+ end
+ end
+
+ class Mock < BaseObject
+ def initialize(*params)
+ super(*params)
+ end
+
+ def body(method)
+ super(method)
+ end
+
+ def request(body={}, method_name='', failure_message='', benchmark=true)
+ super(body, method_name, failure_message, benchmark)
+ end
end #Mock
- class Real < Fog::ArubaCloud::Service
- def initialize(options={})
- @arubacloud_username = options[:arubacloud_username] || ''
- @arubacloud_password = options[:arubacloud_password] || ''
- @ws_enduser_url = options[:url] || Fog::ArubaCloud::DEFAULT_WS_ENDUSER_URL
+ class Real < BaseObject
+ def initialize(*params)
+ super(*params)
end
- # Return the base json object used by each request.
- # @param method [String] the name of the method to call.
- # @return [Hash] base scheme for json request.
def body(method)
- {
- :ApplicationId => method,
- :RequestId => method,
- :Sessionid => method,
- :Username => @arubacloud_username,
- :Password => @arubacloud_password
- }
+ super(method)
end
+
+ def request(body={}, method_name='', failure_message='', benchmark=true)
+ super(body, method_name, failure_message, benchmark)
+ end
end #Real
end #ArubaCloud
end #Compute
-end #Fog
\ No newline at end of file
+end #Fog