You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by mf...@apache.org on 2013/03/01 10:43:48 UTC
[1/2] git commit: Mock: Cleanup in MockDriver code
Mock: Cleanup in MockDriver code
- Removed obsoleted 'requires' (yaml, base64, etc)
- REALMS moved to 'realms' method
- @@METRICS_NAMES moved to Metric model
- Revamped 'filter_on' methods
- Next 'id' generation moved to separate method
a lot of small changes...
Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/868aa52a
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/868aa52a
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/868aa52a
Branch: refs/heads/master
Commit: 868aa52a48baa226f8e98841060ddc91daa1e558
Parents: 819ac06
Author: Michal Fojtik <mf...@redhat.com>
Authored: Mon Feb 18 12:21:39 2013 +0100
Committer: Michal fojtik <mf...@redhat.com>
Committed: Fri Mar 1 10:40:16 2013 +0100
----------------------------------------------------------------------
server/lib/deltacloud/drivers/base_driver.rb | 1 +
server/lib/deltacloud/drivers/mock/mock_driver.rb | 336 +++++++---------
server/tests/drivers/mock/instances_test.rb | 4 +-
3 files changed, 150 insertions(+), 191 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/868aa52a/server/lib/deltacloud/drivers/base_driver.rb
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/base_driver.rb b/server/lib/deltacloud/drivers/base_driver.rb
index 2b8866c..fa1d710 100644
--- a/server/lib/deltacloud/drivers/base_driver.rb
+++ b/server/lib/deltacloud/drivers/base_driver.rb
@@ -284,6 +284,7 @@ module Deltacloud
collection.select! { |e| filter == e.send(attribute) }
end
end
+ collection
end
def catched_exceptions_list
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/868aa52a/server/lib/deltacloud/drivers/mock/mock_driver.rb
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/mock_driver.rb b/server/lib/deltacloud/drivers/mock/mock_driver.rb
index f4e86c1..23eeaf6 100644
--- a/server/lib/deltacloud/drivers/mock/mock_driver.rb
+++ b/server/lib/deltacloud/drivers/mock/mock_driver.rb
@@ -14,32 +14,17 @@
# License for the specific language governing permissions and limitations
# under the License.
-require 'yaml'
-require 'base64'
-require 'etc'
require 'ipaddr'
require_relative 'mock_client'
require_relative 'mock_driver_cimi_methods'
+
require_relative '../../runner'
module Deltacloud::Drivers::Mock
class MockDriver < Deltacloud::BaseDriver
- ( REALMS = [
- Realm.new({
- :id=>'us',
- :name=>'United States',
- :limit=>:unlimited,
- :state=>'AVAILABLE'}),
- Realm.new({
- :id=>'eu',
- :name=>'Europe',
- :limit=>:unlimited,
- :state=>'AVAILABLE'}),
- ] ) unless defined?( REALMS )
-
define_hardware_profile('m1-small') do
cpu 1
memory 1.7 * 1024
@@ -48,15 +33,15 @@ module Deltacloud::Drivers::Mock
end
define_hardware_profile('m1-large') do
- cpu (1..6)
- memory ( 7680.. 15*1024), :default => 10 * 1024
+ cpu 1..6
+ memory 7680..(15*1024), :default => 10 * 1024
storage [ 850, 1024 ]
architecture 'x86_64'
end
define_hardware_profile('m1-xlarge') do
cpu 4
- memory (12*1024 .. 32*1024)
+ memory 12*1024..32*1024
storage [ 1024, 2048, 4096 ]
architecture 'x86_64'
end
@@ -76,13 +61,16 @@ module Deltacloud::Drivers::Mock
stopped.to( :finish ) .on( :destroy )
end
- feature :instances, :user_name
- feature :instances, :user_data
- feature :instances, :authentication_key
- feature :instances, :metrics
- feature :instances, :realm_filter
- feature :images, :user_name
- feature :images, :user_description
+ feature :instances,
+ :user_name,
+ :user_Data,
+ :authentication_key,
+ :metrics,
+ :realm_filter
+
+ feature :images,
+ :user_name,
+ :user_description
#cimi features
feature :machines, :default_initial_state do
@@ -107,33 +95,55 @@ module Deltacloud::Drivers::Mock
raise "NotImplementedTest" if opts and opts[:id] == "501"
raise "ProviderErrorTest" if opts and opts[:id] == "502"
raise "ProviderTimeoutTest" if opts and opts[:id] == "504"
- results = REALMS
+ results = [
+ Realm.new(
+ :id=>'us',
+ :name=>'United States',
+ :limit=>:unlimited,
+ :state=>'AVAILABLE'
+ ),
+ Realm.new(
+ :id=>'eu',
+ :name=>'Europe',
+ :limit=>:unlimited,
+ :state=>'AVAILABLE'
+ ),
+ ]
end
- results = filter_on( results, :id, opts )
+ results = filter_on( results, opts, :id )
results
end
+ def filter_by_owner(images, owner_id)
+ return images unless owner_id
+ if owner_id == 'self'
+ images.select { |e| e.owner_id == credentials.user }
+ else
+ filter_on(images, { :owner_id => owner_id}, :owner_id )
+ end
+ end
+
#
# Images
#
- def images(credentials, opts=nil )
- check_credentials( credentials )
- images = []
+ def images(credentials, opts={})
+ check_credentials(credentials)
images = @client.build_all(Image)
- images = filter_on( images, :id, opts )
- images = filter_on( images, :architecture, opts )
- if ( opts && opts[:owner_id] == 'self' )
- images = images.select{|e| e.owner_id == credentials.user }
- else
- images = filter_on( images, :owner_id, opts )
- end
+
+ images = filter_on(images, opts, :id, :architecture)
+ images = filter_by_owner(images, opts[:owner_id])
+
+ # Add hardware profiles to each image
images = images.map { |i| (i.hardware_profiles = hardware_profiles(nil)) && i }
+
images.sort_by{|e| [e.owner_id, e.description]}
end
def create_image(credentials, opts={})
check_credentials(credentials)
- instance = instance(credentials, :id => opts[:id])
+
+ instance = instance(credentials, opts)
+
safely do
raise 'CreateImageNotSupported' unless instance and instance.can_create_image?
image = {
@@ -168,62 +178,66 @@ module Deltacloud::Drivers::Mock
def instances(credentials, opts={})
check_credentials( credentials )
instances = @client.build_all(Instance)
- instances = filter_on( instances, :owner_id, :owner_id => credentials.user )
- instances = filter_on( instances, :id, opts )
- instances = filter_on( instances, :state, opts )
- instances = filter_on( instances, :realm_id, opts)
- instances
+ opts.merge!( :owner_id => credentials.user ) unless opts.has_key?(:owner_id)
+ filter_on(instances, opts, :owner_id, :id, :state, :realm_id)
end
- def create_instance(credentials, image_id, opts)
- check_credentials( credentials )
+ def generate_instance_id
ids = @client.members(:instances)
-
- count = 0
- while true
- next_id = "inst" + count.to_s
- if not ids.include?(next_id)
- break
- end
+ count, next_id = 0, ''
+ loop do
+ break unless ids.include?(next_id = "inst#{count}")
count = count + 1
end
+ next_id
+ end
- realm_id = opts[:realm_id]
- if ( realm_id.nil? )
- realm = realms(credentials).first
- ( realm_id = realm.id ) if realm
- end
+ def create_instance(credentials, image_id, opts={})
+ check_credentials( credentials )
+
+ instance_id = generate_instance_id
+ realm_id = opts[:realm_id] || realms(credentials).first.id
- hwp = find_hardware_profile(credentials, opts[:hwp_id], image_id)
- hwp ||= find_hardware_profile(credentials, 'm1-small', image_id)
+ if opts[:hwp_id]
+ hwp = find_hardware_profile(credentials, opts[:hwp_id], image_id)
+ else
+ hwp = find_hardware_profile(credentials, 'm1-small', image_id)
+ end
name = opts[:name] || "i-#{Time.now.to_i}"
+
initial_state = opts[:initial_state] || "RUNNING"
+
instance = {
- :id => next_id,
- :name=>name,
- :state=> (initial_state == "STARTED" ? "RUNNING" : initial_state),
+ :id => instance_id,
+ :name => name,
+ :state => (initial_state == "STARTED" ? "RUNNING" : initial_state),
:keyname => opts[:keyname],
- :image_id=>image_id,
- :owner_id=>credentials.user,
- :public_addresses=>[ InstanceAddress.new("#{image_id}.#{next_id}.public.com", :type => :hostname) ],
- :private_addresses=>[ InstanceAddress.new("#{image_id}.#{next_id}.private.com", :type => :hostname) ],
+ :image_id => image_id,
+ :owner_id => credentials.user,
+ :public_addresses => [
+ InstanceAddress.new("#{image_id}.#{instance_id}.public.com", :type => :hostname)
+ ],
+ :private_addresses =>[
+ InstanceAddress.new("#{image_id}.#{instance_id}.private.com", :type => :hostname)
+ ],
:instance_profile => InstanceProfile.new(hwp.name, opts),
- :realm_id=>realm_id,
- :create_image=>true,
- :actions=>instance_actions_for((initial_state == "STARTED" ? "RUNNING" : initial_state)),
+ :realm_id => realm_id,
+ :create_image => true,
+ :actions => instance_actions_for((initial_state == "STARTED" ? "RUNNING" : initial_state)),
:user_data => opts[:user_data] ? Base64::decode64(opts[:user_data]) : nil
}
+
@client.store(:instances, instance)
Instance.new( instance )
end
def update_instance_state(credentials, id, state)
instance = @client.load_collection(:instances, id)
- instance[:state] = state
- instance[:actions] = instance_actions_for( instance[:state] )
- @client.store(:instances, instance)
- Instance.new( instance )
+ Instance.new(@client.store(:instances, instance.merge(
+ :state => state,
+ :actions => instance_actions_for(state)
+ )))
end
def start_instance(credentials, id)
@@ -238,45 +252,44 @@ module Deltacloud::Drivers::Mock
update_instance_state(credentials, id, 'STOPPED')
end
-
def destroy_instance(credentials, id)
check_credentials( credentials )
@client.destroy(:instances, id)
end
# mock object to mimick Net::SSH object
- class Mock_ssh
+ class MockSSH
attr_accessor :command
end
def run_on_instance(credentials, opts={})
- ssh = Mock_ssh.new
+ ssh = MockSSH.new
ssh.command = opts[:cmd]
- Deltacloud::Runner::Response.new(ssh, "This is where the output would appear if this were not a mock provider")
+ Deltacloud::Runner::Response.new(
+ ssh,
+ "This is where the output from '#{ssh.command}' would appear if this were not a mock provider"
+ )
end
#
# Storage Volumes
#
- def storage_volumes(credentials, opts=nil)
- check_credentials( credentials )
- volumes = @client.build_all(StorageVolume)
- volumes = filter_on( volumes, :id, opts )
- volumes
+ def storage_volumes(credentials, opts={})
+ check_credentials(credentials)
+ filter_on(@client.build_all(StorageVolume), opts, :id)
end
def create_storage_volume(credentials, opts={})
check_credentials(credentials)
opts[:capacity] ||= "1"
- id = "Volume#{Time.now.to_i}"
- volume = {
- :id => id,
- :name => opts[:name] ? opts[:name] : id,
- :created => Time.now.to_s,
- :state => "AVAILABLE",
- :capacity => opts[:capacity],
- }
- @client.store(:storage_volumes, volume)
+ volume_id = "volume_#{Time.now.to_i}"
+ volume = @client.store(:storage_volumes, {
+ :id => volume_id,
+ :name => opts[:name] ? opts[:name] : "Volume#{volume_id}",
+ :created => Time.now.to_s,
+ :state => "AVAILABLE",
+ :capacity => opts[:capacity],
+ })
StorageVolume.new(volume)
end
@@ -291,7 +304,7 @@ module Deltacloud::Drivers::Mock
attach_volume_instance(opts[:id], opts[:device], opts[:instance_id])
end
- def detach_storage_volume(credentials, opts)
+ def detach_storage_volume(credentials, opts={})
check_credentials(credentials)
detach_volume_instance(opts[:id], opts[:instance_id])
end
@@ -300,11 +313,9 @@ module Deltacloud::Drivers::Mock
# Storage Snapshots
#
- def storage_snapshots(credentials, opts=nil)
+ def storage_snapshots(credentials, opts={})
check_credentials( credentials )
- snapshots = @client.build_all(StorageSnapshot)
- snapshots = filter_on(snapshots, :id, opts )
- snapshots
+ filter_on(@client.build_all(StorageSnapshot), opts, :id)
end
def create_storage_snapshot(credentials, opts={})
@@ -316,10 +327,9 @@ module Deltacloud::Drivers::Mock
:state => "COMPLETED",
:storage_volume_id => opts[:volume_id],
}
- snapshot.merge!({:name=>opts[:name]}) if opts[:name]
- snapshot.merge!({:description=>opts[:description]}) if opts[:description]
- @client.store(:storage_snapshots, snapshot)
- StorageSnapshot.new(snapshot)
+ snapshot.merge!({:name => opts[:name]}) if opts[:name]
+ snapshot.merge!({:description => opts[:description]}) if opts[:description]
+ StorageSnapshot.new(@client.store(:storage_snapshots, snapshot))
end
def destroy_storage_snapshot(credentials, opts={})
@@ -329,9 +339,7 @@ module Deltacloud::Drivers::Mock
def keys(credentials, opts={})
check_credentials(credentials)
- result = @client.build_all(Key)
- result = filter_on( result, :id, opts )
- result
+ filter_on(@client.build_all(Key), opts, :id)
end
def key(credentials, opts={})
@@ -348,9 +356,8 @@ module Deltacloud::Drivers::Mock
}
safely do
raise "KeyExist" if @client.load_collection(:keys, key_hash[:id])
- @client.store(:keys, key_hash)
+ Key.new(@client.store(:keys, key_hash))
end
- return Key.new(key_hash)
end
def destroy_key(credentials, opts={})
@@ -360,15 +367,15 @@ module Deltacloud::Drivers::Mock
def addresses(credentials, opts={})
check_credentials(credentials)
- addresses = @client.build_all(Address)
- addresses = filter_on( addresses, :id, opts )
+ filter_on(@client.build_all(Address), opts, :id)
end
def create_address(credentials, opts={})
check_credentials(credentials)
- address = {:id => allocate_mock_address.to_s, :instance_id=>nil}
- @client.store(:addresses, address)
- Address.new(address)
+ Address.new(@client.store(:addresses, {
+ :id => allocate_mock_address.to_s,
+ :instance_id => nil
+ }))
end
def destroy_address(credentials, opts={})
@@ -395,7 +402,9 @@ module Deltacloud::Drivers::Mock
raise "AddressNotInUse" unless address[:instance_id]
instance = @client.load_collection(:instances, address[:instance_id])
address[:instance_id] = nil
- instance[:public_addresses] = [InstanceAddress.new("#{instance[:image_id]}.#{instance[:id]}.public.com", :type => :hostname)]
+ instance[:public_addresses] = [
+ InstanceAddress.new("#{instance[:image_id]}.#{instance[:id]}.public.com", :type => :hostname)
+ ]
@client.store(:addresses, address)
@client.store(:instances, instance)
end
@@ -412,7 +421,7 @@ module Deltacloud::Drivers::Mock
map
end
buckets.each { |bucket| bucket.blob_list = blob_map[bucket.id] }
- filter_on( buckets, :id, opts )
+ filter_on( buckets, opts, :id)
end
#--
@@ -447,8 +456,8 @@ module Deltacloud::Drivers::Mock
def blobs(credentials, opts = {})
check_credentials(credentials)
blobs = @client.build_all(Blob)
- filter_on( blobs, :bucket, :bucket => opts['bucket'] )
- filter_on( blobs, :id, opts )
+ opts.merge!( :bucket => opts.delete('bucket') )
+ filter_on(blobs, opts, :id, :bucket)
end
#--
@@ -490,8 +499,7 @@ module Deltacloud::Drivers::Mock
:content => blob_data
})
end
- @client.store(:blobs, blob)
- Blob.new(blob)
+ Blob.new(@client.store(:blobs, blob))
end
#--
@@ -510,11 +518,7 @@ module Deltacloud::Drivers::Mock
#--
def blob_metadata(credentials, opts={})
check_credentials(credentials)
- if blob = @client.load_collection(:blobs, opts[:id])
- blob[:user_metadata]
- else
- nil
- end
+ (blob = @client.load_collection(:blobs, opts[:id])) ? blob[:user_metadata] : nil
end
#--
@@ -523,10 +527,13 @@ module Deltacloud::Drivers::Mock
def update_blob_metadata(credentials, opts={})
check_credentials(credentials)
safely do
- blob = @client.load_collection(:blobs, opts[:id])
- return false unless blob
- blob[:user_metadata] = BlobHelper::rename_metadata_headers(opts['meta_hash'], '')
- @client.store(:blobs, blob)
+ if blob = @client.load_collection(:blobs, opts[:id])
+ @client.store(:blobs, blob.merge(
+ :user_metadata => BlobHelper::rename_metadata_headers(opts['meta_hash'], '')
+ ))
+ else
+ false
+ end
end
end
@@ -534,47 +541,21 @@ module Deltacloud::Drivers::Mock
# Metrics
#--
def metrics(credentials, opts={})
- check_credentials( credentials )
- instances = @client.build_all(Instance)
- instances = filter_on( instances, :id, opts )
-
- metrics_arr = instances.collect do |instance|
- Metric.new(
- :id => instance.id,
- :entity => instance.name
+ check_credentials(credentials)
+ instances(credentials).map do |inst|
+ metric = Metric.new(
+ :id => inst.id,
+ :entity => inst.name
)
+ Metric::MOCK_METRICS_NAMES.each { |metric_name| metric.add_property(metric_name) }
+ metric.properties.sort! { |a,b| a.name <=> b.name }
+ metric
end
-
- # add metric names to metrics
- metrics_arr.each do |metric|
- @@METRIC_NAMES.each do |name|
- metric.add_property(name)
- end
- metric.properties.sort! {|a,b| a.name <=> b.name}
- end
- metrics_arr
end
def metric(credentials, opts={})
- metric = metrics(credentials, opts).first
-
- metric.properties.each do |property|
-
- property.values = (0..5).collect do |i|
-
- unit = metric_unit_for(property.name)
- average = (property.name == 'cpuUtilization') ? (rand * 1000).to_i / 10.0 : rand(1000)
- max = (property.name == 'cpuUtilization') ? (1000 + 10 * average).to_i / 20.0 : average * (i + 1)
- min = (property.name == 'cpuUtilization') ? (2.5 * average).to_i / 10.0 : (average / 4).to_i
- {
- :minimum => min,
- :maximum => max,
- :average => average,
- :timestamp => Time.now - i * 60,
- :unit => unit
- }
- end
- end
+ metric = metrics(credentials).first
+ metric.properties.each { |p| p.generate_mock_values! }
metric
end
@@ -589,9 +570,10 @@ module Deltacloud::Drivers::Mock
end
alias :new_client :check_credentials
- #Mock allocation of 'new' address
- #There is a synchronization problem (but it's the mock driver,
- #mutex seemed overkill)
+ # Mock allocation of 'new' address
+ # There is a synchronization problem (but it's the mock driver,
+ # mutex seemed overkill)
+ #
def allocate_mock_address
addresses = []
@client.members(:addresses).each do |addr|
@@ -626,30 +608,6 @@ module Deltacloud::Drivers::Mock
StorageVolume.new(volume)
end
- def metric_unit_for(name)
- case name
- when /Utilization/ then 'Percent'
- when /Byte/ then 'Bytes'
- when /Sector/ then 'Count'
- when /Count/ then 'Count'
- when /Packet/ then 'Count'
- else 'None'
- end
- end
-
- # names copied from FGCP driver
- @@METRIC_NAMES = [
- 'cpuUtilization',
- 'diskReadRequestCount',
- 'diskReadSector',
- 'diskWriteRequestCount',
- 'diskWriteSector',
- 'nicInputByte',
- 'nicInputPacket',
- 'nicOutputByte',
- 'nicOutputPacket'
- ]
-
exceptions do
on /AuthFailure/ do
http://git-wip-us.apache.org/repos/asf/deltacloud/blob/868aa52a/server/tests/drivers/mock/instances_test.rb
----------------------------------------------------------------------
diff --git a/server/tests/drivers/mock/instances_test.rb b/server/tests/drivers/mock/instances_test.rb
index 686d1f3..5d26c21 100644
--- a/server/tests/drivers/mock/instances_test.rb
+++ b/server/tests/drivers/mock/instances_test.rb
@@ -105,8 +105,8 @@ describe 'MockDriver Instances' do
it 'must support run_on_instance' do
run_cmd = @driver.run_on_instance(:cmd => 'uname', :port => '22', :private_key => '123', :ip => '127.0.0.1')
- run_cmd.body.must_equal 'This is where the output would appear if this were not a mock provider'
- run_cmd.ssh.must_be_kind_of Deltacloud::Drivers::Mock::MockDriver::Mock_ssh
+ run_cmd.body.must_equal "This is where the output from 'uname' would appear if this were not a mock provider"
+ run_cmd.ssh.must_be_kind_of Deltacloud::Drivers::Mock::MockDriver::MockSSH
run_cmd.ssh.command.must_equal 'uname'
end