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(a)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[ "#{(a)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[ "#{(a)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[ "#{(a)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( "#{(a)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 = "#{(a)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 = "#{(a)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 = "#{(a)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( "#{(a)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[ "#{(a)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[ "#{(a)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" )
--
1.6.6.1