Hi,
it seems that the fact that you need to run 'rake fixtures' in the client/ dir before the mock driver does anything useful causes needless pain and suffering. This patch here tries to alleviate the situation by storing initial data files with the driver, and automatically initializing storage for the running driver (in $DELTACLOUD_MOCK_STORAGE, or, if that's not set, in /var/tmp/deltalcoud-mock-$USER)
David
From c02980e9d8963a428984eb384ff4cefd6efa303d Mon Sep 17 00:00:00 2001
From: David Lutterkort lutter@redhat.com Date: Thu, 25 Feb 2010 15:29:24 -0800 Subject: [PATCH core] Mock driver: change how we store mock state
* store initial data files with driver in directory data/ * keep data for running driver in $DELTACLOUD_MOCK_STORAGE or /var/tmp/deltacloud-mock-$USER * automatically initialize driver storage from the initial data
This makes the mock driver independent of the client/ directory, and avoids the confusion from having to manually initialize the per-driver storage --- .../deltacloud/drivers/mock/data/images/img1.yml | 3 + .../deltacloud/drivers/mock/data/images/img2.yml | 3 + .../deltacloud/drivers/mock/data/images/img3.yml | 3 + .../drivers/mock/data/instances/inst1.yml | 8 ++++ .../drivers/mock/data/instances/inst2.yml | 8 ++++ .../drivers/mock/data/storage_snapshots/snap1.yml | 4 ++ .../drivers/mock/data/storage_snapshots/snap2.yml | 4 ++ .../drivers/mock/data/storage_snapshots/snap3.yml | 4 ++ .../drivers/mock/data/storage_volumes/vol1.yml | 6 +++ .../drivers/mock/data/storage_volumes/vol2.yml | 6 +++ .../drivers/mock/data/storage_volumes/vol3.yml | 6 +++ .../lib/deltacloud/drivers/mock/mock_driver.rb | 42 ++++++++++++------- 12 files changed, 81 insertions(+), 16 deletions(-) create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/images/.gitignore create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/images/img1.yml create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/images/img2.yml create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/images/img3.yml create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/instances/.gitignore create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/instances/inst1.yml create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/instances/inst2.yml create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/.gitignore create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/snap1.yml create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/snap2.yml create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/snap3.yml create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/.gitignore create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/vol1.yml create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/vol2.yml create mode 100644 server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/vol3.yml
diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/images/.gitignore b/server/libexec/lib/deltacloud/drivers/mock/data/images/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/images/img1.yml b/server/libexec/lib/deltacloud/drivers/mock/data/images/img1.yml new file mode 100644 index 0000000..9e56d25 --- /dev/null +++ b/server/libexec/lib/deltacloud/drivers/mock/data/images/img1.yml @@ -0,0 +1,3 @@ +:description: Fedora 10 +:owner_id: fedoraproject +:architecture: x86_64 diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/images/img2.yml b/server/libexec/lib/deltacloud/drivers/mock/data/images/img2.yml new file mode 100644 index 0000000..df8ffa6 --- /dev/null +++ b/server/libexec/lib/deltacloud/drivers/mock/data/images/img2.yml @@ -0,0 +1,3 @@ +:description: Fedora 10 +:owner_id: fedoraproject +:architecture: i386 diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/images/img3.yml b/server/libexec/lib/deltacloud/drivers/mock/data/images/img3.yml new file mode 100644 index 0000000..a6b82a6 --- /dev/null +++ b/server/libexec/lib/deltacloud/drivers/mock/data/images/img3.yml @@ -0,0 +1,3 @@ +:description: JBoss +:owner_id: mockuser +:architecture: i386 diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/instances/.gitignore b/server/libexec/lib/deltacloud/drivers/mock/data/instances/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/instances/inst1.yml b/server/libexec/lib/deltacloud/drivers/mock/data/instances/inst1.yml new file mode 100644 index 0000000..26a6e3b --- /dev/null +++ b/server/libexec/lib/deltacloud/drivers/mock/data/instances/inst1.yml @@ -0,0 +1,8 @@ +:name: MockUserInstance +:state: RUNNING +:image_id: img3 +:owner_id: mockuser +:public_addresses: [ img3.inst1.public.com ] +:private_addresses: [ img3.inst1.private.com ] +:flavor_id: m1-small +:realm_id: us diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/instances/inst2.yml b/server/libexec/lib/deltacloud/drivers/mock/data/instances/inst2.yml new file mode 100644 index 0000000..ee1de37 --- /dev/null +++ b/server/libexec/lib/deltacloud/drivers/mock/data/instances/inst2.yml @@ -0,0 +1,8 @@ +:name: AnotherInstance +:state: RUNNING +:image_id: img1 +:owner_id: anotheruser +:public_addresses: [ img1.inst2.public.com ] +:private_addresses: [ img1.inst2.private.com ] +:flavor_id: m1-small +:realm_id: us diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/.gitignore b/server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/snap1.yml b/server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/snap1.yml new file mode 100644 index 0000000..180a2c7 --- /dev/null +++ b/server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/snap1.yml @@ -0,0 +1,4 @@ +:owner_id: fedoraproject +:created: Wed Jul 29 18:15:24 UTC 2009 +:state: COMPLETED +:storage_volume_id: vol1 diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/snap2.yml b/server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/snap2.yml new file mode 100644 index 0000000..f68c8ce --- /dev/null +++ b/server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/snap2.yml @@ -0,0 +1,4 @@ +:owner_id: mockuser +:created: Wed Jul 29 18:15:24 UTC 2009 +:state: COMPLETED +:storage_volume_id: vol2 diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/snap3.yml b/server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/snap3.yml new file mode 100644 index 0000000..f68c8ce --- /dev/null +++ b/server/libexec/lib/deltacloud/drivers/mock/data/storage_snapshots/snap3.yml @@ -0,0 +1,4 @@ +:owner_id: mockuser +:created: Wed Jul 29 18:15:24 UTC 2009 +:state: COMPLETED +:storage_volume_id: vol2 diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/.gitignore b/server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/vol1.yml b/server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/vol1.yml new file mode 100644 index 0000000..8a8923d --- /dev/null +++ b/server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/vol1.yml @@ -0,0 +1,6 @@ +:owner_id: fedoraproject +:created: Thu Jul 30 14:35:11 UTC 2009 +:state: AVAILABLE +:capacity: 1 +:device: +:instance_id: diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/vol2.yml b/server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/vol2.yml new file mode 100644 index 0000000..536dde1 --- /dev/null +++ b/server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/vol2.yml @@ -0,0 +1,6 @@ +:owner_id: mockuser +:created: Thu Jul 30 14:35:11 UTC 2009 +:state: AVAILABLE +:capacity: 1 +:device: +:instance_id: diff --git a/server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/vol3.yml b/server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/vol3.yml new file mode 100644 index 0000000..5001d88 --- /dev/null +++ b/server/libexec/lib/deltacloud/drivers/mock/data/storage_volumes/vol3.yml @@ -0,0 +1,6 @@ +:owner_id: mockuser +:created: Thu Jul 30 14:35:11 UTC 2009 +:state: IN-USE +:capacity: 1 +:device: /dev/sda1 +:instance_id: inst1 diff --git a/server/libexec/lib/deltacloud/drivers/mock/mock_driver.rb b/server/libexec/lib/deltacloud/drivers/mock/mock_driver.rb index 863de4d..315c839 100644 --- a/server/libexec/lib/deltacloud/drivers/mock/mock_driver.rb +++ b/server/libexec/lib/deltacloud/drivers/mock/mock_driver.rb @@ -23,11 +23,6 @@ module Deltacloud module Mock class MockDriver < Deltacloud::BaseDriver
- unless defined?(STORAGE_ROOT) - STORAGE_ROOT = File::join(File::dirname(__FILE__), - "../../../../../../client/specs/data") - end - # # Flavors # @@ -92,6 +87,22 @@ class MockDriver < Deltacloud::BaseDriver stopped.to( :finish ) .on( :destroy ) end
+ def initialize + if ENV["DELTACLOUD_MOCK_STORAGE"] + @storage_root = ENV["DELTACLOUD_MOCK_STORAGE"] + elsif ENV["USER"] + @storage_root = File::join("/var/tmp", "deltacloud-mock-#{ENV["USER"]}") + else + raise "Please set either the DELTACLOUD_MOCK_STORAGE or USER environment variable" + end + if ! File::directory?(@storage_root) + FileUtils::rm_rf(@storage_root) + FileUtils::mkdir_p(@storage_root) + data = Dir::glob(File::join(File::dirname(__FILE__), "data", "*")) + FileUtils::cp_r(data, @storage_root) + end + end + def flavors(credentials, opts=nil) return FLAVORS if ( opts.nil? ) results = FLAVORS @@ -113,9 +124,8 @@ class MockDriver < Deltacloud::BaseDriver
def images(credentials, opts=nil ) check_credentials( credentials ) - puts(STORAGE_ROOT) images = [] - Dir[ "#{STORAGE_ROOT}/images/*.yml" ].each do |image_file| + Dir[ "#{@storage_root}/images/*.yml" ].each do |image_file| image = YAML.load( File.read( image_file ) ) image[:id] = File.basename( image_file, ".yml" ) images << Image.new( image ) @@ -137,7 +147,7 @@ class MockDriver < Deltacloud::BaseDriver def instances(credentials, opts=nil) check_credentials( credentials ) instances = [] - Dir[ "#{STORAGE_ROOT}/instances/*.yml" ].each do |instance_file| + Dir[ "#{@storage_root}/instances/*.yml" ].each do |instance_file| instance = YAML.load( File.read( instance_file ) ) if ( instance[:owner_id] == credentials.user ) instance[:id] = File.basename( instance_file, ".yml" ) @@ -151,7 +161,7 @@ class MockDriver < Deltacloud::BaseDriver
def create_instance(credentials, image_id, opts) check_credentials( credentials ) - ids = Dir[ "#{STORAGE_ROOT}/instances/*.yml" ].collect{|e| File.basename( e, ".yml" )} + ids = Dir[ "#{@storage_root}/instances/*.yml" ].collect{|e| File.basename( e, ".yml" )}
count = 0 while true @@ -188,7 +198,7 @@ class MockDriver < Deltacloud::BaseDriver :realm_id=>realm_id, :actions=>instance_actions_for( 'RUNNING' ) } - File.open( "#{STORAGE_ROOT}/instances/#{next_id}.yml", 'w' ) {|f| + File.open( "#{@storage_root}/instances/#{next_id}.yml", 'w' ) {|f| YAML.dump( instance, f ) } instance[:id] = next_id @@ -196,7 +206,7 @@ class MockDriver < Deltacloud::BaseDriver end
def start_instance(credentials, id) - instance_file = "#{STORAGE_ROOT}/instances/#{id}.yml" + instance_file = "#{@storage_root}/instances/#{id}.yml" instance_yml = YAML.load( File.read( instance_file ) ) instance_yml[:state] = 'RUNNING' File.open( instance_file, 'w' ) do |f| @@ -206,7 +216,7 @@ class MockDriver < Deltacloud::BaseDriver end
def reboot_instance(credentials, id) - instance_file = "#{STORAGE_ROOT}/instances/#{id}.yml" + instance_file = "#{@storage_root}/instances/#{id}.yml" instance_yml = YAML.load( File.read( instance_file ) ) instance_yml[:state] = 'RUNNING' File.open( instance_file, 'w' ) do |f| @@ -217,7 +227,7 @@ class MockDriver < Deltacloud::BaseDriver
def stop_instance(credentials, id) puts "STOP INSTANCE #{id}" - instance_file = "#{STORAGE_ROOT}/instances/#{id}.yml" + instance_file = "#{@storage_root}/instances/#{id}.yml" instance_yml = YAML.load( File.read( instance_file ) ) instance_yml[:state] = 'STOPPED' File.open( instance_file, 'w' ) do |f| @@ -230,7 +240,7 @@ class MockDriver < Deltacloud::BaseDriver
def destroy_instance(credentials, id) check_credentials( credentials ) - FileUtils.rm( "#{STORAGE_ROOT}/instances/#{id}.yml" ) + FileUtils.rm( "#{@storage_root}/instances/#{id}.yml" ) end
# @@ -240,7 +250,7 @@ class MockDriver < Deltacloud::BaseDriver def storage_volumes(credentials, opts=nil) check_credentials( credentials ) volumes = [] - Dir[ "#{STORAGE_ROOT}/storage_volumes/*.yml" ].each do |storage_volume_file| + Dir[ "#{@storage_root}/storage_volumes/*.yml" ].each do |storage_volume_file| storage_volume = YAML.load( File.read( storage_volume_file ) ) if ( storage_volume[:owner_id] == credentials.user ) storage_volume[:id] = File.basename( storage_volume_file, ".yml" ) @@ -258,7 +268,7 @@ class MockDriver < Deltacloud::BaseDriver def storage_snapshots(credentials, opts=nil) check_credentials( credentials ) snapshots = [] - Dir[ "#{STORAGE_ROOT}/storage_snapshots/*.yml" ].each do |storage_snapshot_file| + Dir[ "#{@storage_root}/storage_snapshots/*.yml" ].each do |storage_snapshot_file| storage_snapshot = YAML.load( File.read( storage_snapshot_file ) ) if ( storage_snapshot[:owner_id] == credentials.user ) storage_snapshot[:id] = File.basename( storage_snapshot_file, ".yml" )