ogle 0.1.2 → 0.2.0

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.
data/README.md CHANGED
@@ -16,31 +16,7 @@ Depending on the call you make, glance will sometimes return JSON and others XML
16
16
 
17
17
  ### Examples
18
18
 
19
- require "ogle"
20
-
21
- CONNECTION = Ogle::Client.new(
22
- :host => "example.com"
23
- )
24
-
25
- # This will give a list of all the images
26
- response = CONNECTION.image.all
27
- puts response
28
-
29
- # This will give a detailed list of all the images
30
- response = CONNECTION.image true
31
- puts response
32
-
33
- # This will return a list of only images that are runable (are not aki or ari)
34
- response = CONNECTION.image.runable
35
- puts response
36
-
37
- # This will return headers for a specific image as a hash
38
- response = CONNECTION.image.find 6
39
- puts response
40
-
41
- # This will delete a given image
42
- response = CONNECTION.image.delete 6
43
- puts response.code
19
+ Please see the examples wiki here: https://github.com/kevinbringard/ogle/wiki/Examples
44
20
 
45
21
  ## Compatability
46
22
 
data/lib/ogle/image.rb CHANGED
@@ -1,4 +1,33 @@
1
1
  module Ogle
2
+ class ImageData
3
+ ##
4
+ # Return a valid ami id from the given 'glance id'.
5
+ #
6
+ # +glance_id+: A String representing an image id in glance.
7
+ #
8
+ # Note:
9
+ # Glance image ids differ from those used by the EC2 API.
10
+ # Currently there is no way to query EC2 for a glance_id
11
+ # or vice versa.
12
+
13
+ def to_ami_id
14
+ hex = self.id.to_i.to_s 16
15
+ padded = hex.to_s.rjust 8,"0"
16
+
17
+ "ami-#{padded}"
18
+ end
19
+
20
+ def initialize hash
21
+ class << self; self end.instance_eval do
22
+ hash.each_pair.each do |k, v|
23
+ define_method k do
24
+ v
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+
2
31
  class Image
3
32
  def initialize connection
4
33
  @connection = connection
@@ -15,7 +44,9 @@ module Ogle
15
44
 
16
45
  response = @connection.get path
17
46
 
18
- response.body['images']
47
+ response.body['images'].collect do |r|
48
+ ImageData.new r
49
+ end
19
50
  end
20
51
 
21
52
  ##
@@ -26,17 +57,19 @@ module Ogle
26
57
  def find image_id
27
58
  response = @connection.head "/images/#{image_id}"
28
59
 
29
- Hash.new.tap do |h|
30
- properties = h['properties'] = Hash.new
31
- response.each_header do |k, v|
32
- case k.downcase.tr '-', '_'
33
- when %r{^x_image_meta_property_([a-z_]+)$}
34
- properties[$1] = v
35
- when %r{^x_image_meta_([a-z_]+)$}
36
- h[$1] = v
60
+ ImageData.new(
61
+ Hash.new.tap do |h|
62
+ properties = h['properties'] = Hash.new
63
+ response.each_header do |k, v|
64
+ case k.downcase.tr '-', '_'
65
+ when %r{^x_image_meta_property_([a-z_]+)$}
66
+ properties[$1] = v
67
+ when %r{^x_image_meta_([a-z_]+)$}
68
+ h[$1] = v
69
+ end
37
70
  end
38
71
  end
39
- end
72
+ )
40
73
  end
41
74
 
42
75
  ##
@@ -51,13 +84,11 @@ module Ogle
51
84
  end
52
85
  end
53
86
 
54
- def create file
55
- end
56
-
57
87
  ##
58
- # Delete an image
88
+ # Delete an image.
89
+ #
59
90
  # +image_id+: A String representing an image_id.
60
-
91
+
61
92
  def delete image_id
62
93
  response = @connection.delete "/images/#{image_id}"
63
94
  end
@@ -67,8 +98,8 @@ module Ogle
67
98
  # Kernels and Ramdisks are not runable, so we want to ignore them.
68
99
 
69
100
  def runable? image
70
- image['container_format'] == "ami" &&
71
- image['disk_format'] == "ami"
101
+ image.container_format == "ami" &&
102
+ image.disk_format == "ami"
72
103
  end
73
104
  end
74
105
  end
data/lib/ogle/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ogle
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,139 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :head
5
+ uri: http://10.3.170.32:9292/images/6
6
+ body:
7
+ headers:
8
+ accept:
9
+ - application/json
10
+ connection:
11
+ - keep-alive
12
+ keep-alive:
13
+ - 30
14
+ response: !ruby/struct:VCR::Response
15
+ status: !ruby/struct:VCR::ResponseStatus
16
+ code: 200
17
+ message: OK
18
+ headers:
19
+ content-type:
20
+ - text/html; charset=UTF-8
21
+ content-length:
22
+ - "0"
23
+ x-image-meta-property-distro:
24
+ - CentOS
25
+ x-image-meta-id:
26
+ - "6"
27
+ x-image-meta-property-arch:
28
+ - x86_64
29
+ x-image-meta-deleted:
30
+ - "False"
31
+ x-image-meta-container-format:
32
+ - ami
33
+ x-image-meta-location:
34
+ - file:///var/lib/glance/images/6
35
+ x-image-meta-deleted-at:
36
+ - ""
37
+ x-image-meta-created-at:
38
+ - 2011-04-11T21:04:51
39
+ x-image-meta-size:
40
+ - "816906240"
41
+ x-image-meta-status:
42
+ - active
43
+ x-image-meta-property-type:
44
+ - machine
45
+ x-image-meta-property-uploader:
46
+ - root@cc-01
47
+ x-image-meta-is-public:
48
+ - "True"
49
+ x-image-meta-updated-at:
50
+ - 2011-04-11T21:04:56
51
+ x-image-meta-checksum:
52
+ - 6277381feb8708c393c64499a0ce7e1e
53
+ x-image-meta-property-version:
54
+ - "5.5"
55
+ x-image-meta-disk-format:
56
+ - ami
57
+ x-image-meta-name:
58
+ - CentOS5-5.5-Base_VM-032311-212432
59
+ location:
60
+ - http://10.3.170.32:9292/images/6
61
+ etag:
62
+ - 6277381feb8708c393c64499a0ce7e1e
63
+ date:
64
+ - Thu, 21 Apr 2011 00:17:37 GMT
65
+ connection:
66
+ - keep-alive
67
+ body:
68
+ http_version: "1.1"
69
+ - !ruby/struct:VCR::HTTPInteraction
70
+ request: !ruby/struct:VCR::Request
71
+ method: :head
72
+ uri: http://10.3.170.32:9292/images/17
73
+ body:
74
+ headers:
75
+ accept:
76
+ - application/json
77
+ connection:
78
+ - keep-alive
79
+ keep-alive:
80
+ - 30
81
+ response: !ruby/struct:VCR::Response
82
+ status: !ruby/struct:VCR::ResponseStatus
83
+ code: 200
84
+ message: OK
85
+ headers:
86
+ content-type:
87
+ - text/html; charset=UTF-8
88
+ content-length:
89
+ - "0"
90
+ x-image-meta-property-distro:
91
+ - Ubuntu
92
+ x-image-meta-id:
93
+ - "17"
94
+ x-image-meta-property-arch:
95
+ - amd64
96
+ x-image-meta-deleted:
97
+ - "False"
98
+ x-image-meta-container-format:
99
+ - ami
100
+ x-image-meta-property-uploader:
101
+ - root@e21ab3
102
+ x-image-meta-location:
103
+ - file:///var/lib/glance/images/17
104
+ x-image-meta-deleted-at:
105
+ - ""
106
+ x-image-meta-created-at:
107
+ - 2011-04-18T17:08:02
108
+ x-image-meta-size:
109
+ - "2610561024"
110
+ x-image-meta-status:
111
+ - active
112
+ x-image-meta-property-type:
113
+ - machine
114
+ x-image-meta-property-kernel-name:
115
+ - maverick-server-uec-amd64-vmlinuz-virtual
116
+ x-image-meta-is-public:
117
+ - "True"
118
+ x-image-meta-property-kernel-id:
119
+ - "1"
120
+ x-image-meta-updated-at:
121
+ - 2011-04-18T17:08:32
122
+ x-image-meta-checksum:
123
+ - c283810a95e1c8028cb22ca39f0fc40d
124
+ x-image-meta-property-version:
125
+ - "10.10"
126
+ x-image-meta-disk-format:
127
+ - ami
128
+ x-image-meta-name:
129
+ - maverick-server-uec-amd64-CloudFoundry
130
+ location:
131
+ - http://10.3.170.32:9292/images/17
132
+ etag:
133
+ - c283810a95e1c8028cb22ca39f0fc40d
134
+ date:
135
+ - Thu, 21 Apr 2011 00:17:37 GMT
136
+ connection:
137
+ - keep-alive
138
+ body:
139
+ http_version: "1.1"
@@ -4,11 +4,6 @@ CONNECTION = Ogle::Client.new(
4
4
  :host => "10.3.170.32"
5
5
  )
6
6
 
7
- def must_have_valid_keys response, keys
8
- raise "The response passed in is empty." if response.keys.empty?
9
- response.keys.delete_if { |k| keys.include? k }.must_be_empty
10
- end
11
-
12
7
  describe Ogle::Image do
13
8
  describe "#all" do
14
9
  before do
@@ -17,12 +12,12 @@ describe Ogle::Image do
17
12
  end
18
13
  end
19
14
 
20
- it "returns a hash of images" do
15
+ it "returns all images" do
21
16
  @response.size.must_be :>=, 1
22
17
  end
23
18
 
24
19
  it "returns metadata" do
25
- must_have_valid_keys @response.first, METADATA_KEYS
20
+ must_have_valid_methods @response.first, METADATA_KEYS
26
21
  end
27
22
  end
28
23
 
@@ -33,12 +28,12 @@ describe Ogle::Image do
33
28
  end
34
29
  end
35
30
 
36
- it "returns a detailed hash of images" do
31
+ it "returns detailed images" do
37
32
  @response.size.must_be :>=, 1
38
33
  end
39
34
 
40
35
  it "returns metadata" do
41
- must_have_valid_keys @response.first, DETAILED_METADATA_KEYS
36
+ must_have_valid_methods @response.first, DETAILED_METADATA_KEYS
42
37
  end
43
38
  end
44
39
 
@@ -49,12 +44,12 @@ describe Ogle::Image do
49
44
  end
50
45
  end
51
46
 
52
- it "returns a hash of all images which are runable" do
53
- @response.any? { |i| i['id'] != 1}.must_equal true
47
+ it "returns all images which are runable" do
48
+ @response.any? { |i| i.id != 1}.must_equal true
54
49
  end
55
50
 
56
51
  it "returns metadata" do
57
- must_have_valid_keys @response.first, METADATA_KEYS
52
+ must_have_valid_methods @response.first, METADATA_KEYS
58
53
  end
59
54
  end
60
55
 
@@ -63,7 +58,7 @@ describe Ogle::Image do
63
58
  response = CONNECTION.image.runable(true)
64
59
 
65
60
  it "returns metadata" do
66
- must_have_valid_keys response.first, DETAILED_METADATA_KEYS
61
+ must_have_valid_methods response.first, DETAILED_METADATA_KEYS
67
62
  end
68
63
  end
69
64
  end
@@ -76,11 +71,11 @@ describe Ogle::Image do
76
71
  end
77
72
 
78
73
  it "returns X-Image-Meta-* headers as a hash" do
79
- must_have_valid_keys @response, DETAILED_METADATA_KEYS
74
+ must_have_valid_methods @response, DETAILED_METADATA_KEYS
80
75
  end
81
76
 
82
77
  it "returns a nested properties hash" do
83
- must_have_valid_keys @response['properties'], %w(
78
+ must_have_valid_keys @response.properties, %w(
84
79
  distro
85
80
  arch
86
81
  uploader
@@ -95,10 +90,39 @@ describe Ogle::Image do
95
90
  describe "#delete" do
96
91
  VCR.use_cassette "image_delete" do
97
92
  response = CONNECTION.image.delete 15
98
-
93
+
99
94
  it "returns an HTTP/1.1 200 OK" do
100
95
  response.code.must_equal "200"
101
96
  end
102
97
  end
103
98
  end
99
+
100
+ def must_have_valid_keys response, keys
101
+ raise "The response passed in is empty." if response.keys.empty?
102
+ response.keys.delete_if { |k| keys.include? k }.must_be_empty
103
+ end
104
+
105
+ def must_have_valid_methods response, keys
106
+ keys.each { |k| response.respond_to? k }
107
+ end
108
+ end
109
+
110
+ describe Ogle::ImageData do
111
+ describe "#to_ami_id" do
112
+ it "return a valid ami id" do
113
+ VCR.use_cassette "image_find" do
114
+ @response = CONNECTION.image.find 6
115
+
116
+ @response.to_ami_id.must_equal "ami-00000006"
117
+ end
118
+ end
119
+
120
+ it "return a valid hex ami id" do
121
+ VCR.use_cassette "image_find" do
122
+ @response = CONNECTION.image.find 17
123
+
124
+ @response.to_ami_id.must_equal "ami-00000011"
125
+ end
126
+ end
127
+ end
104
128
  end
data/test/test_helper.rb CHANGED
@@ -28,13 +28,12 @@ class MiniTest::Unit::TestCase
28
28
  properties
29
29
  size
30
30
  )
31
-
32
31
  end
33
32
 
34
33
  VCR.config do |c|
35
34
  c.stub_with :webmock
36
35
  c.cassette_library_dir = "test/cassettes"
37
- c.default_cassette_options = { :record => :new_episodes }
36
+ c.default_cassette_options = { :record => :none }
38
37
  end
39
38
 
40
39
  MiniTest::Unit.autorun
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: ogle
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.2
5
+ version: 0.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kevin Bringard
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-18 00:00:00 -06:00
13
+ date: 2011-04-21 00:00:00 -06:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -89,12 +89,13 @@ files:
89
89
  - lib/ogle/version.rb
90
90
  - ogle.gemspec
91
91
  - test/cassettes/image_delete.yml
92
+ - test/cassettes/image_find.yml
92
93
  - test/cassettes/images_all.yml
93
94
  - test/cassettes/images_all_with_details.yml
94
95
  - test/cassettes/images_find.yml
95
96
  - test/cassettes/images_runable.yml
96
97
  - test/cassettes/images_runable_with_details.yml
97
- - test/lib/ogle/resource_test.rb
98
+ - test/lib/ogle/image_test.rb
98
99
  - test/test_helper.rb
99
100
  has_rdoc: true
100
101
  homepage: ""
@@ -126,10 +127,11 @@ specification_version: 3
126
127
  summary: Ruby interface for OpenStack Glance
127
128
  test_files:
128
129
  - test/cassettes/image_delete.yml
130
+ - test/cassettes/image_find.yml
129
131
  - test/cassettes/images_all.yml
130
132
  - test/cassettes/images_all_with_details.yml
131
133
  - test/cassettes/images_find.yml
132
134
  - test/cassettes/images_runable.yml
133
135
  - test/cassettes/images_runable_with_details.yml
134
- - test/lib/ogle/resource_test.rb
136
+ - test/lib/ogle/image_test.rb
135
137
  - test/test_helper.rb