bbrowning-deltacloud-client 0.0.9.7-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,98 @@
1
+ require 'lib/deltacloud'
2
+
3
+ skip_methods = [ "id=", "uri=" ]
4
+
5
+ begin
6
+ @dc=DeltaCloud.new('mockuser', 'mockpassword', 'http://localhost:3001/api')
7
+ rescue
8
+ puts "Please make sure that Deltacloud API is running with Mock driver"
9
+ exit(1)
10
+ end
11
+
12
+ @dc.entry_points.keys.each do |ep|
13
+ @dc.send(ep)
14
+ end
15
+
16
+ class_list = DeltaCloud::classes.collect { |c| DeltaCloud::module_eval("::DeltaCloud::API::#{c}")}
17
+
18
+ def read_method_description(c, method)
19
+ if method =~ /es$/
20
+ " # Read #{c.downcase} collection from Deltacloud API"
21
+ else
22
+ case method
23
+ when "uri"
24
+ " # Return URI to API for this object"
25
+ when "action_urls"
26
+ " # Return available actions API URL"
27
+ when "client"
28
+ " # Return instance of API client"
29
+ else
30
+ " # Get #{method} attribute value from #{c.downcase}"
31
+ end
32
+ end
33
+ end
34
+
35
+ def read_parameters(c, method)
36
+ out = []
37
+ if method =~ /es$/
38
+ out << " # @param [String, #id] Filter by ID"
39
+ end
40
+ out.join("\n")
41
+ end
42
+
43
+ def read_return_value(c, method)
44
+ if method =~ /es$/
45
+ rt = "Array"
46
+ else
47
+ rt = "String"
48
+ end
49
+ " # @return [String] Value of #{method}"
50
+ end
51
+
52
+ out = []
53
+
54
+ class_list.each do |c|
55
+ class_name = "#{c}".gsub(/^DeltaCloud::/, '')
56
+ out << "module DeltaCloud"
57
+ out << " class API"
58
+ @dc.entry_points.keys.each do |ep|
59
+ out << "# Return #{ep.to_s.classify} object with given id\n"
60
+ out << "# "
61
+ out << "# #{@dc.documentation(ep.to_s).description.split("\n").join("\n# ")}"
62
+ out << "# @return [#{ep.to_s.classify}]"
63
+ out << "def #{ep.to_s.gsub(/s$/, '')}"
64
+ out << "end"
65
+ out << "# Return collection of #{ep.to_s.classify} objects"
66
+ out << "# "
67
+ out << "# #{@dc.documentation(ep.to_s).description.split("\n").join("\n# ")}"
68
+ @dc.documentation(ep.to_s, 'index').params.each do |p|
69
+ out << p.to_comment
70
+ end
71
+ out << "# @return [Array] [#{ep.to_s.classify}]"
72
+ out << "def #{ep}(opts={})"
73
+ out << "end"
74
+ end
75
+ out << " end"
76
+ out << " class #{class_name}"
77
+ c.instance_methods(false).each do |method|
78
+ next if skip_methods.include?(method)
79
+ params = read_parameters(class_name, method)
80
+ retval = read_return_value(class_name, method)
81
+ out << read_method_description(class_name, method)
82
+ out << params if params
83
+ out << retval if retval
84
+ out << " def #{method}"
85
+ out << " # This method was generated dynamically from API"
86
+ out << " end\n"
87
+ end
88
+ out << " end"
89
+ out << "end"
90
+ end
91
+
92
+ FileUtils.rm_r('doc') rescue nil
93
+ FileUtils.mkdir_p('doc')
94
+ File.open('doc/deltacloud.rb', 'w') do |f|
95
+ f.puts(out.join("\n"))
96
+ end
97
+ system("yardoc -m markdown --readme README --title 'Deltacloud Client Library' 'lib/*.rb' 'doc/deltacloud.rb' --verbose")
98
+ FileUtils.rm('doc/deltacloud.rb')
@@ -0,0 +1,86 @@
1
+ module DeltaCloud
2
+ module PlainFormatter
3
+ module FormatObject
4
+
5
+ class Base
6
+ def initialize(obj)
7
+ @obj = obj
8
+ end
9
+ end
10
+
11
+ class Image < Base
12
+ def format
13
+ sprintf("%-10s | %-20s | %-6s | %-20s | %15s",
14
+ @obj.id[0,10],
15
+ @obj.name ? @obj.name[0, 20]: 'unknown',
16
+ @obj.architecture[0,6],
17
+ @obj.description[0,20],
18
+ @obj.owner_id[0,15]
19
+ )
20
+ end
21
+ end
22
+
23
+ class Realm < Base
24
+ def format
25
+ sprintf("%-10s | %-15s | %-5s | %10s GB",
26
+ @obj.id[0, 10],
27
+ @obj.name[0, 15],
28
+ @obj.state[0,5],
29
+ @obj.limit.to_s[0,10]
30
+ )
31
+ end
32
+ end
33
+
34
+ class HardwareProfile < Base
35
+ def format
36
+ sprintf("%-15s | %-6s | %10s | %10s ", @obj.id[0, 15],
37
+ @obj.architecture.value[0,6], @obj.memory.value.to_s[0,10], @obj.storage.value.to_s[0,10])
38
+ end
39
+ end
40
+
41
+ class Instance < Base
42
+ def format
43
+ sprintf("%-15s | %-15s | %-15s | %10s | %32s | %32s",
44
+ @obj.id ? @obj.id[0,15] : '-',
45
+ @obj.name ? @obj.name[0,15] : 'unknown',
46
+ @obj.image.name ? @obj.image.name[0,15] : 'unknown',
47
+ @obj.state ? @obj.state.to_s[0,10] : 'unknown',
48
+ @obj.public_addresses.join(',')[0,32],
49
+ @obj.private_addresses.join(',')[0,32]
50
+ )
51
+ end
52
+ end
53
+
54
+ class StorageVolume < Base
55
+ def format
56
+ sprintf("%-10s | %15s GB | %-10s | %-10s | %-15s",
57
+ @obj.id[0,10],
58
+ @obj.capacity ? @obj.capacity.to_s[0,15] : 'unknown',
59
+ @obj.device ? @obj.device[0,10] : 'unknown',
60
+ @obj.respond_to?('state') ? @obj.state[0,10] : 'unknown',
61
+ @obj.instance ? @obj.instance.name[0,15] : 'unknown'
62
+ )
63
+ end
64
+ end
65
+
66
+ class StorageSnapshot < Base
67
+ def format
68
+ sprintf("%-10s | %-15s | %-6s | %15s",
69
+ @obj.id[0,10],
70
+ @obj.storage_volume.respond_to?('name') ? @obj.storage_volume.name[0, 15] : 'unknown',
71
+ @obj.state ? @obj.state[0,10] : 'unknown',
72
+ @obj.created ? @obj.created[0,19] : 'unknown'
73
+ )
74
+ end
75
+ end
76
+
77
+ end
78
+
79
+ def format(obj)
80
+ object_name = obj.class.name.classify.gsub(/^DeltaCloud::API::/, '')
81
+ format_class = DeltaCloud::PlainFormatter::FormatObject.const_get(object_name)
82
+ format_class.new(obj).format
83
+ end
84
+
85
+ end
86
+ end
@@ -0,0 +1,4 @@
1
+ :description: Fedora 10
2
+ :owner_id: fedoraproject
3
+ :architecture: x86_64
4
+ :id: img1
@@ -0,0 +1,4 @@
1
+ :description: Fedora 10
2
+ :owner_id: fedoraproject
3
+ :architecture: i386
4
+ :id: img2
@@ -0,0 +1,4 @@
1
+ :description: JBoss
2
+ :owner_id: mockuser
3
+ :architecture: i386
4
+ :id: img3
@@ -0,0 +1,16 @@
1
+ ---
2
+ :realm_id: us
3
+ :public_addresses:
4
+ - img1.inst0.public.com
5
+ :state: RUNNING
6
+ :name: "Mock Instance With Profile Change"
7
+ :private_addresses:
8
+ - img1.inst0.private.com
9
+ :image_id: img1
10
+ :instance_profile: !ruby/object:InstanceProfile
11
+ id: m1-large
12
+ memory: "12288"
13
+ :owner_id: mockuser
14
+ :actions:
15
+ - :reboot
16
+ - :stop
@@ -0,0 +1,9 @@
1
+ :name: MockUserInstance
2
+ :state: RUNNING
3
+ :image_id: img3
4
+ :owner_id: mockuser
5
+ :public_addresses: [ img3.inst1.public.com ]
6
+ :private_addresses: [ img3.inst1.private.com ]
7
+ :realm_id: us
8
+ :instance_profile: !ruby/object:InstanceProfile
9
+ id: m1-small
@@ -0,0 +1,9 @@
1
+ :name: AnotherInstance
2
+ :state: RUNNING
3
+ :image_id: img1
4
+ :owner_id: anotheruser
5
+ :public_addresses: [ img1.inst2.public.com ]
6
+ :private_addresses: [ img1.inst2.private.com ]
7
+ :realm_id: us
8
+ :instance_profile: !ruby/object:InstanceProfile
9
+ id: m1-large
@@ -0,0 +1,4 @@
1
+ :owner_id: fedoraproject
2
+ :created: Wed Jul 29 18:15:24 UTC 2009
3
+ :state: COMPLETED
4
+ :storage_volume_id: vol1
@@ -0,0 +1,4 @@
1
+ :owner_id: mockuser
2
+ :created: Wed Jul 29 18:15:24 UTC 2009
3
+ :state: COMPLETED
4
+ :storage_volume_id: vol2
@@ -0,0 +1,4 @@
1
+ :owner_id: mockuser
2
+ :created: Wed Jul 29 18:15:24 UTC 2009
3
+ :state: COMPLETED
4
+ :storage_volume_id: vol2
@@ -0,0 +1,6 @@
1
+ :owner_id: fedoraproject
2
+ :created: Thu Jul 30 14:35:11 UTC 2009
3
+ :state: AVAILABLE
4
+ :capacity: 1
5
+ :device:
6
+ :instance_id:
@@ -0,0 +1,6 @@
1
+ :owner_id: mockuser
2
+ :created: Thu Jul 30 14:35:11 UTC 2009
3
+ :state: AVAILABLE
4
+ :capacity: 1
5
+ :device:
6
+ :instance_id:
@@ -0,0 +1,6 @@
1
+ :owner_id: mockuser
2
+ :created: Thu Jul 30 14:35:11 UTC 2009
3
+ :state: IN-USE
4
+ :capacity: 1
5
+ :device: /dev/sda1
6
+ :instance_id: inst1
@@ -0,0 +1,78 @@
1
+ #
2
+ # Copyright (C) 2009 Red Hat, Inc.
3
+ #
4
+ # Licensed to the Apache Software Foundation (ASF) under one or more
5
+ # contributor license agreements. See the NOTICE file distributed with
6
+ # this work for additional information regarding copyright ownership. The
7
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance with the
9
+ # License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16
+ # License for the specific language governing permissions and limitations
17
+ # under the License.
18
+
19
+
20
+ require 'specs/spec_helper'
21
+
22
+ def prop_check(prop, value_class)
23
+ if prop.present?
24
+ prop.value.should_not be_nil
25
+ prop.value.should be_a(value_class)
26
+ end
27
+ end
28
+
29
+ describe "hardware_profiles" do
30
+
31
+ it_should_behave_like "all resources"
32
+
33
+ it "should allow retrieval of all hardware profiles" do
34
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
35
+ hardware_profiles = client.hardware_profiles
36
+ hardware_profiles.should_not be_empty
37
+ hardware_profiles.each do |hwp|
38
+ hwp.uri.should_not be_nil
39
+ hwp.uri.should be_a(String)
40
+ prop_check(hwp.architecture, String) if hwp.architecture
41
+ end
42
+ end
43
+ end
44
+
45
+ it "should allow filtering of hardware_profiles by architecture" do
46
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
47
+ hardware_profiles = client.hardware_profiles( :architecture=>'i386' )
48
+ hardware_profiles.should_not be_empty
49
+ hardware_profiles.size.should eql( 2 )
50
+ hardware_profiles.first.architecture.value.should eql( 'i386' )
51
+ end
52
+ end
53
+
54
+ it "should allow fetching a hardware_profile by id" do
55
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
56
+ hwp = client.hardware_profile( 'm1-small' )
57
+ hwp.should_not be_nil
58
+ hwp.id.should eql( 'm1-small' )
59
+ end
60
+ end
61
+
62
+ it "should allow fetching different hardware_profiles" do
63
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
64
+ hwp1 = client.hardware_profile( 'm1-small' )
65
+ hwp2 = client.hardware_profile( 'm1-xlarge' )
66
+ hwp1.storage.value.should_not eql(hwp2.storage.value)
67
+ hwp1.memory.value.should_not eql(hwp2.memory.value)
68
+ end
69
+
70
+ it "should allow fetching a hardware_profile by URI" do
71
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
72
+ hwp = client.fetch_hardware_profile( API_URL + '/hardware_profiles/m1-small' )
73
+ hwp.should_not be_nil
74
+ hwp.id.should eql( 'm1-small' )
75
+ end
76
+ end
77
+
78
+ end
@@ -0,0 +1,105 @@
1
+ #
2
+ # Copyright (C) 2009 Red Hat, Inc.
3
+ #
4
+ # Licensed to the Apache Software Foundation (ASF) under one or more
5
+ # contributor license agreements. See the NOTICE file distributed with
6
+ # this work for additional information regarding copyright ownership. The
7
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance with the
9
+ # License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16
+ # License for the specific language governing permissions and limitations
17
+ # under the License.
18
+
19
+
20
+ require 'specs/spec_helper'
21
+
22
+ describe "images" do
23
+
24
+ it_should_behave_like "all resources"
25
+
26
+ it "should allow retrieval of all images" do
27
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
28
+ images = client.images
29
+ images.should_not be_empty
30
+ images.size.should eql( 3 )
31
+ images.each do |image|
32
+ image.uri.should_not be_nil
33
+ image.uri.should be_a(String)
34
+ image.description.should_not be_nil
35
+ image.description.should be_a(String)
36
+ image.architecture.should_not be_nil
37
+ image.architecture.should be_a(String)
38
+ image.owner_id.should_not be_nil
39
+ image.owner_id.should be_a(String)
40
+ end
41
+ end
42
+ end
43
+
44
+ it "should allow retrieval of my own images" do
45
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
46
+ images = client.images( :owner_id=>:self )
47
+ images.should_not be_empty
48
+ images.size.should eql( 1 )
49
+ images.each do |image|
50
+ image.uri.should_not be_nil
51
+ image.uri.should be_a(String)
52
+ image.description.should_not be_nil
53
+ image.description.should be_a(String)
54
+ image.architecture.should_not be_nil
55
+ image.architecture.should be_a(String)
56
+ image.owner_id.should_not be_nil
57
+ image.owner_id.should be_a(String)
58
+ end
59
+ end
60
+ end
61
+
62
+ it "should allow retrieval of a single image by ID" do
63
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
64
+ image = client.image( 'img1' )
65
+ image.should_not be_nil
66
+ image.uri.should eql( API_URL + '/images/img1' )
67
+ image.id.should eql( 'img1' )
68
+ image.architecture.should eql( 'x86_64' )
69
+ end
70
+ end
71
+
72
+ it "should allow retrieval of a single image by URI" do
73
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
74
+ image = client.fetch_image( API_URL + '/images/img1' )
75
+ image.should_not be_nil
76
+ image.uri.should eql( API_URL + '/images/img1' )
77
+ image.id.should eql( 'img1' )
78
+ image.architecture.should eql( 'x86_64' )
79
+ end
80
+ end
81
+
82
+ describe "filtering by architecture" do
83
+ it "return matching images" do
84
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
85
+ images = client.images( :architecture=>'x86_64' )
86
+ images.should_not be_empty
87
+ images.each do |image|
88
+ image.architecture.should eql( 'x86_64' )
89
+ end
90
+ images = client.images( :architecture=>'i386' )
91
+ images.should_not be_empty
92
+ images.each do |image|
93
+ image.architecture.should eql( 'i386' )
94
+ end
95
+ end
96
+ end
97
+
98
+ it "should return an empty array for no matches" do
99
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
100
+ images = client.images( :architecture=>'8088' )
101
+ images.should be_empty
102
+ end
103
+ end
104
+ end
105
+ end