fog 0.3.6 → 0.3.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +4 -4
- data/README.rdoc +8 -8
- data/fog.gemspec +4 -4
- data/lib/fog.rb +1 -1
- data/lib/fog/aws/storage.rb +1 -0
- data/lib/fog/bluebox/models/compute/server.rb +59 -14
- data/lib/fog/bluebox/models/compute/servers.rb +7 -0
- data/lib/fog/rackspace/models/compute/server.rb +2 -2
- data/lib/fog/slicehost/models/compute/server.rb +43 -1
- data/lib/fog/slicehost/models/compute/servers.rb +7 -0
- data/tests/aws/models/storage/directory_tests.rb +2 -1
- data/tests/aws/requests/compute/image_tests.rb +41 -0
- data/tests/aws/requests/compute/key_pair_tests.rb +11 -3
- data/tests/helpers/model_helper.rb +39 -43
- metadata +6 -6
- data/spec/aws/requests/compute/describe_images_spec.rb +0 -44
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fog (0.3.
|
4
|
+
fog (0.3.7)
|
5
5
|
builder
|
6
|
-
excon (>= 0.2.
|
6
|
+
excon (>= 0.2.3)
|
7
7
|
formatador (>= 0.0.15)
|
8
8
|
json
|
9
9
|
mime-types
|
@@ -15,7 +15,7 @@ GEM
|
|
15
15
|
remote: http://rubygems.org/
|
16
16
|
specs:
|
17
17
|
builder (2.1.2)
|
18
|
-
excon (0.2.
|
18
|
+
excon (0.2.3)
|
19
19
|
formatador (0.0.15)
|
20
20
|
gestalt (0.0.11)
|
21
21
|
formatador (>= 0.0.12)
|
@@ -35,7 +35,7 @@ PLATFORMS
|
|
35
35
|
|
36
36
|
DEPENDENCIES
|
37
37
|
builder
|
38
|
-
excon (>= 0.2.
|
38
|
+
excon (>= 0.2.3)
|
39
39
|
fog!
|
40
40
|
formatador (>= 0.0.15)
|
41
41
|
json
|
data/README.rdoc
CHANGED
@@ -93,18 +93,18 @@ It will return an {excon}[http://github.com/geemus/excon] response, which has #h
|
|
93
93
|
Play around and use the console to explore or check out the {getting started guide}[http://wiki.github.com/geemus/fog/getting-started-with-fog] for more details.
|
94
94
|
|
95
95
|
You should try out the (varying) support fog has for:
|
96
|
-
* {AWS}[http://aws.amazon.com] [{
|
97
|
-
* {Blue Box Group}[http://www.blueboxgrp.com] [{
|
96
|
+
* {AWS}[http://aws.amazon.com] [{Compute}[http://aws.amazon.com/ec2], {ELB}[http://aws.amazon.com/elasticloadbalancing], {Storage}[http://aws.amazon.com/s3], {SimpleDB}[http://aws.amazon.com/simpledb]]
|
97
|
+
* {Blue Box Group}[http://www.blueboxgrp.com] [{Compute}[http://www.blueboxgrp.com/blocks]]
|
98
98
|
* {Google}[http://www.google.com] [{Storage}[http://code.google.com/apis/storage]]
|
99
|
-
* {Rackspace}[http://www.rackspace.com] [{
|
100
|
-
* {Slicehost}[http://www.slicehost.com]
|
99
|
+
* {Rackspace}[http://www.rackspace.com] [{Compute}[http://www.rackspacecloud.com/cloud_hosting_products/servers], {Storage}[http://www.rackspacecloud.com/cloud_hosting_products/files]]
|
100
|
+
* {Slicehost}[http://www.slicehost.com] [{Compute}[http://www.slicehost.com]]
|
101
101
|
* {Terremark}[http://www.terremark.com] [{vCloud Express}[http://vcloudexpress.terremark.com]]
|
102
102
|
|
103
103
|
There are also the basics of these providers (that could use your love):
|
104
|
-
* {GoGrid}[http://www.gogrid.com]
|
105
|
-
* {Linode}[http://www.linode.com]
|
106
|
-
* Local [
|
107
|
-
* {New Servers}[http://www.newservers.com]
|
104
|
+
* {GoGrid}[http://www.gogrid.com] [{Compute}[http://www.gogrid.com]]
|
105
|
+
* {Linode}[http://www.linode.com] [{Compute}[http://www.linode.com]]
|
106
|
+
* Local [Storage]
|
107
|
+
* {New Servers}[http://www.newservers.com] [{Compute}[http://www.newservers.com]]
|
108
108
|
|
109
109
|
Enjoy, and let me know what I can do to continue improving fog!
|
110
110
|
|
data/fog.gemspec
CHANGED
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
|
|
7
7
|
## If your rubyforge_project name is different, then edit it and comment out
|
8
8
|
## the sub! line in the Rakefile
|
9
9
|
s.name = 'fog'
|
10
|
-
s.version = '0.3.
|
11
|
-
s.date = '2010-09-
|
10
|
+
s.version = '0.3.7'
|
11
|
+
s.date = '2010-09-29'
|
12
12
|
s.rubyforge_project = 'fog'
|
13
13
|
|
14
14
|
## Make sure your summary is short. The description may be as long
|
@@ -43,7 +43,7 @@ Gem::Specification.new do |s|
|
|
43
43
|
## List your runtime dependencies here. Runtime dependencies are those
|
44
44
|
## that are needed for an end user to actually USE your code.
|
45
45
|
s.add_dependency('builder')
|
46
|
-
s.add_dependency('excon', '>=0.2.
|
46
|
+
s.add_dependency('excon', '>=0.2.3')
|
47
47
|
s.add_dependency('formatador', '>=0.0.15')
|
48
48
|
s.add_dependency('json')
|
49
49
|
s.add_dependency('mime-types')
|
@@ -548,7 +548,6 @@ Gem::Specification.new do |s|
|
|
548
548
|
spec/aws/models/storage/directory_spec.rb
|
549
549
|
spec/aws/models/storage/file_spec.rb
|
550
550
|
spec/aws/models/storage/files_spec.rb
|
551
|
-
spec/aws/requests/compute/describe_images_spec.rb
|
552
551
|
spec/aws/requests/simpledb/batch_put_attributes_spec.rb
|
553
552
|
spec/aws/requests/simpledb/create_domain_spec.rb
|
554
553
|
spec/aws/requests/simpledb/delete_attributes_spec.rb
|
@@ -650,6 +649,7 @@ Gem::Specification.new do |s|
|
|
650
649
|
tests/aws/models/storage/directory_tests.rb
|
651
650
|
tests/aws/requests/compute/address_tests.rb
|
652
651
|
tests/aws/requests/compute/availability_zone_tests.rb
|
652
|
+
tests/aws/requests/compute/image_tests.rb
|
653
653
|
tests/aws/requests/compute/instance_tests.rb
|
654
654
|
tests/aws/requests/compute/key_pair_tests.rb
|
655
655
|
tests/aws/requests/compute/region_tests.rb
|
data/lib/fog.rb
CHANGED
data/lib/fog/aws/storage.rb
CHANGED
@@ -173,6 +173,7 @@ module Fog
|
|
173
173
|
|
174
174
|
if response.status == 307
|
175
175
|
uri = URI.parse(response.headers['Location'])
|
176
|
+
Formatador.display_line("[yellow][WARN] fog: followed redirect to #{uri.host}, connecting to the matching region will be more performant[/]")
|
176
177
|
response = Fog::Connection.new("#{@scheme}://#{uri.host}:#{@port}", false).request(original_params, &block)
|
177
178
|
end
|
178
179
|
|
@@ -7,6 +7,11 @@ module Fog
|
|
7
7
|
class BlockInstantiationError < StandardError; end
|
8
8
|
|
9
9
|
class Server < Fog::Model
|
10
|
+
extend Fog::Deprecation
|
11
|
+
deprecate(:ssh_key, :public_key)
|
12
|
+
deprecate(:ssh_key=, :public_key=)
|
13
|
+
deprecate(:user, :username)
|
14
|
+
deprecate(:user=, :username=)
|
10
15
|
|
11
16
|
identity :id
|
12
17
|
|
@@ -17,13 +22,16 @@ module Fog
|
|
17
22
|
attribute :ips
|
18
23
|
attribute :status
|
19
24
|
attribute :flavor_id
|
20
|
-
|
21
|
-
|
22
|
-
attr_accessor :image_id
|
25
|
+
attribute :image_id
|
23
26
|
attribute :template
|
24
27
|
|
25
|
-
|
26
|
-
|
28
|
+
attr_accessor :password
|
29
|
+
attr_writer :private_key, :private_key_path, :public_key, :public_key_path, :username
|
30
|
+
|
31
|
+
def initialize(attributes={})
|
32
|
+
@flavor_id ||= '94fd37a7-2606-47f7-84d5-9000deda52ae'
|
33
|
+
super
|
34
|
+
end
|
27
35
|
|
28
36
|
def destroy
|
29
37
|
requires :id
|
@@ -41,6 +49,22 @@ module Fog
|
|
41
49
|
connection.images.get(@image_id)
|
42
50
|
end
|
43
51
|
|
52
|
+
def private_key_path
|
53
|
+
File.expand_path(@private_key_path ||= Fog.credentials[:private_key_path])
|
54
|
+
end
|
55
|
+
|
56
|
+
def private_key
|
57
|
+
@private_key ||= File.read(private_key_path)
|
58
|
+
end
|
59
|
+
|
60
|
+
def public_key_path
|
61
|
+
File.expand_path(@public_key_path ||= Fog.credentials[:public_key_path])
|
62
|
+
end
|
63
|
+
|
64
|
+
def public_key
|
65
|
+
@public_key ||= File.read(public_key_path)
|
66
|
+
end
|
67
|
+
|
44
68
|
def ready?
|
45
69
|
@status == 'running'
|
46
70
|
end
|
@@ -53,21 +77,42 @@ module Fog
|
|
53
77
|
|
54
78
|
def save
|
55
79
|
requires :flavor_id, :image_id
|
56
|
-
options = if
|
57
|
-
raise(ArgumentError, "password or
|
58
|
-
elsif
|
59
|
-
{'ssh_public_key' =>
|
80
|
+
options = if !password && !public_key
|
81
|
+
raise(ArgumentError, "password or public_key is required for this operation")
|
82
|
+
elsif public_key
|
83
|
+
{'ssh_public_key' => public_key}
|
60
84
|
elsif @password
|
61
|
-
{'password' =>
|
62
|
-
end
|
63
|
-
if @user
|
64
|
-
options['user'] = @user
|
85
|
+
{'password' => password}
|
65
86
|
end
|
66
|
-
|
87
|
+
options['username'] = username
|
88
|
+
data = connection.create_block(flavor_id, image_id, options)
|
67
89
|
merge_attributes(data.body)
|
68
90
|
true
|
69
91
|
end
|
70
92
|
|
93
|
+
def setup(credentials = {})
|
94
|
+
requires :identity, :ips, :public_key, :username
|
95
|
+
Fog::SSH.new(ips.first['address'], username, credentials).run([
|
96
|
+
%{mkdir .ssh},
|
97
|
+
%{echo "#{public_key}" >> ~/.ssh/authorized_keys},
|
98
|
+
%{passwd -l root},
|
99
|
+
%{echo "#{attributes.to_json}" >> ~/attributes.json}
|
100
|
+
])
|
101
|
+
rescue Errno::ECONNREFUSED
|
102
|
+
sleep(1)
|
103
|
+
retry
|
104
|
+
end
|
105
|
+
|
106
|
+
def ssh(commands)
|
107
|
+
requires :identity, :ips, :private_key, :username
|
108
|
+
@ssh ||= Fog::SSH.new(ips.first['address'], username, :key_data => [private_key])
|
109
|
+
@ssh.run(commands)
|
110
|
+
end
|
111
|
+
|
112
|
+
def username
|
113
|
+
@username ||= 'deploy'
|
114
|
+
end
|
115
|
+
|
71
116
|
private
|
72
117
|
|
73
118
|
def product=(new_product)
|
@@ -14,6 +14,13 @@ module Fog
|
|
14
14
|
load(data)
|
15
15
|
end
|
16
16
|
|
17
|
+
def bootstrap(new_attributes = {})
|
18
|
+
server = create(new_attributes)
|
19
|
+
server.wait_for { ready? }
|
20
|
+
server.setup(:key_data => [server.private_key])
|
21
|
+
server
|
22
|
+
end
|
23
|
+
|
17
24
|
def get(server_id)
|
18
25
|
if server_id && server = connection.get_block(server_id).body
|
19
26
|
new(server)
|
@@ -18,8 +18,8 @@ module Fog
|
|
18
18
|
attribute :progress
|
19
19
|
attribute :status
|
20
20
|
|
21
|
-
|
22
|
-
attr_writer :private_key, :private_key_path, :public_key, :public_key_path
|
21
|
+
attr_reader :password
|
22
|
+
attr_writer :private_key, :private_key_path, :public_key, :public_key_path, :username
|
23
23
|
|
24
24
|
def initialize(attributes={})
|
25
25
|
@flavor_id ||= 1
|
@@ -15,10 +15,13 @@ module Fog
|
|
15
15
|
attribute :flavor_id, :aliases => 'flavor-id'
|
16
16
|
attribute :image_id, :aliases => 'image-id'
|
17
17
|
attribute :name
|
18
|
-
attribute :password, :aliases => 'root-password'
|
19
18
|
attribute :progress
|
20
19
|
attribute :status
|
21
20
|
|
21
|
+
attr_accessor :password
|
22
|
+
alias_method :'root-password=', :password=
|
23
|
+
attr_writer :private_key, :private_key_path, :public_key, :public_key_path, :username
|
24
|
+
|
22
25
|
def initialize(attributes={})
|
23
26
|
@flavor_id ||= 1
|
24
27
|
super
|
@@ -40,6 +43,22 @@ module Fog
|
|
40
43
|
connection.images.get(@image_id)
|
41
44
|
end
|
42
45
|
|
46
|
+
def private_key_path
|
47
|
+
File.expand_path(@private_key_path ||= Fog.credentials[:private_key_path])
|
48
|
+
end
|
49
|
+
|
50
|
+
def private_key
|
51
|
+
@private_key ||= File.read(private_key_path)
|
52
|
+
end
|
53
|
+
|
54
|
+
def public_key_path
|
55
|
+
File.expand_path(@public_key_path ||= Fog.credentials[:public_key_path])
|
56
|
+
end
|
57
|
+
|
58
|
+
def public_key
|
59
|
+
@public_key ||= File.read(public_key_path)
|
60
|
+
end
|
61
|
+
|
43
62
|
def ready?
|
44
63
|
@status == 'active'
|
45
64
|
end
|
@@ -57,6 +76,29 @@ module Fog
|
|
57
76
|
true
|
58
77
|
end
|
59
78
|
|
79
|
+
def setup(credentials = {})
|
80
|
+
requires :addresses, :identity, :public_key, :username
|
81
|
+
Fog::SSH.new(addresses.first, username, credentials).run([
|
82
|
+
%{mkdir .ssh},
|
83
|
+
%{echo "#{public_key}" >> ~/.ssh/authorized_keys},
|
84
|
+
%{passwd -l root},
|
85
|
+
%{echo "#{attributes.to_json}" >> ~/attributes.json}
|
86
|
+
])
|
87
|
+
rescue Errno::ECONNREFUSED
|
88
|
+
sleep(1)
|
89
|
+
retry
|
90
|
+
end
|
91
|
+
|
92
|
+
def ssh(commands)
|
93
|
+
requires :addresses, :identity, :private_key, :username
|
94
|
+
@ssh ||= Fog::SSH.new(addresses.first, username, :key_data => [private_key])
|
95
|
+
@ssh.run(commands)
|
96
|
+
end
|
97
|
+
|
98
|
+
def username
|
99
|
+
@username ||= 'root'
|
100
|
+
end
|
101
|
+
|
60
102
|
end
|
61
103
|
|
62
104
|
end
|
@@ -14,6 +14,13 @@ module Fog
|
|
14
14
|
load(data)
|
15
15
|
end
|
16
16
|
|
17
|
+
def bootstrap(new_attributes = {})
|
18
|
+
server = create(new_attributes)
|
19
|
+
server.wait_for { ready? }
|
20
|
+
server.setup(:password => server.password)
|
21
|
+
server
|
22
|
+
end
|
23
|
+
|
17
24
|
def get(server_id)
|
18
25
|
if server_id && server = connection.get_slice(server_id).body
|
19
26
|
new(server)
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Shindo.tests('AWS::Compute | image requests', ['aws']) do
|
2
|
+
|
3
|
+
@images_format = {
|
4
|
+
'imagesSet' => [{
|
5
|
+
'architecture' => String,
|
6
|
+
'blockDeviceMapping' =>[],
|
7
|
+
'imageId' => String,
|
8
|
+
'imageLocation' => String,
|
9
|
+
'imageOwnerId' => String,
|
10
|
+
'imageState' => String,
|
11
|
+
'imageType' => String,
|
12
|
+
'isPublic' => Fog::Boolean,
|
13
|
+
'kernelId' => String,
|
14
|
+
'productCodes' => [],
|
15
|
+
'ramdiskId' => String,
|
16
|
+
'rootDeviceType' => String
|
17
|
+
}],
|
18
|
+
'requestId' => String,
|
19
|
+
}
|
20
|
+
|
21
|
+
tests('success') do
|
22
|
+
|
23
|
+
# the result for this is HUGE an relatively uninteresting...de
|
24
|
+
# tests("#describe_images").formats(@images_format) do
|
25
|
+
# AWS[:compute].describe_images.body
|
26
|
+
# end
|
27
|
+
|
28
|
+
tests("#describe_images('ImageId' => '#{GENTOO_AMI}')").formats(@images_format) do
|
29
|
+
AWS[:compute].describe_images('ImageId' => GENTOO_AMI).body
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
tests('failure') do
|
35
|
+
|
36
|
+
tests("#describe_images('ImageId' => 'ami-00000000')").raises(Fog::AWS::Compute::Error) do
|
37
|
+
AWS[:compute].describe_regions('ImageId' => 'ami-00000000')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -4,7 +4,6 @@ Shindo.tests('AWS::Compute | key pair requests', ['aws']) do
|
|
4
4
|
|
5
5
|
@keypair_format = {
|
6
6
|
'keyFingerprint' => String,
|
7
|
-
'keyMaterial' => String,
|
8
7
|
'keyName' => String,
|
9
8
|
'requestId' => String
|
10
9
|
}
|
@@ -17,9 +16,10 @@ Shindo.tests('AWS::Compute | key pair requests', ['aws']) do
|
|
17
16
|
'requestId' => String
|
18
17
|
}
|
19
18
|
|
20
|
-
@key_pair_name = '
|
19
|
+
@key_pair_name = 'fog_create_key_pair'
|
20
|
+
@public_key_material = 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1SL+kgze8tvSFW6Tyj3RyZc9iFVQDiCKzjgwn2tS7hyWxaiDhjfY2mBYSZwFdKN+ZdsXDJL4CPutUg4DKoQneVgIC1zuXrlpPbaT0Btu2aFd4qNfJ85PBrOtw2GrWZ1kcIgzZ1mMbQt6i1vhsySD2FEj+5kGHouNxQpI5dFR5K+nGgcTLFGnzb/MPRBk136GVnuuYfJ2I4va/chstThoP8UwnoapRHcBpwTIfbmmL91BsRVqjXZEUT73nxpxFeXXidYwhHio+5dXwE0aM/783B/3cPG6FVoxrBvjoNpQpAcEyjtRh9lpwHZtSEW47WNzpIW3PhbQ8j4MryznqF1Rhw=='
|
21
21
|
|
22
|
-
tests("#create_key_pair('#{@key_pair_name}')").formats(@keypair_format) do
|
22
|
+
tests("#create_key_pair('#{@key_pair_name}')").formats(@keypair_format.merge({'keyMaterial' => String})) do
|
23
23
|
AWS[:compute].create_key_pair(@key_pair_name).body
|
24
24
|
end
|
25
25
|
|
@@ -35,6 +35,14 @@ Shindo.tests('AWS::Compute | key pair requests', ['aws']) do
|
|
35
35
|
AWS[:compute].delete_key_pair(@key_pair_name).body
|
36
36
|
end
|
37
37
|
|
38
|
+
tests("#import_key_pair('fog_import_key_pair', '#{@public_key_material}')").formats(@keypair_format) do
|
39
|
+
AWS[:compute].import_key_pair('fog_import_key_pair', @public_key_material).body
|
40
|
+
end
|
41
|
+
|
42
|
+
tests("#delete_key_pair('fog_import_key_pair)").succeeds do
|
43
|
+
AWS[:compute].delete_key_pair('fog_import_key_pair')
|
44
|
+
end
|
45
|
+
|
38
46
|
tests("#delete_key_pair('not_a_key_name')").succeeds do
|
39
47
|
AWS[:compute].delete_key_pair('not_a_key_name')
|
40
48
|
end
|
@@ -1,37 +1,52 @@
|
|
1
|
-
def
|
1
|
+
def tests_model
|
2
|
+
tests_model_first
|
3
|
+
tests_collection
|
4
|
+
tests_model_last
|
5
|
+
end
|
2
6
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
@model.
|
7
|
+
def tests_model_first
|
8
|
+
|
9
|
+
tests(@model.class) do
|
10
|
+
|
11
|
+
test('#save') do
|
12
|
+
@model.save
|
9
13
|
end
|
14
|
+
|
15
|
+
if @model.respond_to?(:ready?)
|
16
|
+
@model.wait_for { ready? }
|
17
|
+
end
|
18
|
+
|
19
|
+
test('#reload') do
|
20
|
+
reloaded = @model.reload
|
21
|
+
@model.attributes == reloaded.attributes
|
22
|
+
end
|
23
|
+
|
10
24
|
end
|
11
25
|
|
12
|
-
|
26
|
+
end
|
13
27
|
|
14
|
-
|
15
|
-
|
16
|
-
|
28
|
+
def tests_collection
|
29
|
+
|
30
|
+
tests(@collection.class) do
|
31
|
+
|
32
|
+
test('collection#all includes persisted models') do
|
33
|
+
@collection.all.map {|model| model.identity}.include?(@model.identity)
|
17
34
|
end
|
18
35
|
|
19
|
-
tests('#get') do
|
36
|
+
tests('collection#get') do
|
20
37
|
|
21
38
|
test 'should return a matching model if one exists' do
|
22
|
-
@model.save
|
23
39
|
get = @collection.get(@model.identity)
|
24
40
|
@model.attributes == get.attributes
|
25
41
|
end
|
26
42
|
|
27
43
|
test 'should return nil if no matching model exists' do
|
28
|
-
!@collection.get(
|
44
|
+
!@collection.get(@non_id)
|
29
45
|
end
|
30
46
|
|
31
47
|
end
|
32
48
|
|
33
|
-
test('#reload') do
|
34
|
-
@model.save
|
49
|
+
test('collection#reload') do
|
35
50
|
@collection.all
|
36
51
|
reloaded = @collection.reload
|
37
52
|
@collection.attributes == reloaded.attributes
|
@@ -39,38 +54,19 @@ def tests_models
|
|
39
54
|
|
40
55
|
end
|
41
56
|
|
42
|
-
|
43
|
-
|
44
|
-
test('#reload') do
|
45
|
-
@model.save
|
46
|
-
if @model.respond_to?(:ready?)
|
47
|
-
@model.wait_for { ready? }
|
48
|
-
end
|
49
|
-
reloaded = @model.reload
|
50
|
-
@model.attributes == reloaded.attributes
|
51
|
-
end
|
52
|
-
|
53
|
-
tests('#save') do
|
57
|
+
end
|
54
58
|
|
55
|
-
|
56
|
-
!@collection.get(@model.identity)
|
57
|
-
end
|
59
|
+
def tests_model_last
|
58
60
|
|
59
|
-
|
60
|
-
@model.save
|
61
|
-
end
|
61
|
+
tests(@model.class) do
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
@model.wait_for { ready? }
|
67
|
-
end
|
68
|
-
reloaded = @model.reload
|
69
|
-
@model.attributes == reloaded.attributes
|
63
|
+
test('#destroy') do
|
64
|
+
if @model.respond_to?(:ready?)
|
65
|
+
@model.wait_for{ ready? }
|
70
66
|
end
|
71
|
-
|
67
|
+
@model.destroy
|
72
68
|
end
|
73
69
|
|
74
70
|
end
|
75
71
|
|
76
|
-
end
|
72
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 7
|
9
|
+
version: 0.3.7
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- geemus (Wesley Beary)
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-09-
|
17
|
+
date: 2010-09-29 00:00:00 -07:00
|
18
18
|
default_executable: fog
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -39,8 +39,8 @@ dependencies:
|
|
39
39
|
segments:
|
40
40
|
- 0
|
41
41
|
- 2
|
42
|
-
-
|
43
|
-
version: 0.2.
|
42
|
+
- 3
|
43
|
+
version: 0.2.3
|
44
44
|
requirement: *id002
|
45
45
|
name: excon
|
46
46
|
- !ruby/object:Gem::Dependency
|
@@ -655,7 +655,6 @@ files:
|
|
655
655
|
- spec/aws/models/storage/directory_spec.rb
|
656
656
|
- spec/aws/models/storage/file_spec.rb
|
657
657
|
- spec/aws/models/storage/files_spec.rb
|
658
|
-
- spec/aws/requests/compute/describe_images_spec.rb
|
659
658
|
- spec/aws/requests/simpledb/batch_put_attributes_spec.rb
|
660
659
|
- spec/aws/requests/simpledb/create_domain_spec.rb
|
661
660
|
- spec/aws/requests/simpledb/delete_attributes_spec.rb
|
@@ -757,6 +756,7 @@ files:
|
|
757
756
|
- tests/aws/models/storage/directory_tests.rb
|
758
757
|
- tests/aws/requests/compute/address_tests.rb
|
759
758
|
- tests/aws/requests/compute/availability_zone_tests.rb
|
759
|
+
- tests/aws/requests/compute/image_tests.rb
|
760
760
|
- tests/aws/requests/compute/instance_tests.rb
|
761
761
|
- tests/aws/requests/compute/key_pair_tests.rb
|
762
762
|
- tests/aws/requests/compute/region_tests.rb
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
-
|
3
|
-
describe 'Compute.describe_images' do
|
4
|
-
describe 'success' do
|
5
|
-
|
6
|
-
it "should return proper attributes with no params" do
|
7
|
-
actual = AWS[:compute].describe_images
|
8
|
-
actual.body['requestId'].should be_a(String)
|
9
|
-
image = actual.body['imagesSet'].first
|
10
|
-
image['architecture'].should be_a(String)
|
11
|
-
image['imageId'].should be_a(String)
|
12
|
-
image['imageLocation'].should be_a(String)
|
13
|
-
image['imageOwnerId'].should be_a(String)
|
14
|
-
image['imageState'].should be_a(String)
|
15
|
-
image['imageType'].should be_a(String)
|
16
|
-
[false, true].should include(image['isPublic'])
|
17
|
-
image['kernelId'].should be_a(String) if image['kernelId']
|
18
|
-
image['platform'].should be_a(String) if image['platform']
|
19
|
-
image['ramdiskId'].should be_a(String) if image['ramdiskId']
|
20
|
-
image['rootDeviceName'].should be_a(String) if image['rootDeviceName']
|
21
|
-
["ebs","instance-store"].should include(image['rootDeviceType'])
|
22
|
-
image['rootDeviceName'].should be_a(String) if image['rootDeviceName']
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should return proper attributes with params" do
|
26
|
-
actual = AWS[:compute].describe_images('ImageId' => GENTOO_AMI)
|
27
|
-
actual.body['requestId'].should be_a(String)
|
28
|
-
image = actual.body['imagesSet'].first
|
29
|
-
image['architecture'].should be_a(String)
|
30
|
-
image['imageId'].should be_a(String)
|
31
|
-
image['imageLocation'].should be_a(String)
|
32
|
-
image['imageOwnerId'].should be_a(String)
|
33
|
-
image['imageState'].should be_a(String)
|
34
|
-
image['imageType'].should be_a(String)
|
35
|
-
[false, true].should include(image['isPublic'])
|
36
|
-
image['kernelId'].should be_a(String) if image['kernelId']
|
37
|
-
image['platform'].should be_a(String) if image['platform']
|
38
|
-
image['ramdiskId'].should be_a(String) if image['ramdiskId']
|
39
|
-
["ebs","instance-store"].should include(image['rootDeviceType'])
|
40
|
-
image['rootDeviceName'].should be_a(String) if image['rootDeviceName']
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|