fog 0.0.29 → 0.0.30

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.
Files changed (181) hide show
  1. data/Rakefile +1 -0
  2. data/VERSION +1 -1
  3. data/bin/fog +18 -11
  4. data/fog.gemspec +43 -14
  5. data/lib/fog.rb +7 -1
  6. data/lib/fog/aws/ec2.rb +0 -7
  7. data/lib/fog/aws/models/ec2/address.rb +22 -26
  8. data/lib/fog/aws/models/ec2/addresses.rb +7 -22
  9. data/lib/fog/aws/models/ec2/instance.rb +2 -15
  10. data/lib/fog/aws/models/ec2/instances.rb +6 -23
  11. data/lib/fog/aws/models/ec2/key_pair.rb +2 -17
  12. data/lib/fog/aws/models/ec2/key_pairs.rb +6 -23
  13. data/lib/fog/aws/models/ec2/security_group.rb +18 -22
  14. data/lib/fog/aws/models/ec2/security_groups.rb +6 -23
  15. data/lib/fog/aws/models/ec2/snapshot.rb +2 -15
  16. data/lib/fog/aws/models/ec2/snapshots.rb +7 -20
  17. data/lib/fog/aws/models/ec2/volume.rb +23 -22
  18. data/lib/fog/aws/models/ec2/volumes.rb +8 -22
  19. data/lib/fog/aws/models/s3/bucket.rb +1 -1
  20. data/lib/fog/aws/models/s3/buckets.rb +3 -20
  21. data/lib/fog/aws/models/s3/objects.rb +11 -22
  22. data/lib/fog/aws/requests/ec2/allocate_address.rb +1 -1
  23. data/lib/fog/aws/requests/ec2/associate_address.rb +2 -2
  24. data/lib/fog/aws/requests/ec2/attach_volume.rb +2 -2
  25. data/lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb +1 -1
  26. data/lib/fog/aws/requests/ec2/create_key_pair.rb +2 -2
  27. data/lib/fog/aws/requests/ec2/create_security_group.rb +2 -2
  28. data/lib/fog/aws/requests/ec2/create_snapshot.rb +2 -2
  29. data/lib/fog/aws/requests/ec2/create_volume.rb +3 -3
  30. data/lib/fog/aws/requests/ec2/delete_key_pair.rb +1 -1
  31. data/lib/fog/aws/requests/ec2/delete_security_group.rb +2 -2
  32. data/lib/fog/aws/requests/ec2/delete_snapshot.rb +2 -2
  33. data/lib/fog/aws/requests/ec2/delete_volume.rb +2 -2
  34. data/lib/fog/aws/requests/ec2/describe_addresses.rb +2 -2
  35. data/lib/fog/aws/requests/ec2/describe_availability_zones.rb +1 -1
  36. data/lib/fog/aws/requests/ec2/describe_images.rb +1 -1
  37. data/lib/fog/aws/requests/ec2/describe_instances.rb +2 -2
  38. data/lib/fog/aws/requests/ec2/describe_key_pairs.rb +2 -2
  39. data/lib/fog/aws/requests/ec2/describe_regions.rb +1 -1
  40. data/lib/fog/aws/requests/ec2/describe_security_groups.rb +2 -2
  41. data/lib/fog/aws/requests/ec2/describe_snapshots.rb +2 -2
  42. data/lib/fog/aws/requests/ec2/describe_volumes.rb +2 -2
  43. data/lib/fog/aws/requests/ec2/detach_volume.rb +2 -2
  44. data/lib/fog/aws/requests/ec2/disassociate_address.rb +2 -2
  45. data/lib/fog/aws/requests/ec2/get_console_output.rb +2 -2
  46. data/lib/fog/aws/requests/ec2/reboot_instances.rb +2 -2
  47. data/lib/fog/aws/requests/ec2/release_address.rb +2 -2
  48. data/lib/fog/aws/requests/ec2/revoke_security_group_ingress.rb +1 -1
  49. data/lib/fog/aws/requests/ec2/run_instances.rb +2 -2
  50. data/lib/fog/aws/requests/ec2/terminate_instances.rb +2 -2
  51. data/lib/fog/aws/requests/s3/copy_object.rb +2 -2
  52. data/lib/fog/aws/requests/s3/delete_bucket.rb +3 -3
  53. data/lib/fog/aws/requests/s3/delete_object.rb +2 -2
  54. data/lib/fog/aws/requests/s3/get_bucket.rb +2 -2
  55. data/lib/fog/aws/requests/s3/get_bucket_location.rb +2 -2
  56. data/lib/fog/aws/requests/s3/get_object.rb +2 -2
  57. data/lib/fog/aws/requests/s3/get_request_payment.rb +2 -2
  58. data/lib/fog/aws/requests/s3/get_service.rb +1 -1
  59. data/lib/fog/aws/requests/s3/head_object.rb +1 -1
  60. data/lib/fog/aws/requests/s3/put_bucket.rb +1 -1
  61. data/lib/fog/aws/requests/s3/put_object.rb +2 -2
  62. data/lib/fog/aws/requests/s3/put_request_payment.rb +1 -1
  63. data/lib/fog/aws/requests/simpledb/batch_put_attributes.rb +2 -2
  64. data/lib/fog/aws/requests/simpledb/create_domain.rb +1 -1
  65. data/lib/fog/aws/requests/simpledb/delete_attributes.rb +2 -2
  66. data/lib/fog/aws/requests/simpledb/delete_domain.rb +1 -1
  67. data/lib/fog/aws/requests/simpledb/domain_metadata.rb +2 -2
  68. data/lib/fog/aws/requests/simpledb/get_attributes.rb +2 -2
  69. data/lib/fog/aws/requests/simpledb/list_domains.rb +1 -1
  70. data/lib/fog/aws/requests/simpledb/put_attributes.rb +1 -1
  71. data/lib/fog/aws/requests/simpledb/select.rb +1 -1
  72. data/lib/fog/aws/s3.rb +0 -7
  73. data/lib/fog/aws/simpledb.rb +0 -4
  74. data/lib/fog/collection.rb +35 -7
  75. data/lib/fog/connection.rb +10 -130
  76. data/lib/fog/model.rb +18 -13
  77. data/lib/fog/parser.rb +0 -5
  78. data/lib/fog/rackspace.rb +35 -15
  79. data/lib/fog/rackspace/files.rb +36 -6
  80. data/lib/fog/rackspace/models/servers/server.rb +2 -16
  81. data/lib/fog/rackspace/models/servers/servers.rb +6 -21
  82. data/lib/fog/rackspace/requests/files/delete_container.rb +38 -0
  83. data/lib/fog/rackspace/requests/files/delete_object.rb +39 -0
  84. data/lib/fog/rackspace/requests/files/get_container.rb +61 -0
  85. data/lib/fog/rackspace/requests/files/get_containers.rb +5 -7
  86. data/lib/fog/rackspace/requests/files/head_container.rb +44 -0
  87. data/lib/fog/rackspace/requests/files/head_containers.rb +1 -1
  88. data/lib/fog/rackspace/requests/files/put_container.rb +38 -0
  89. data/lib/fog/rackspace/requests/files/put_object.rb +41 -0
  90. data/lib/fog/rackspace/requests/servers/create_image.rb +6 -0
  91. data/lib/fog/rackspace/requests/servers/create_server.rb +21 -2
  92. data/lib/fog/rackspace/requests/servers/delete_server.rb +18 -3
  93. data/lib/fog/rackspace/requests/servers/get_server_details.rb +17 -5
  94. data/lib/fog/rackspace/requests/servers/list_addresses.rb +52 -0
  95. data/lib/fog/rackspace/requests/servers/list_flavors.rb +2 -4
  96. data/lib/fog/rackspace/requests/servers/list_flavors_detail.rb +41 -0
  97. data/lib/fog/rackspace/requests/servers/list_images.rb +1 -1
  98. data/lib/fog/rackspace/requests/servers/list_images_detail.rb +1 -1
  99. data/lib/fog/rackspace/requests/servers/list_private_addresses.rb +50 -0
  100. data/lib/fog/rackspace/requests/servers/list_public_addresses.rb +50 -0
  101. data/lib/fog/rackspace/requests/servers/list_servers.rb +11 -2
  102. data/lib/fog/rackspace/requests/servers/list_servers_detail.rb +17 -2
  103. data/lib/fog/rackspace/requests/servers/reboot_server.rb +3 -6
  104. data/lib/fog/rackspace/requests/servers/update_server.rb +18 -5
  105. data/lib/fog/rackspace/servers.rb +20 -0
  106. data/spec/aws/models/ec2/address_spec.rb +4 -4
  107. data/spec/aws/models/ec2/instance_spec.rb +6 -6
  108. data/spec/aws/models/ec2/key_pair_spec.rb +5 -5
  109. data/spec/aws/models/ec2/security_group_spec.rb +5 -5
  110. data/spec/aws/models/ec2/snapshot_spec.rb +8 -8
  111. data/spec/aws/models/ec2/snapshots_spec.rb +6 -6
  112. data/spec/aws/models/ec2/volume_spec.rb +6 -5
  113. data/spec/aws/models/ec2/volumes_spec.rb +4 -4
  114. data/spec/aws/requests/ec2/associate_address_spec.rb +2 -2
  115. data/spec/aws/requests/ec2/attach_volume_spec.rb +2 -2
  116. data/spec/aws/requests/ec2/create_key_pair_spec.rb +1 -1
  117. data/spec/aws/requests/ec2/create_security_group_spec.rb +1 -1
  118. data/spec/aws/requests/ec2/create_snapshot_spec.rb +1 -1
  119. data/spec/aws/requests/ec2/delete_security_group_spec.rb +1 -1
  120. data/spec/aws/requests/ec2/delete_snapshot_spec.rb +1 -1
  121. data/spec/aws/requests/ec2/delete_volume_spec.rb +2 -2
  122. data/spec/aws/requests/ec2/describe_addresses_spec.rb +1 -1
  123. data/spec/aws/requests/ec2/describe_instances_spec.rb +1 -1
  124. data/spec/aws/requests/ec2/describe_key_pairs_spec.rb +1 -1
  125. data/spec/aws/requests/ec2/describe_security_groups_spec.rb +1 -1
  126. data/spec/aws/requests/ec2/describe_snapshots_spec.rb +1 -1
  127. data/spec/aws/requests/ec2/describe_volumes_spec.rb +1 -1
  128. data/spec/aws/requests/ec2/detach_volume_spec.rb +1 -1
  129. data/spec/aws/requests/ec2/disassociate_address_spec.rb +1 -1
  130. data/spec/aws/requests/ec2/get_console_output_spec.rb +1 -1
  131. data/spec/aws/requests/ec2/reboot_instances_spec.rb +1 -1
  132. data/spec/aws/requests/ec2/release_address_spec.rb +1 -1
  133. data/spec/aws/requests/ec2/terminate_instances_spec.rb +1 -1
  134. data/spec/aws/requests/s3/copy_object_spec.rb +4 -5
  135. data/spec/aws/requests/s3/delete_bucket_spec.rb +3 -4
  136. data/spec/aws/requests/s3/delete_object_spec.rb +2 -3
  137. data/spec/aws/requests/s3/get_bucket_location_spec.rb +1 -1
  138. data/spec/aws/requests/s3/get_bucket_spec.rb +4 -6
  139. data/spec/aws/requests/s3/get_object_spec.rb +6 -10
  140. data/spec/aws/requests/s3/get_request_payment_spec.rb +1 -1
  141. data/spec/aws/requests/s3/head_object_spec.rb +2 -4
  142. data/spec/aws/requests/s3/put_object_spec.rb +4 -7
  143. data/spec/aws/requests/s3/put_request_payment_spec.rb +1 -1
  144. data/spec/aws/requests/simpledb/batch_put_attributes_spec.rb +1 -1
  145. data/spec/aws/requests/simpledb/delete_attributes_spec.rb +1 -1
  146. data/spec/aws/requests/simpledb/domain_metadata_spec.rb +1 -1
  147. data/spec/aws/requests/simpledb/get_attributes_spec.rb +1 -1
  148. data/spec/aws/requests/simpledb/put_attributes_spec.rb +1 -1
  149. data/spec/rackspace/requests/files/delete_container_spec.rb +24 -0
  150. data/spec/rackspace/requests/files/delete_object_spec.rb +37 -0
  151. data/spec/rackspace/requests/files/get_container_spec.rb +33 -0
  152. data/spec/rackspace/requests/files/get_containers_spec.rb +12 -1
  153. data/spec/rackspace/requests/files/head_container_spec.rb +30 -0
  154. data/spec/rackspace/requests/files/head_containers_spec.rb +9 -1
  155. data/spec/rackspace/requests/files/put_container_spec.rb +15 -0
  156. data/spec/rackspace/requests/files/put_object_spec.rb +20 -0
  157. data/spec/rackspace/requests/servers/create_image_spec.rb +16 -2
  158. data/spec/rackspace/requests/servers/create_server_spec.rb +1 -1
  159. data/spec/rackspace/requests/servers/delete_image_spec.rb +32 -0
  160. data/spec/rackspace/requests/servers/delete_server_spec.rb +1 -1
  161. data/spec/rackspace/requests/servers/get_server_details_spec.rb +1 -1
  162. data/spec/rackspace/requests/servers/list_addresses_spec.rb +34 -0
  163. data/spec/rackspace/requests/servers/list_flavors_detail_spec.rb +17 -0
  164. data/spec/rackspace/requests/servers/list_flavors_spec.rb +6 -3
  165. data/spec/rackspace/requests/servers/list_images_detail_spec.rb +18 -0
  166. data/spec/rackspace/requests/servers/list_images_spec.rb +5 -2
  167. data/spec/rackspace/requests/servers/list_private_addresses_spec.rb +32 -0
  168. data/spec/rackspace/requests/servers/list_public_addresses_spec.rb +32 -0
  169. data/spec/rackspace/requests/servers/list_servers_detail_spec.rb +1 -1
  170. data/spec/rackspace/requests/servers/reboot_server_spec.rb +31 -0
  171. data/spec/rackspace/requests/servers/update_server_spec.rb +33 -0
  172. data/spec/spec_helper.rb +5 -1
  173. metadata +50 -14
  174. data/benchs/headers_split_vs_match.rb +0 -18
  175. data/benchs/stripping.rb +0 -26
  176. data/lib/fog/errors.rb +0 -145
  177. data/lib/fog/response.rb +0 -12
  178. data/spec/rackspace/requests/servers/delete_image.rb +0 -12
  179. data/spec/rackspace/requests/servers/list_images_detail.rb +0 -12
  180. data/spec/rackspace/requests/servers/reboot_server.rb +0 -12
  181. data/spec/rackspace/requests/servers/update_server.rb +0 -12
@@ -4,25 +4,16 @@ module Fog
4
4
 
5
5
  class KeyPair < Fog::Model
6
6
 
7
+ identity :name, 'keyName'
8
+
7
9
  attribute :fingerprint, 'keyFingerprint'
8
10
  attribute :material, 'keyMaterial'
9
- attribute :name, 'keyName'
10
11
 
11
12
  def destroy
12
13
  connection.delete_key_pair(@name)
13
14
  true
14
15
  end
15
16
 
16
- def key_pairs
17
- @key_pairs
18
- end
19
-
20
- def reload
21
- if new_key_pair = key_pairs.get(@name)
22
- merge_attributes(new_key_pair.attributes)
23
- end
24
- end
25
-
26
17
  def save
27
18
  data = connection.create_key_pair(@name).body
28
19
  new_attributes = data.reject {|key,value| !['keyFingerprint', 'keyMaterial', 'keyName'].include?(key)}
@@ -30,12 +21,6 @@ module Fog
30
21
  true
31
22
  end
32
23
 
33
- private
34
-
35
- def key_pairs=(new_key_pairs)
36
- @key_pairs = new_key_pairs
37
- end
38
-
39
24
  end
40
25
 
41
26
  end
@@ -10,12 +10,14 @@ module Fog
10
10
 
11
11
  attribute :key_name
12
12
 
13
+ model Fog::AWS::EC2::KeyPair
14
+
13
15
  def initialize(attributes)
14
16
  @key_name ||= []
15
17
  super
16
18
  end
17
19
 
18
- def all(key_name = [])
20
+ def all(key_name = @key_name)
19
21
  data = connection.describe_key_pairs(key_name).body
20
22
  key_pairs = Fog::AWS::EC2::KeyPairs.new({
21
23
  :connection => connection,
@@ -23,40 +25,21 @@ module Fog
23
25
  }.merge!(attributes))
24
26
  data['keySet'].each do |key|
25
27
  key_pairs << Fog::AWS::EC2::KeyPair.new({
26
- :connection => connection,
27
- :key_pairs => self
28
+ :collection => key_pairs,
29
+ :connection => connection
28
30
  }.merge!(key))
29
31
  end
30
32
  key_pairs
31
33
  end
32
34
 
33
- def create(attributes = {})
34
- bucket = new(attributes)
35
- bucket.save
36
- bucket
37
- end
38
-
39
35
  def get(key_name)
40
36
  if key_name
41
37
  all(key_name).first
42
38
  end
43
- rescue Fog::Errors::BadRequest
39
+ rescue Excon::Errors::BadRequest
44
40
  nil
45
41
  end
46
42
 
47
- def new(attributes = {})
48
- Fog::AWS::EC2::KeyPair.new(
49
- attributes.merge!(
50
- :connection => connection,
51
- :key_pairs => self
52
- )
53
- )
54
- end
55
-
56
- def reload
57
- all(key_name)
58
- end
59
-
60
43
  end
61
44
 
62
45
  end
@@ -4,16 +4,28 @@ module Fog
4
4
 
5
5
  class SecurityGroup < Fog::Model
6
6
 
7
+ identity :group_name, 'groupName'
8
+
7
9
  attribute :group_description, 'groupDescription'
8
- attribute :group_name, 'groupName'
9
10
  attribute :ip_permissions, 'ipPermissions'
10
11
  attribute :owner_id, 'ownerId'
11
12
 
12
- def authorize(options = {})
13
- options = {
14
- 'GroupName' => @group_name
15
- }.merge!(options)
16
- connection.authorize_security_group_ingress(options)
13
+ def authorize_group_and_owner(group, owner)
14
+ connection.authorize_security_group_ingress(
15
+ 'GroupName' => @group_name,
16
+ 'SourceSecurityGroupName' => group,
17
+ 'SourceSecurityGroupOwnerId' => owner
18
+ )
19
+ end
20
+
21
+ def authorize_port_range(range, options = {})
22
+ connection.authorize_security_group_ingress(
23
+ 'CidrIp' => options[:cidr_ip] || '0.0.0.0/0',
24
+ 'FromPort' => range.min,
25
+ 'GroupName' => @group_name,
26
+ 'ToPort' => range.max,
27
+ 'IpProtocol' => options[:ip_protocol] || 'tcp'
28
+ )
17
29
  end
18
30
 
19
31
  def destroy
@@ -21,27 +33,11 @@ module Fog
21
33
  true
22
34
  end
23
35
 
24
- def reload
25
- if new_security_group = security_groups.get(@group_name)
26
- merge_attributes(new_security_group.attributes)
27
- end
28
- end
29
-
30
36
  def save
31
37
  data = connection.create_security_group(@group_name, @group_description).body
32
38
  true
33
39
  end
34
40
 
35
- def security_groups
36
- @security_groups
37
- end
38
-
39
- private
40
-
41
- def security_groups=(new_security_groups)
42
- @security_groups = new_security_groups
43
- end
44
-
45
41
  end
46
42
 
47
43
  end
@@ -10,12 +10,14 @@ module Fog
10
10
 
11
11
  attribute :group_name
12
12
 
13
+ model Fog::AWS::EC2::SecurityGroup
14
+
13
15
  def initialize(attributes)
14
16
  @group_name ||= []
15
17
  super
16
18
  end
17
19
 
18
- def all(group_name = [])
20
+ def all(group_name = @group_name)
19
21
  data = connection.describe_security_groups(group_name).body
20
22
  security_groups = Fog::AWS::EC2::SecurityGroups.new({
21
23
  :connection => connection,
@@ -23,40 +25,21 @@ module Fog
23
25
  }.merge!(attributes))
24
26
  data['securityGroupInfo'].each do |security_group|
25
27
  security_groups << Fog::AWS::EC2::SecurityGroup.new({
26
- :connection => connection,
27
- :security_groups => self
28
+ :collection => security_groups,
29
+ :connection => connection
28
30
  }.merge!(security_group))
29
31
  end
30
32
  security_groups
31
33
  end
32
34
 
33
- def create(attributes = {})
34
- security_group = new(attributes)
35
- security_group.save
36
- security_group
37
- end
38
-
39
35
  def get(group_name)
40
36
  if group_name
41
37
  all(group_name).first
42
38
  end
43
- rescue Fog::Errors::BadRequest
39
+ rescue Excon::Errors::BadRequest
44
40
  nil
45
41
  end
46
42
 
47
- def new(attributes = {})
48
- Fog::AWS::EC2::SecurityGroup.new(
49
- attributes.merge!(
50
- :connection => connection,
51
- :security_groups => self
52
- )
53
- )
54
- end
55
-
56
- def reload
57
- all(group_name)
58
- end
59
-
60
43
  end
61
44
 
62
45
  end
@@ -4,8 +4,9 @@ module Fog
4
4
 
5
5
  class Snapshot < Fog::Model
6
6
 
7
+ identity :snapshot_id, 'snapshotId'
8
+
7
9
  attribute :progress
8
- attribute :snapshot_id, 'snapshotId'
9
10
  attribute :start_time, 'startTime'
10
11
  attribute :status
11
12
  attribute :volume_id, 'volumeId'
@@ -15,12 +16,6 @@ module Fog
15
16
  true
16
17
  end
17
18
 
18
- def reload
19
- if new_snapshot = snapshots.get(@snapshot_id)
20
- merge_attributes(new_snapshot.attributes)
21
- end
22
- end
23
-
24
19
  def save
25
20
  data = connection.create_snapshot(volume_id).body
26
21
  new_attributes = data.reject {|key,value| key == 'requestId'}
@@ -28,20 +23,12 @@ module Fog
28
23
  true
29
24
  end
30
25
 
31
- def snapshots
32
- @snapshots
33
- end
34
-
35
26
  def volume
36
27
  connection.describe_volumes(@volume_id)
37
28
  end
38
29
 
39
30
  private
40
31
 
41
- def snapshots=(new_snapshots)
42
- @snapshots = new_snapshots
43
- end
44
-
45
32
  def volume=(new_volume)
46
33
  @volume_id = new_volume.volume_id
47
34
  end
@@ -13,12 +13,14 @@ module Fog
13
13
  attribute :snapshot_id
14
14
  attribute :volume_id
15
15
 
16
+ model Fog::AWS::EC2::Snapshot
17
+
16
18
  def initialize(attributes)
17
19
  @snapshot_id ||= []
18
20
  super
19
21
  end
20
22
 
21
- def all(snapshot_id = [])
23
+ def all(snapshot_id = @snapshot_id)
22
24
  data = connection.describe_snapshots(snapshot_id).body
23
25
  snapshots = Fog::AWS::EC2::Snapshots.new({
24
26
  :connection => connection,
@@ -26,8 +28,8 @@ module Fog
26
28
  }.merge!(attributes))
27
29
  data['snapshotSet'].each do |snapshot|
28
30
  snapshots << Fog::AWS::EC2::Snapshot.new({
29
- :connection => connection,
30
- :snapshots => self
31
+ :collection => snapshots,
32
+ :connection => connection
31
33
  }.merge!(snapshot))
32
34
  end
33
35
  if volume_id
@@ -36,37 +38,22 @@ module Fog
36
38
  snapshots
37
39
  end
38
40
 
39
- def create(attributes = {})
40
- snapshot = new(attributes)
41
- snapshot.save
42
- snapshot
43
- end
44
-
45
41
  def get(snapshot_id)
46
42
  if snapshot_id
47
43
  all(snapshot_id).first
48
44
  end
49
- rescue Fog::Errors::BadRequest
45
+ rescue Excon::Errors::BadRequest
50
46
  nil
51
47
  end
52
48
 
53
49
  def new(attributes = {})
54
- snapshot = Fog::AWS::EC2::Snapshot.new(
55
- attributes.merge!(
56
- :connection => connection,
57
- :snapshots => self
58
- )
59
- )
50
+ snapshot = super(attributes)
60
51
  if volume_id
61
52
  snapshot.volume_id = volume_id
62
53
  end
63
54
  snapshot
64
55
  end
65
56
 
66
- def reload
67
- all(snapshot_id)
68
- end
69
-
70
57
  end
71
58
 
72
59
  end
@@ -4,6 +4,8 @@ module Fog
4
4
 
5
5
  class Volume < Fog::Model
6
6
 
7
+ identity :volume_id, 'volumeId'
8
+
7
9
  attribute :attach_time, 'attachTime'
8
10
  attribute :availability_zone, 'availabilityZone'
9
11
  attribute :create_time, 'createTime'
@@ -12,7 +14,6 @@ module Fog
12
14
  attribute :size
13
15
  attribute :snapshot_id, 'snapshotId'
14
16
  attribute :status
15
- attribute :volume_id, 'volumeId'
16
17
 
17
18
  def initialize(attributes = {})
18
19
  if attributes['attachmentSet']
@@ -27,21 +28,10 @@ module Fog
27
28
  end
28
29
 
29
30
  def instance=(new_instance)
30
- if !@volume_id
31
- @instance = new_instance
32
- if new_instance
33
- @availability_zone = new_instance.availability_zone
34
- end
35
- elsif new_instance
36
- @instance = nil
37
- @instance_id = new_instance.instance_id
38
- connection.attach_volume(@instance_id, @volume_id, @device)
39
- end
40
- end
41
-
42
- def reload
43
- if new_volume = volumes.get(@volume_id)
44
- merge_attributes(new_volume.attributes)
31
+ if new_instance
32
+ attach(new_instance)
33
+ else
34
+ detach
45
35
  end
46
36
  end
47
37
 
@@ -59,14 +49,25 @@ module Fog
59
49
  connection.snapshots(:volume_id => volume_id)
60
50
  end
61
51
 
62
- def volumes
63
- @volumes
64
- end
65
-
66
52
  private
67
53
 
68
- def volumes=(new_volumes)
69
- @volumes = new_volumes
54
+ def attach(new_instance)
55
+ if new_record?
56
+ @instance = new_instance
57
+ @availability_zone = new_instance.availability_zone
58
+ elsif new_instance
59
+ @instance = nil
60
+ @instance_id = new_instance.instance_id
61
+ connection.attach_volume(@instance_id, @volume_id, @device)
62
+ end
63
+ end
64
+
65
+ def detach
66
+ @instance = nil
67
+ @instance_id = nil
68
+ unless new_record?
69
+ connection.detach_volume(@volume_id)
70
+ end
70
71
  end
71
72
 
72
73
  end
@@ -13,12 +13,14 @@ module Fog
13
13
  attribute :volume_id
14
14
  attribute :instance
15
15
 
16
+ model Fog::AWS::EC2::Volume
17
+
16
18
  def initialize(attributes)
17
19
  @volume_id ||= []
18
20
  super
19
21
  end
20
22
 
21
- def all(volume_id = [])
23
+ def all(volume_id = @volume_id)
22
24
  data = connection.describe_volumes(volume_id).body
23
25
  volumes = Fog::AWS::EC2::Volumes.new({
24
26
  :connection => connection,
@@ -26,42 +28,26 @@ module Fog
26
28
  }.merge!(attributes))
27
29
  data['volumeSet'].each do |volume|
28
30
  volumes << Fog::AWS::EC2::Volume.new({
29
- :connection => connection,
30
- :volumes => self
31
+ :collection => volumes,
32
+ :connection => connection
31
33
  }.merge!(volume))
32
34
  end
33
35
  if instance
34
- volumes = volumes.select {|volume| volume.instance_id == instance.id}
36
+ volumes = volumes.select {|volume| volume.instance_id == instance.instance_id}
35
37
  end
36
38
  volumes
37
39
  end
38
40
 
39
- def create(attributes = {})
40
- volume = new(attributes)
41
- volume.save
42
- volume
43
- end
44
-
45
41
  def get(volume_id)
46
42
  if volume_id
47
43
  all(volume_id).first
48
44
  end
49
- rescue Fog::Errors::BadRequest
45
+ rescue Excon::Errors::BadRequest
50
46
  nil
51
47
  end
52
48
 
53
49
  def new(attributes = {})
54
- volume = Fog::AWS::EC2::Volume.new(
55
- attributes.merge!(
56
- :connection => connection,
57
- :instance => instance,
58
- :volumes => self
59
- )
60
- )
61
- end
62
-
63
- def reload
64
- all(volume_id)
50
+ super({ :instance => instance }.merge!(attributes))
65
51
  end
66
52
 
67
53
  end