deltacloud-client 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +502 -0
- data/Rakefile +39 -0
- data/credentials.yml +2 -0
- data/init.rb +19 -0
- data/lib/dcloud/base_model.rb +80 -0
- data/lib/dcloud/flavor.rb +43 -0
- data/lib/dcloud/image.rb +46 -0
- data/lib/dcloud/instance.rb +97 -0
- data/lib/dcloud/realm.rb +47 -0
- data/lib/dcloud/state.rb +30 -0
- data/lib/dcloud/storage_snapshot.rb +50 -0
- data/lib/dcloud/storage_volume.rb +53 -0
- data/lib/dcloud/transition.rb +35 -0
- data/lib/deltacloud.rb +356 -0
- data/specs/data/images/img1.yml +3 -0
- data/specs/data/images/img2.yml +3 -0
- data/specs/data/images/img3.yml +3 -0
- data/specs/data/instances/inst1.yml +8 -0
- data/specs/data/instances/inst2.yml +8 -0
- data/specs/data/storage_snapshots/snap1.yml +4 -0
- data/specs/data/storage_snapshots/snap2.yml +4 -0
- data/specs/data/storage_snapshots/snap3.yml +4 -0
- data/specs/data/storage_volumes/vol1.yml +6 -0
- data/specs/data/storage_volumes/vol2.yml +6 -0
- data/specs/data/storage_volumes/vol3.yml +6 -0
- data/specs/fixtures/images/img1.yml +3 -0
- data/specs/fixtures/images/img2.yml +3 -0
- data/specs/fixtures/images/img3.yml +3 -0
- data/specs/fixtures/instances/inst1.yml +8 -0
- data/specs/fixtures/instances/inst2.yml +8 -0
- data/specs/fixtures/storage_snapshots/snap1.yml +4 -0
- data/specs/fixtures/storage_snapshots/snap2.yml +4 -0
- data/specs/fixtures/storage_snapshots/snap3.yml +4 -0
- data/specs/fixtures/storage_volumes/vol1.yml +6 -0
- data/specs/fixtures/storage_volumes/vol2.yml +6 -0
- data/specs/fixtures/storage_volumes/vol3.yml +6 -0
- data/specs/flavors_spec.rb +67 -0
- data/specs/images_spec.rb +104 -0
- data/specs/initialization_spec.rb +59 -0
- data/specs/instance_states_spec.rb +77 -0
- data/specs/instances_spec.rb +171 -0
- data/specs/realms_spec.rb +65 -0
- data/specs/shared/resources.rb +29 -0
- data/specs/spec_helper.rb +54 -0
- data/specs/storage_snapshot_spec.rb +76 -0
- data/specs/storage_volume_spec.rb +86 -0
- metadata +108 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2009 Red Hat, Inc.
|
3
|
+
#
|
4
|
+
# This library is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 2.1 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
15
|
+
# License along with this library; if not, write to the Free Software
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
|
+
|
18
|
+
|
19
|
+
require 'specs/spec_helper'
|
20
|
+
|
21
|
+
describe "flavors" do
|
22
|
+
|
23
|
+
it_should_behave_like "all resources"
|
24
|
+
|
25
|
+
it "should allow retrieval of all flavors" do
|
26
|
+
DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
|
27
|
+
flavors = client.flavors
|
28
|
+
flavors.should_not be_empty
|
29
|
+
flavors.each do |flavor|
|
30
|
+
flavor.uri.should_not be_nil
|
31
|
+
flavor.uri.should be_a(String)
|
32
|
+
flavor.architecture.should_not be_nil
|
33
|
+
flavor.architecture.should be_a(String)
|
34
|
+
flavor.storage.should_not be_nil
|
35
|
+
flavor.storage.should be_a(Float)
|
36
|
+
flavor.memory.should_not be_nil
|
37
|
+
flavor.memory.should be_a(Float)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should allow filtering of flavors by architecture" do
|
43
|
+
DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
|
44
|
+
flavors = client.flavors( :architecture=>'i386' )
|
45
|
+
flavors.should_not be_empty
|
46
|
+
flavors.size.should eql( 1 )
|
47
|
+
flavors.first.architecture.should eql( 'i386' )
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should allow fetching a flavor by id" do
|
52
|
+
DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
|
53
|
+
flavor = client.flavor( 'm1-small' )
|
54
|
+
flavor.should_not be_nil
|
55
|
+
flavor.id.should eql( 'm1-small' )
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should allow fetching a flavor by URI" do
|
60
|
+
DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
|
61
|
+
flavor = client.fetch_flavor( API_URL + '/flavors/m1-small' )
|
62
|
+
flavor.should_not be_nil
|
63
|
+
flavor.id.should eql( 'm1-small' )
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2009 Red Hat, Inc.
|
3
|
+
#
|
4
|
+
# This library is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 2.1 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
15
|
+
# License along with this library; if not, write to the Free Software
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
|
+
|
18
|
+
|
19
|
+
require 'specs/spec_helper'
|
20
|
+
|
21
|
+
describe "images" do
|
22
|
+
|
23
|
+
it_should_behave_like "all resources"
|
24
|
+
|
25
|
+
it "should allow retrieval of all images" do
|
26
|
+
DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
|
27
|
+
images = client.images
|
28
|
+
images.should_not be_empty
|
29
|
+
images.size.should eql( 3 )
|
30
|
+
images.each do |image|
|
31
|
+
image.uri.should_not be_nil
|
32
|
+
image.uri.should be_a(String)
|
33
|
+
image.description.should_not be_nil
|
34
|
+
image.description.should be_a(String)
|
35
|
+
image.architecture.should_not be_nil
|
36
|
+
image.architecture.should be_a(String)
|
37
|
+
image.owner_id.should_not be_nil
|
38
|
+
image.owner_id.should be_a(String)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should allow retrieval of my own images" do
|
44
|
+
DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
|
45
|
+
images = client.images( :owner_id=>:self )
|
46
|
+
images.should_not be_empty
|
47
|
+
images.size.should eql( 1 )
|
48
|
+
images.each do |image|
|
49
|
+
image.uri.should_not be_nil
|
50
|
+
image.uri.should be_a(String)
|
51
|
+
image.description.should_not be_nil
|
52
|
+
image.description.should be_a(String)
|
53
|
+
image.architecture.should_not be_nil
|
54
|
+
image.architecture.should be_a(String)
|
55
|
+
image.owner_id.should_not be_nil
|
56
|
+
image.owner_id.should be_a(String)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should allow retrieval of a single image by ID" do
|
62
|
+
DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
|
63
|
+
image = client.image( 'img1' )
|
64
|
+
image.should_not be_nil
|
65
|
+
image.uri.should eql( API_URL + '/images/img1' )
|
66
|
+
image.id.should eql( 'img1' )
|
67
|
+
image.architecture.should eql( 'x86_64' )
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should allow retrieval of a single image by URI" do
|
72
|
+
DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
|
73
|
+
image = client.fetch_image( API_URL + '/images/img1' )
|
74
|
+
image.should_not be_nil
|
75
|
+
image.uri.should eql( API_URL + '/images/img1' )
|
76
|
+
image.id.should eql( 'img1' )
|
77
|
+
image.architecture.should eql( 'x86_64' )
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "filtering by architecture" do
|
82
|
+
it "return matching images" do
|
83
|
+
DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
|
84
|
+
images = client.images( :architecture=>'x86_64' )
|
85
|
+
images.should_not be_empty
|
86
|
+
images.each do |image|
|
87
|
+
image.architecture.should eql( 'x86_64' )
|
88
|
+
end
|
89
|
+
images = client.images( :architecture=>'i386' )
|
90
|
+
images.should_not be_empty
|
91
|
+
images.each do |image|
|
92
|
+
image.architecture.should eql( 'i386' )
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should return an empty array for no matches" do
|
98
|
+
DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
|
99
|
+
images = client.images( :architecture=>'8088' )
|
100
|
+
images.should be_empty
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2009 Red Hat, Inc.
|
3
|
+
#
|
4
|
+
# This library is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 2.1 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
15
|
+
# License along with this library; if not, write to the Free Software
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
|
+
|
18
|
+
require 'specs/spec_helper'
|
19
|
+
|
20
|
+
describe "initializing the client" do
|
21
|
+
|
22
|
+
it "should parse valid API URIs" do
|
23
|
+
client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
|
24
|
+
client.api_host.should eql( API_HOST )
|
25
|
+
client.api_port.should eql( API_PORT.to_i )
|
26
|
+
client.api_path.should eql( API_PATH )
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should discover entry points upon connection" do
|
30
|
+
DeltaCloud.new( "name", "password", API_URL ) do |client|
|
31
|
+
client.entry_points[:flavors].should eql( "#{API_URL}/flavors" )
|
32
|
+
client.entry_points[:images].should eql( "#{API_URL}/images" )
|
33
|
+
client.entry_points[:instances].should eql( "#{API_URL}/instances" )
|
34
|
+
client.entry_points[:storage_volumes].should eql( "#{API_URL}/storage_volumes" )
|
35
|
+
client.entry_points[:storage_snapshots].should eql( "#{API_URL}/storage_snapshots" )
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should provide the current driver name via client" do
|
40
|
+
DeltaCloud.new( "name", "password", API_URL ) do |client|
|
41
|
+
client.driver_name.should eql( 'mock' )
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should provide the current driver name without client" do
|
46
|
+
DeltaCloud.driver_name( API_URL ).should eql( 'mock' )
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "without a block" do
|
50
|
+
before( :each ) do
|
51
|
+
reload_fixtures
|
52
|
+
end
|
53
|
+
it "should connect without a block" do
|
54
|
+
client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
|
55
|
+
client.images.should_not be_nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2009 Red Hat, Inc.
|
3
|
+
#
|
4
|
+
# This library is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 2.1 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
15
|
+
# License along with this library; if not, write to the Free Software
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
|
+
|
18
|
+
|
19
|
+
require 'specs/spec_helper'
|
20
|
+
|
21
|
+
=begin
|
22
|
+
Spec::Matchers.define :include_transition do |action,to|
|
23
|
+
match do |transitions|
|
24
|
+
found = transitions.find{|e| e.action.to_s == action.to_s && e.to.to_s == to.to_s }
|
25
|
+
! found.nil?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
=end
|
29
|
+
|
30
|
+
describe "instance-states" do
|
31
|
+
|
32
|
+
it_should_behave_like "all resources"
|
33
|
+
|
34
|
+
it "should allow retrieval of instance-state information" do
|
35
|
+
DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
|
36
|
+
instance_states = client.instance_states
|
37
|
+
instance_states.should_not be_nil
|
38
|
+
instance_states.should_not be_empty
|
39
|
+
|
40
|
+
instance_states[0].name.should eql( 'start' )
|
41
|
+
instance_states[0].transitions.size.should eql( 1 )
|
42
|
+
instance_states[0].transitions[0].should_not be_auto
|
43
|
+
|
44
|
+
instance_states[1].name.should eql( 'pending' )
|
45
|
+
instance_states[1].transitions.size.should eql( 1 )
|
46
|
+
instance_states[1].transitions[0].should be_auto
|
47
|
+
|
48
|
+
instance_states[2].name.should eql( 'running' )
|
49
|
+
instance_states[2].transitions.size.should eql( 2 )
|
50
|
+
includes_transition( instance_states[2].transitions, :reboot, :running ).should be_true
|
51
|
+
includes_transition( instance_states[2].transitions, :stop, :stopped ).should be_true
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should allow retrieval of a single instance-state blob" do
|
56
|
+
DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
|
57
|
+
instance_state = client.instance_state( :pending )
|
58
|
+
instance_state.should_not be_nil
|
59
|
+
instance_state.name.should eql( 'pending' )
|
60
|
+
instance_state.transitions.size.should eql( 1 )
|
61
|
+
instance_state.transitions[0].should be_auto
|
62
|
+
|
63
|
+
instance_state = client.instance_state( :running )
|
64
|
+
instance_state.name.should eql( 'running' )
|
65
|
+
instance_state.transitions.size.should eql( 2 )
|
66
|
+
includes_transition( instance_state.transitions, :reboot, :running ).should be_true
|
67
|
+
includes_transition( instance_state.transitions, :stop, :stopped ).should be_true
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def includes_transition( transitions, action, to )
|
72
|
+
found = transitions.find{|e| e.action.to_s == action.to_s && e.to.to_s == to.to_s }
|
73
|
+
! found.nil?
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
end
|