fog 0.3.34 → 0.4.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.
Files changed (200) hide show
  1. data/Gemfile.lock +6 -6
  2. data/README.rdoc +26 -7
  3. data/Rakefile +7 -1
  4. data/examples/dns_tests.rb +76 -0
  5. data/examples/{storage.rb → storage_tests.rb} +15 -15
  6. data/fog.gemspec +4 -4
  7. data/lib/fog.rb +1 -1
  8. data/lib/fog/aws.rb +19 -54
  9. data/lib/fog/aws/dns.rb +5 -1
  10. data/lib/fog/aws/models/compute/security_group.rb +128 -0
  11. data/lib/fog/aws/models/dns/record.rb +64 -0
  12. data/lib/fog/aws/models/dns/records.rb +47 -0
  13. data/lib/fog/aws/models/dns/zone.rb +53 -0
  14. data/lib/fog/aws/models/dns/zones.rb +33 -0
  15. data/lib/fog/aws/models/storage/file.rb +14 -2
  16. data/lib/fog/aws/parsers/dns/create_hosted_zone.rb +1 -1
  17. data/lib/fog/aws/parsers/dns/list_hosted_zones.rb +3 -1
  18. data/lib/fog/aws/requests/simpledb/create_domain.rb +1 -0
  19. data/lib/fog/aws/requests/simpledb/delete_attributes.rb +0 -2
  20. data/lib/fog/aws/requests/simpledb/delete_domain.rb +1 -0
  21. data/lib/fog/aws/requests/simpledb/domain_metadata.rb +1 -0
  22. data/lib/fog/aws/requests/simpledb/get_attributes.rb +1 -0
  23. data/lib/fog/aws/requests/simpledb/list_domains.rb +3 -2
  24. data/lib/fog/aws/requests/simpledb/put_attributes.rb +2 -2
  25. data/lib/fog/aws/requests/simpledb/select.rb +1 -0
  26. data/lib/fog/brightbox/compute.rb +9 -0
  27. data/lib/fog/brightbox/models/compute/load_balancer.rb +50 -0
  28. data/lib/fog/brightbox/models/compute/load_balancers.rb +28 -0
  29. data/lib/fog/brightbox/requests/compute/add_nodes_load_balancer.rb +28 -0
  30. data/lib/fog/brightbox/requests/compute/create_load_balancer.rb +27 -0
  31. data/lib/fog/brightbox/requests/compute/destroy_load_balancer.rb +28 -0
  32. data/lib/fog/brightbox/requests/compute/get_load_balancer.rb +28 -0
  33. data/lib/fog/brightbox/requests/compute/list_load_balancers.rb +27 -0
  34. data/lib/fog/brightbox/requests/compute/remove_nodes_load_balancer.rb +28 -0
  35. data/lib/fog/brightbox/requests/compute/update_load_balancer.rb +29 -0
  36. data/lib/fog/core.rb +1 -0
  37. data/lib/fog/core/dns.rb +25 -0
  38. data/lib/fog/core/mock.rb +34 -0
  39. data/lib/fog/google/models/storage/file.rb +14 -2
  40. data/lib/fog/linode/dns.rb +4 -0
  41. data/lib/fog/linode/models/dns/record.rb +69 -0
  42. data/lib/fog/linode/models/dns/records.rb +37 -0
  43. data/lib/fog/linode/models/dns/zone.rb +84 -0
  44. data/lib/fog/linode/models/dns/zones.rb +29 -0
  45. data/lib/fog/linode/requests/dns/domain_create.rb +2 -3
  46. data/lib/fog/linode/requests/dns/domain_resource_create.rb +3 -4
  47. data/lib/fog/linode/requests/dns/domain_resource_list.rb +5 -2
  48. data/lib/fog/linode/requests/dns/domain_resource_update.rb +2 -2
  49. data/lib/fog/linode/requests/dns/domain_update.rb +2 -2
  50. data/lib/fog/rackspace/requests/compute/create_image.rb +1 -1
  51. data/lib/fog/rackspace/requests/compute/create_server.rb +1 -1
  52. data/lib/fog/rackspace/requests/compute/get_flavor_details.rb +19 -1
  53. data/lib/fog/rackspace/requests/compute/list_flavors.rb +14 -1
  54. data/lib/fog/rackspace/requests/compute/list_flavors_detail.rb +14 -1
  55. data/lib/fog/slicehost/bin.rb +1 -1
  56. data/lib/fog/slicehost/dns.rb +4 -0
  57. data/lib/fog/slicehost/models/dns/record.rb +66 -0
  58. data/lib/fog/slicehost/models/dns/records.rb +36 -0
  59. data/lib/fog/slicehost/models/dns/zone.rb +69 -0
  60. data/lib/fog/slicehost/models/dns/zones.rb +28 -0
  61. data/lib/fog/slicehost/requests/dns/create_record.rb +2 -3
  62. data/lib/fog/slicehost/requests/dns/get_record.rb +1 -1
  63. data/lib/fog/vcloud/terremark/ecloud.rb +1 -1
  64. data/lib/fog/zerigo/models/dns/record.rb +14 -3
  65. data/lib/fog/zerigo/models/dns/records.rb +1 -1
  66. data/lib/fog/zerigo/models/dns/zone.rb +7 -1
  67. data/lib/fog/zerigo/models/dns/zones.rb +1 -1
  68. data/spec/spec_helper.rb +0 -24
  69. data/tests/aws/requests/iam/helper.rb +15 -0
  70. data/tests/aws/requests/simpledb/attributes_tests.rb +75 -0
  71. data/tests/aws/requests/simpledb/domain_tests.rb +51 -0
  72. data/tests/aws/requests/simpledb/helper.rb +16 -0
  73. data/tests/compute/helper.rb +36 -0
  74. data/tests/compute/models/flavors_tests.rb +9 -0
  75. data/tests/compute/models/server_tests.rb +9 -0
  76. data/tests/compute/models/servers_tests.rb +9 -0
  77. data/tests/{aws/requests/compute → compute/requests/aws}/address_tests.rb +0 -0
  78. data/tests/{aws/requests/compute → compute/requests/aws}/availability_zone_tests.rb +0 -0
  79. data/tests/{aws → compute/requests/aws}/helper.rb +0 -12
  80. data/tests/{aws/requests/compute → compute/requests/aws}/image_tests.rb +0 -0
  81. data/tests/{aws/requests/compute → compute/requests/aws}/instance_tests.rb +0 -0
  82. data/tests/{aws/requests/compute → compute/requests/aws}/key_pair_tests.rb +0 -0
  83. data/tests/{aws/requests/compute → compute/requests/aws}/region_tests.rb +0 -0
  84. data/tests/{aws/requests/compute → compute/requests/aws}/security_group_tests.rb +0 -0
  85. data/tests/{aws/requests/compute → compute/requests/aws}/snapshot_tests.rb +0 -0
  86. data/tests/{aws/requests/compute → compute/requests/aws}/tag_tests.rb +0 -0
  87. data/tests/{aws/requests/compute → compute/requests/aws}/volume_tests.rb +0 -0
  88. data/tests/{bluebox/requests/compute → compute/requests/bluebox}/block_tests.rb +0 -0
  89. data/tests/{bluebox → compute/requests/bluebox}/helper.rb +0 -0
  90. data/tests/{bluebox/requests/compute → compute/requests/bluebox}/product_tests.rb +0 -0
  91. data/tests/{bluebox/requests/compute → compute/requests/bluebox}/template_tests.rb +0 -0
  92. data/tests/{brightbox/requests/compute → compute/requests/brightbox}/account_tests.rb +0 -0
  93. data/tests/{brightbox/requests/compute → compute/requests/brightbox}/api_client_tests.rb +0 -0
  94. data/tests/{brightbox/requests/compute → compute/requests/brightbox}/cloud_ip_tests.rb +15 -7
  95. data/tests/{brightbox → compute/requests/brightbox}/helper.rb +68 -22
  96. data/tests/{brightbox/requests/compute → compute/requests/brightbox}/image_tests.rb +0 -0
  97. data/tests/{brightbox/requests/compute → compute/requests/brightbox}/interface_tests.rb +0 -0
  98. data/tests/compute/requests/brightbox/load_balancer_tests.rb +74 -0
  99. data/tests/{brightbox/requests/compute → compute/requests/brightbox}/server_tests.rb +1 -0
  100. data/tests/{brightbox/requests/compute → compute/requests/brightbox}/server_type_tests.rb +1 -0
  101. data/tests/{brightbox/requests/compute → compute/requests/brightbox}/user_tests.rb +0 -0
  102. data/tests/{brightbox/requests/compute → compute/requests/brightbox}/zone_tests.rb +1 -0
  103. data/tests/{go_grid/requests/compute → compute/requests/go_grid}/image_tests.rb +0 -0
  104. data/tests/{linode/requests/compute → compute/requests/linode}/datacenter_tests.rb +0 -0
  105. data/tests/{linode/requests/compute → compute/requests/linode}/distribution_tests.rb +0 -0
  106. data/tests/{linode → compute/requests/linode}/helper.rb +0 -0
  107. data/tests/{linode/requests/compute → compute/requests/linode}/linode_tests.rb +0 -0
  108. data/tests/{linode/requests/compute → compute/requests/linode}/linodeplans_tests.rb +0 -0
  109. data/tests/{rackspace/requests/compute → compute/requests/rackspace}/address_tests.rb +0 -0
  110. data/tests/{rackspace/requests/compute → compute/requests/rackspace}/flavor_tests.rb +0 -0
  111. data/tests/{rackspace → compute/requests/rackspace}/helper.rb +0 -0
  112. data/tests/{rackspace/requests/compute → compute/requests/rackspace}/image_tests.rb +7 -9
  113. data/tests/compute/requests/rackspace/resize_tests.rb +33 -0
  114. data/tests/{rackspace/requests/compute → compute/requests/rackspace}/server_tests.rb +0 -0
  115. data/tests/{slicehost/requests/compute → compute/requests/slicehost}/backup_tests.rb +0 -0
  116. data/tests/{slicehost/requests/compute → compute/requests/slicehost}/flavor_tests.rb +0 -0
  117. data/tests/{slicehost/requests/compute → compute/requests/slicehost}/image_tests.rb +0 -0
  118. data/tests/{slicehost/requests/compute → compute/requests/slicehost}/slice_tests.rb +0 -0
  119. data/tests/dns/helper.rb +19 -0
  120. data/tests/dns/models/record_tests.rb +25 -0
  121. data/tests/dns/models/records_tests.rb +25 -0
  122. data/tests/dns/models/zone_tests.rb +13 -0
  123. data/tests/dns/models/zones_tests.rb +13 -0
  124. data/tests/{aws/requests/dns → dns/requests/aws}/dns_tests.rb +0 -0
  125. data/tests/{linode/requests/dns → dns/requests/linode}/dns_tests.rb +0 -0
  126. data/tests/{slicehost/requests/dns_tests → dns/requests/slicehost}/dns_tests.rb +0 -0
  127. data/tests/{zerigo/requests/dns → dns/requests/zerigo}/dns_tests.rb +0 -0
  128. data/tests/helper.rb +1 -100
  129. data/tests/helpers/{collection_tests.rb → collection_helper.rb} +0 -0
  130. data/tests/helpers/compute/{flavors_tests.rb → flavors_helper.rb} +0 -0
  131. data/tests/helpers/compute/{server_tests.rb → server_helper.rb} +0 -0
  132. data/tests/helpers/compute/{servers_tests.rb → servers_helper.rb} +0 -0
  133. data/tests/helpers/formats_helper.rb +68 -0
  134. data/tests/{helper_tests.rb → helpers/formats_helper_tests.rb} +0 -0
  135. data/tests/helpers/{model_tests.rb → model_helper.rb} +0 -0
  136. data/tests/helpers/responds_to_helper.rb +13 -0
  137. data/tests/helpers/succeeds_helper.rb +12 -0
  138. data/tests/storage/helper.rb +16 -0
  139. data/tests/storage/models/directories_tests.rb +13 -0
  140. data/tests/storage/models/directory_test.rb +24 -0
  141. data/tests/storage/models/file_tests.rb +41 -0
  142. data/tests/storage/models/files_tests.rb +26 -0
  143. data/tests/{aws/requests/storage → storage/requests/aws}/bucket_tests.rb +0 -0
  144. data/tests/{aws/requests/storage → storage/requests/aws}/multipart_upload_tests.rb +0 -0
  145. data/tests/{aws/requests/storage → storage/requests/aws}/object_tests.rb +0 -0
  146. data/tests/{google/requests/storage → storage/requests/google}/bucket_tests.rb +0 -0
  147. data/tests/{google/requests/storage → storage/requests/google}/object_tests.rb +0 -0
  148. data/tests/{rackspace/requests/storage → storage/requests/rackspace}/container_tests.rb +0 -0
  149. data/tests/{rackspace/requests/storage → storage/requests/rackspace}/object_tests.rb +0 -0
  150. metadata +195 -224
  151. data/examples/bluebox_create.rb +0 -33
  152. data/examples/dns_methods.rb +0 -389
  153. data/spec/aws/requests/simpledb/batch_put_attributes_spec.rb +0 -31
  154. data/spec/aws/requests/simpledb/create_domain_spec.rb +0 -29
  155. data/spec/aws/requests/simpledb/delete_attributes_spec.rb +0 -39
  156. data/spec/aws/requests/simpledb/delete_domain_spec.rb +0 -28
  157. data/spec/aws/requests/simpledb/domain_metadata_spec.rb +0 -52
  158. data/spec/aws/requests/simpledb/get_attributes_spec.rb +0 -67
  159. data/spec/aws/requests/simpledb/list_domains_spec.rb +0 -30
  160. data/spec/aws/requests/simpledb/put_attributes_spec.rb +0 -49
  161. data/spec/aws/requests/simpledb/select_spec.rb +0 -27
  162. data/tests/aws/models/compute/flavors_tests.rb +0 -5
  163. data/tests/aws/models/compute/server_tests.rb +0 -6
  164. data/tests/aws/models/compute/servers_tests.rb +0 -6
  165. data/tests/aws/models/storage/directories_tests.rb +0 -5
  166. data/tests/aws/models/storage/directory_tests.rb +0 -5
  167. data/tests/aws/models/storage/file_tests.rb +0 -5
  168. data/tests/aws/models/storage/files_tests.rb +0 -5
  169. data/tests/bluebox/models/compute/flavors_tests.rb +0 -5
  170. data/tests/bluebox/models/compute/server_tests.rb +0 -5
  171. data/tests/bluebox/models/compute/servers_tests.rb +0 -6
  172. data/tests/brightbox/models/compute/flavors_tests.rb +0 -5
  173. data/tests/brightbox/models/compute/server_tests.rb +0 -6
  174. data/tests/brightbox/models/compute/servers_tests.rb +0 -6
  175. data/tests/go_grid/helper.rb +0 -0
  176. data/tests/google/models/storage/directories_tests.rb +0 -5
  177. data/tests/google/models/storage/directory_tests.rb +0 -5
  178. data/tests/google/models/storage/file_tests.rb +0 -5
  179. data/tests/google/models/storage/files_tests.rb +0 -5
  180. data/tests/helpers/storage/directories_tests.rb +0 -7
  181. data/tests/helpers/storage/directory_tests.rb +0 -18
  182. data/tests/helpers/storage/file_tests.rb +0 -27
  183. data/tests/helpers/storage/files_tests.rb +0 -13
  184. data/tests/local/models/storage/directories_tests.rb +0 -5
  185. data/tests/local/models/storage/directory_tests.rb +0 -5
  186. data/tests/local/models/storage/file_tests.rb +0 -5
  187. data/tests/local/models/storage/files_tests.rb +0 -5
  188. data/tests/rackspace/models/compute/flavors_tests.rb +0 -5
  189. data/tests/rackspace/models/compute/server_tests.rb +0 -6
  190. data/tests/rackspace/models/compute/servers_tests.rb +0 -6
  191. data/tests/rackspace/models/storage/directories_tests.rb +0 -5
  192. data/tests/rackspace/models/storage/directory_tests.rb +0 -5
  193. data/tests/rackspace/models/storage/file_tests.rb +0 -5
  194. data/tests/rackspace/models/storage/files_tests.rb +0 -5
  195. data/tests/rackspace/requests/compute/resize_tests.rb +0 -47
  196. data/tests/slicehost/helper.rb +0 -1
  197. data/tests/slicehost/models/compute/flavors_tests.rb +0 -5
  198. data/tests/slicehost/models/compute/server_tests.rb +0 -6
  199. data/tests/slicehost/models/compute/servers_tests.rb +0 -6
  200. data/tests/zerigo/helper.rb +0 -0
@@ -12,6 +12,32 @@ module Fog
12
12
  attribute :ip_permissions, :aliases => 'ipPermissions'
13
13
  attribute :owner_id, :aliases => 'ownerId'
14
14
 
15
+ # Authorize access by another security group
16
+ #
17
+ # >> g = AWS.security_groups.all(:description => "something").first
18
+ # >> g.authorize_group_and_owner("some_group_name", "1234567890")
19
+ #
20
+ # == Parameters:
21
+ # group::
22
+ # The name of the security group you're granting access to.
23
+ #
24
+ # owner::
25
+ # The owner id for security group you're granting access to.
26
+ #
27
+ # == Returns:
28
+ #
29
+ # An excon response object representing the result
30
+ #
31
+ # <Excon::Response:0x101fc2ae0
32
+ # @status=200,
33
+ # @body={"requestId"=>"some-id-string",
34
+ # "return"=>true},
35
+ # headers{"Transfer-Encoding"=>"chunked",
36
+ # "Date"=>"Mon, 27 Dec 2010 22:12:57 GMT",
37
+ # "Content-Type"=>"text/xml;charset=UTF-8",
38
+ # "Server"=>"AmazonEC2"}
39
+ #
40
+
15
41
  def authorize_group_and_owner(group, owner)
16
42
  requires :name
17
43
 
@@ -22,6 +48,34 @@ module Fog
22
48
  )
23
49
  end
24
50
 
51
+ # Authorize a new port range for a security group
52
+ #
53
+ # >> g = AWS.security_groups.all(:description => "something").first
54
+ # >> g.authorize_port_range(20..21)
55
+ #
56
+ # == Parameters:
57
+ # range::
58
+ # A Range object representing the port range you want to open up. E.g., 20..21
59
+ #
60
+ # options::
61
+ # A hash that can contain any of the following keys:
62
+ # :cidr_ip (defaults to "0.0.0.0/0")
63
+ # :ip_protocol (defaults to "tcp")
64
+ #
65
+ # == Returns:
66
+ #
67
+ # An excon response object representing the result
68
+ #
69
+ # <Excon::Response:0x101fc2ae0
70
+ # @status=200,
71
+ # @body={"requestId"=>"some-id-string",
72
+ # "return"=>true},
73
+ # headers{"Transfer-Encoding"=>"chunked",
74
+ # "Date"=>"Mon, 27 Dec 2010 22:12:57 GMT",
75
+ # "Content-Type"=>"text/xml;charset=UTF-8",
76
+ # "Server"=>"AmazonEC2"}
77
+ #
78
+
25
79
  def authorize_port_range(range, options = {})
26
80
  requires :name
27
81
 
@@ -34,6 +88,15 @@ module Fog
34
88
  )
35
89
  end
36
90
 
91
+ # Removes an existing security group
92
+ #
93
+ # security_group.destroy
94
+ #
95
+ # ==== Returns
96
+ #
97
+ # True or false depending on the result
98
+ #
99
+
37
100
  def destroy
38
101
  requires :name
39
102
 
@@ -41,6 +104,32 @@ module Fog
41
104
  true
42
105
  end
43
106
 
107
+ # Revoke access by another security group
108
+ #
109
+ # >> g = AWS.security_groups.all(:description => "something").first
110
+ # >> g.revoke_group_and_owner("some_group_name", "1234567890")
111
+ #
112
+ # == Parameters:
113
+ # group::
114
+ # The name of the security group you're revoking access to.
115
+ #
116
+ # owner::
117
+ # The owner id for security group you're revoking access access to.
118
+ #
119
+ # == Returns:
120
+ #
121
+ # An excon response object representing the result
122
+ #
123
+ # <Excon::Response:0x101fc2ae0
124
+ # @status=200,
125
+ # @body={"requestId"=>"some-id-string",
126
+ # "return"=>true},
127
+ # headers{"Transfer-Encoding"=>"chunked",
128
+ # "Date"=>"Mon, 27 Dec 2010 22:12:57 GMT",
129
+ # "Content-Type"=>"text/xml;charset=UTF-8",
130
+ # "Server"=>"AmazonEC2"}
131
+ #
132
+
44
133
  def revoke_group_and_owner(group, owner)
45
134
  requires :name
46
135
 
@@ -51,6 +140,34 @@ module Fog
51
140
  )
52
141
  end
53
142
 
143
+ # Revoke an existing port range for a security group
144
+ #
145
+ # >> g = AWS.security_groups.all(:description => "something").first
146
+ # >> g.revoke_port_range(20..21)
147
+ #
148
+ # == Parameters:
149
+ # range::
150
+ # A Range object representing the port range you want to open up. E.g., 20..21
151
+ #
152
+ # options::
153
+ # A hash that can contain any of the following keys:
154
+ # :cidr_ip (defaults to "0.0.0.0/0")
155
+ # :ip_protocol (defaults to "tcp")
156
+ #
157
+ # == Returns:
158
+ #
159
+ # An excon response object representing the result
160
+ #
161
+ # <Excon::Response:0x101fc2ae0
162
+ # @status=200,
163
+ # @body={"requestId"=>"some-id-string",
164
+ # "return"=>true},
165
+ # headers{"Transfer-Encoding"=>"chunked",
166
+ # "Date"=>"Mon, 27 Dec 2010 22:12:57 GMT",
167
+ # "Content-Type"=>"text/xml;charset=UTF-8",
168
+ # "Server"=>"AmazonEC2"}
169
+ #
170
+
54
171
  def revoke_port_range(range, options = {})
55
172
  requires :name
56
173
 
@@ -63,6 +180,17 @@ module Fog
63
180
  )
64
181
  end
65
182
 
183
+ # Create a security group
184
+ #
185
+ # >> g = AWS.security_groups.new(:name => "some_name", :description => "something")
186
+ # >> g.save
187
+ #
188
+ # == Returns:
189
+ #
190
+ # True or an exception depending on the result. Keep in mind that this *creates* a new security group.
191
+ # As such, it yields an InvalidGroup.Duplicate exception if you attempt to save an existing group.
192
+ #
193
+
66
194
  def save
67
195
  requires :description, :name
68
196
 
@@ -0,0 +1,64 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module AWS
5
+ class DNS
6
+
7
+ class Record < Fog::Model
8
+
9
+ identity :id, :aliases => ['Id']
10
+
11
+ attribute :ip, :aliases => ['ResourceRecords']
12
+ attribute :name, :aliases => ['Name']
13
+ attribute :ttl, :aliases => ['TTL']
14
+ attribute :type, :aliases => ['Type']
15
+ attribute :status, :aliases => ['Status']
16
+ attribute :created_at, :aliases => ['SubmittedAt']
17
+
18
+ def initialize(attributes={})
19
+ self.ttl ||= 3600
20
+ super
21
+ end
22
+
23
+ def destroy
24
+ requires :ip, :name, :ttl, :type, :zone
25
+ options = {
26
+ :action => 'DELETE',
27
+ :name => name,
28
+ :resource_records => [*ip],
29
+ :ttl => ttl,
30
+ :type => type
31
+ }
32
+ connection.change_resource_record_sets(zone.id, [options])
33
+ true
34
+ end
35
+
36
+ def zone
37
+ @zone
38
+ end
39
+
40
+ def save
41
+ requires :ip, :name, :ttl, :type, :zone
42
+ options = {
43
+ :action => 'CREATE',
44
+ :name => name,
45
+ :resource_records => [*ip],
46
+ :ttl => ttl,
47
+ :type => type
48
+ }
49
+ data = connection.change_resource_record_sets(zone.id, [options]).body
50
+ merge_attributes(data)
51
+ true
52
+ end
53
+
54
+ private
55
+
56
+ def zone=(new_zone)
57
+ @zone = new_zone
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,47 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/aws/models/dns/record'
3
+
4
+ module Fog
5
+ module AWS
6
+ class DNS
7
+
8
+ class Records < Fog::Collection
9
+
10
+ attribute :is_truncated, :aliases => ['IsTruncated']
11
+ attribute :max_items, :aliases => ['MaxItems']
12
+ attribute :name
13
+ attribute :next_record_name, :aliases => ['NextRecordName']
14
+ attribute :next_record_type, :aliases => ['NextRecordType']
15
+ attribute :type
16
+
17
+ attribute :zone
18
+
19
+ model Fog::AWS::DNS::Record
20
+
21
+ def all(options = {})
22
+ requires :zone
23
+ options['MaxItems'] ||= max_items
24
+ options['Name'] ||= name
25
+ options['Type'] ||= type
26
+ data = connection.list_resource_record_sets(zone.id, options).body
27
+ merge_attributes(data.reject {|key, value| !['IsTruncated', 'MaxItems', 'NextRecordName', 'NextRecordType'].include?(key)})
28
+ load(data['ResourceRecordSets'])
29
+ end
30
+
31
+ def get(record_id)
32
+ data = connection.get_change(record_id).body
33
+ new(data)
34
+ rescue Excon::Errors::BadRequest
35
+ nil
36
+ end
37
+
38
+ def new(attributes = {})
39
+ requires :zone
40
+ super({ :zone => zone }.merge!(attributes))
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,53 @@
1
+ require 'fog/core/model'
2
+ # require 'fog/aws/models/dns/records'
3
+
4
+ module Fog
5
+ module AWS
6
+ class DNS
7
+
8
+ class Zone < Fog::Model
9
+
10
+ identity :id, :aliases => 'Id'
11
+
12
+ attribute :caller_reference, :aliases => 'CallerReference'
13
+ attribute :change_info, :aliases => 'ChangeInfo'
14
+ attribute :description, :aliases => 'Comment'
15
+ attribute :domain, :aliases => 'Name'
16
+ attribute :nameservers, :aliases => 'NameServers'
17
+
18
+ def destroy
19
+ requires :identity
20
+ connection.delete_hosted_zone(identity)
21
+ true
22
+ end
23
+
24
+ def records
25
+ @records ||= begin
26
+ Fog::AWS::DNS::Records.new(
27
+ :zone => self,
28
+ :connection => connection
29
+ )
30
+ end
31
+ end
32
+
33
+ def save
34
+ requires :domain
35
+ options = {}
36
+ options[:caller_ref] = caller_reference if caller_reference
37
+ options[:comment] = description if description
38
+ data = connection.create_hosted_zone(domain, options).body
39
+ merge_attributes(data)
40
+ true
41
+ end
42
+
43
+ private
44
+
45
+ define_method(:HostedZone=) do |new_hosted_zone|
46
+ merge_attributes(new_hosted_zone)
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,33 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/aws/models/dns/zone'
3
+
4
+ module Fog
5
+ module AWS
6
+ class DNS
7
+
8
+ class Zones < Fog::Collection
9
+
10
+ attribute :marker, :aliases => 'Marker'
11
+ attribute :max_items, :aliases => 'MaxItems'
12
+
13
+ model Fog::AWS::DNS::Zone
14
+
15
+ def all(options = {})
16
+ options['marker'] ||= marker
17
+ options['maxitems'] ||= max_items
18
+ data = connection.list_hosted_zones(options).body['HostedZones']
19
+ load(data)
20
+ end
21
+
22
+ def get(zone_id)
23
+ data = connection.get_hosted_zone(zone_id).body
24
+ new(data)
25
+ rescue Excon::Errors::BadRequest
26
+ nil
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -15,12 +15,13 @@ module Fog
15
15
  attribute :cache_control, :aliases => 'Cache-Control'
16
16
  attribute :content_disposition, :aliases => 'Content-Disposition'
17
17
  attribute :content_encoding, :aliases => 'Content-Encoding'
18
- attribute :content_length, :aliases => ['Content-Length', 'Size'], :type => :integer
18
+ attribute :content_length, :aliases => ['Content-Length', 'Size']
19
19
  attribute :content_md5, :aliases => 'Content-MD5'
20
20
  attribute :content_type, :aliases => 'Content-Type'
21
21
  attribute :etag, :aliases => ['Etag', 'ETag']
22
22
  attribute :expires, :aliases => 'Expires'
23
- attribute :last_modified, :aliases => ['Last-Modified', 'LastModified'], :type => :time
23
+ attribute :last_modified, :aliases => ['Last-Modified', 'LastModified']
24
+ attribute :metadata
24
25
  attribute :owner, :aliases => 'Owner'
25
26
  attribute :storage_class, :aliases => ['x-amz-storage-class', 'StorageClass']
26
27
 
@@ -61,6 +62,16 @@ module Fog
61
62
  true
62
63
  end
63
64
 
65
+ remove_method :metadata
66
+ def metadata
67
+ attributes.reject {|key, value| !(key.to_s =~ /^x-amz-meta-/)}
68
+ end
69
+
70
+ remove_method :metadata=
71
+ def metadata=(new_metadata)
72
+ merge_attributes(new_metadata)
73
+ end
74
+
64
75
  remove_method :owner=
65
76
  def owner=(new_owner)
66
77
  if new_owner
@@ -105,6 +116,7 @@ module Fog
105
116
  options['Content-MD5'] = content_md5 if content_md5
106
117
  options['Content-Type'] = content_type if content_type
107
118
  options['Expires'] = expires if expires
119
+ options.merge(metadata)
108
120
  options['x-amz-storage-class'] = storage_class if storage_class
109
121
 
110
122
  data = connection.put_object(directory.key, key, body, options)
@@ -17,7 +17,7 @@ module Fog
17
17
  if @section == :hosted_zone
18
18
  case name
19
19
  when 'Id'
20
- @hosted_zone[name]= @value.sub('/hostedzone/', '')
20
+ @hosted_zone[name] = @value.sub('/hostedzone/', '')
21
21
  when 'Name', 'CallerReference', 'Comment'
22
22
  @hosted_zone[name]= @value
23
23
  when 'HostedZone'
@@ -13,7 +13,9 @@ module Fog
13
13
 
14
14
  def end_element(name)
15
15
  case name
16
- when 'Id', 'Name', 'CallerReference', 'Comment'
16
+ when 'Id'
17
+ @zone[name] = @value.sub('/hostedzone/', '')
18
+ when 'Name', 'CallerReference', 'Comment'
17
19
  @zone[name] = @value
18
20
  when 'HostedZone'
19
21
  @hosted_zones << @zone
@@ -18,6 +18,7 @@ module Fog
18
18
  request(
19
19
  'Action' => 'CreateDomain',
20
20
  'DomainName' => domain_name,
21
+ :idempotent => true,
21
22
  :parser => Fog::Parsers::AWS::SimpleDB::Basic.new(@nil_string)
22
23
  )
23
24
  end
@@ -44,8 +44,6 @@ module Fog
44
44
  @data[:domains][domain_name][key].delete('value')
45
45
  end
46
46
  end
47
- else
48
- @data[:domains].delete(domain_name)
49
47
  end
50
48
  response.status = 200
51
49
  response.body = {