aws_sdk 3.1.5

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 (390) hide show
  1. data/lib/aws-sdk.rb +14 -0
  2. data/lib/aws.rb +49 -0
  3. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +791 -0
  4. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +303 -0
  5. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +540 -0
  6. data/lib/aws/api_config/EC2-2011-12-15.yml +3638 -0
  7. data/lib/aws/api_config/EC2-2012-04-01.yml +3739 -0
  8. data/lib/aws/api_config/ELB-2011-08-15.yml +512 -0
  9. data/lib/aws/api_config/IAM-2010-05-08.yml +1221 -0
  10. data/lib/aws/api_config/SNS-2010-03-31.yml +248 -0
  11. data/lib/aws/api_config/SQS-2011-10-01.yml +314 -0
  12. data/lib/aws/api_config/STS-2011-06-15.yml +54 -0
  13. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +305 -0
  14. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +231 -0
  15. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +721 -0
  16. data/lib/aws/auto_scaling.rb +162 -0
  17. data/lib/aws/auto_scaling/activity.rb +102 -0
  18. data/lib/aws/auto_scaling/activity_collection.rb +82 -0
  19. data/lib/aws/auto_scaling/client.rb +765 -0
  20. data/lib/aws/auto_scaling/config.rb +18 -0
  21. data/lib/aws/auto_scaling/errors.rb +22 -0
  22. data/lib/aws/auto_scaling/group.rb +420 -0
  23. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  24. data/lib/aws/auto_scaling/group_options.rb +146 -0
  25. data/lib/aws/auto_scaling/instance.rb +192 -0
  26. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  27. data/lib/aws/auto_scaling/launch_configuration.rb +150 -0
  28. data/lib/aws/auto_scaling/launch_configuration_collection.rb +144 -0
  29. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  30. data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
  31. data/lib/aws/auto_scaling/request.rb +23 -0
  32. data/lib/aws/auto_scaling/scaling_policy.rb +125 -0
  33. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  34. data/lib/aws/auto_scaling/scaling_policy_options.rb +61 -0
  35. data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
  36. data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
  37. data/lib/aws/auto_scaling/tag.rb +59 -0
  38. data/lib/aws/auto_scaling/tag_collection.rb +112 -0
  39. data/lib/aws/cloud_formation.rb +270 -0
  40. data/lib/aws/cloud_formation/client.rb +339 -0
  41. data/lib/aws/cloud_formation/config.rb +18 -0
  42. data/lib/aws/cloud_formation/errors.rb +22 -0
  43. data/lib/aws/cloud_formation/request.rb +29 -0
  44. data/lib/aws/cloud_formation/stack.rb +256 -0
  45. data/lib/aws/cloud_formation/stack_collection.rb +206 -0
  46. data/lib/aws/cloud_formation/stack_event.rb +75 -0
  47. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  48. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  49. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  50. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  51. data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
  52. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +72 -0
  53. data/lib/aws/cloud_formation/stack_summary.rb +71 -0
  54. data/lib/aws/cloud_formation/stack_summary_collection.rb +127 -0
  55. data/lib/aws/core.rb +474 -0
  56. data/lib/aws/core/async_handle.rb +90 -0
  57. data/lib/aws/core/autoloader.rb +64 -0
  58. data/lib/aws/core/cacheable.rb +78 -0
  59. data/lib/aws/core/client.rb +541 -0
  60. data/lib/aws/core/client/query_json.rb +110 -0
  61. data/lib/aws/core/client/query_xml.rb +122 -0
  62. data/lib/aws/core/collection.rb +234 -0
  63. data/lib/aws/core/collection/limitable.rb +99 -0
  64. data/lib/aws/core/collection/simple.rb +90 -0
  65. data/lib/aws/core/configuration.rb +445 -0
  66. data/lib/aws/core/data.rb +242 -0
  67. data/lib/aws/core/default_signer.rb +67 -0
  68. data/lib/aws/core/http/curb_handler.rb +136 -0
  69. data/lib/aws/core/http/handler.rb +77 -0
  70. data/lib/aws/core/http/httparty_handler.rb +114 -0
  71. data/lib/aws/core/http/net_http_handler.rb +85 -0
  72. data/lib/aws/core/http/request.rb +250 -0
  73. data/lib/aws/core/http/response.rb +74 -0
  74. data/lib/aws/core/indifferent_hash.rb +88 -0
  75. data/lib/aws/core/inflection.rb +47 -0
  76. data/lib/aws/core/lazy_error_classes.rb +90 -0
  77. data/lib/aws/core/log_formatter.rb +454 -0
  78. data/lib/aws/core/meta_utils.rb +45 -0
  79. data/lib/aws/core/model.rb +57 -0
  80. data/lib/aws/core/naming.rb +30 -0
  81. data/lib/aws/core/option_grammar.rb +700 -0
  82. data/lib/aws/core/page_result.rb +73 -0
  83. data/lib/aws/core/policy.rb +916 -0
  84. data/lib/aws/core/resource.rb +408 -0
  85. data/lib/aws/core/resource_cache.rb +40 -0
  86. data/lib/aws/core/response.rb +202 -0
  87. data/lib/aws/core/response_cache.rb +50 -0
  88. data/lib/aws/core/service_interface.rb +61 -0
  89. data/lib/aws/core/session_signer.rb +90 -0
  90. data/lib/aws/core/signature/version_2.rb +42 -0
  91. data/lib/aws/core/signature/version_3.rb +73 -0
  92. data/lib/aws/core/signature/version_3_http.rb +72 -0
  93. data/lib/aws/core/signature/version_4.rb +138 -0
  94. data/lib/aws/core/uri_escape.rb +42 -0
  95. data/lib/aws/core/xml/frame.rb +242 -0
  96. data/lib/aws/core/xml/frame_stack.rb +85 -0
  97. data/lib/aws/core/xml/grammar.rb +299 -0
  98. data/lib/aws/core/xml/parser.rb +70 -0
  99. data/lib/aws/core/xml/root_frame.rb +65 -0
  100. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  101. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +55 -0
  102. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  103. data/lib/aws/core/xml/sax_handlers/rexml.rb +43 -0
  104. data/lib/aws/core/xml/stub.rb +123 -0
  105. data/lib/aws/dynamo_db.rb +213 -0
  106. data/lib/aws/dynamo_db/attribute_collection.rb +460 -0
  107. data/lib/aws/dynamo_db/batch_get.rb +206 -0
  108. data/lib/aws/dynamo_db/batch_write.rb +251 -0
  109. data/lib/aws/dynamo_db/client.rb +888 -0
  110. data/lib/aws/dynamo_db/config.rb +20 -0
  111. data/lib/aws/dynamo_db/errors.rb +20 -0
  112. data/lib/aws/dynamo_db/expectations.rb +40 -0
  113. data/lib/aws/dynamo_db/item.rb +130 -0
  114. data/lib/aws/dynamo_db/item_collection.rb +852 -0
  115. data/lib/aws/dynamo_db/item_data.rb +31 -0
  116. data/lib/aws/dynamo_db/keys.rb +41 -0
  117. data/lib/aws/dynamo_db/primary_key_element.rb +47 -0
  118. data/lib/aws/dynamo_db/request.rb +28 -0
  119. data/lib/aws/dynamo_db/resource.rb +33 -0
  120. data/lib/aws/dynamo_db/table.rb +489 -0
  121. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  122. data/lib/aws/dynamo_db/types.rb +86 -0
  123. data/lib/aws/ec2.rb +431 -0
  124. data/lib/aws/ec2/attachment.rb +140 -0
  125. data/lib/aws/ec2/attachment_collection.rb +54 -0
  126. data/lib/aws/ec2/availability_zone.rb +87 -0
  127. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  128. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  129. data/lib/aws/ec2/client.rb +4121 -0
  130. data/lib/aws/ec2/collection.rb +36 -0
  131. data/lib/aws/ec2/config.rb +18 -0
  132. data/lib/aws/ec2/config_transform.rb +63 -0
  133. data/lib/aws/ec2/customer_gateway.rb +90 -0
  134. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  135. data/lib/aws/ec2/dhcp_options.rb +106 -0
  136. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  137. data/lib/aws/ec2/elastic_ip.rb +157 -0
  138. data/lib/aws/ec2/elastic_ip_collection.rb +97 -0
  139. data/lib/aws/ec2/errors.rb +32 -0
  140. data/lib/aws/ec2/filtered_collection.rb +90 -0
  141. data/lib/aws/ec2/has_permissions.rb +44 -0
  142. data/lib/aws/ec2/image.rb +254 -0
  143. data/lib/aws/ec2/image_collection.rb +228 -0
  144. data/lib/aws/ec2/instance.rb +669 -0
  145. data/lib/aws/ec2/instance_collection.rb +346 -0
  146. data/lib/aws/ec2/internet_gateway.rb +122 -0
  147. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  148. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  149. data/lib/aws/ec2/key_pair.rb +82 -0
  150. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  151. data/lib/aws/ec2/network_acl.rb +256 -0
  152. data/lib/aws/ec2/network_acl/association.rb +56 -0
  153. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  154. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  155. data/lib/aws/ec2/network_interface.rb +228 -0
  156. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  157. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  158. data/lib/aws/ec2/permission_collection.rb +174 -0
  159. data/lib/aws/ec2/region.rb +97 -0
  160. data/lib/aws/ec2/region_collection.rb +51 -0
  161. data/lib/aws/ec2/request.rb +22 -0
  162. data/lib/aws/ec2/reserved_instances.rb +53 -0
  163. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  164. data/lib/aws/ec2/reserved_instances_offering.rb +58 -0
  165. data/lib/aws/ec2/reserved_instances_offering_collection.rb +39 -0
  166. data/lib/aws/ec2/resource.rb +161 -0
  167. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  168. data/lib/aws/ec2/route_table.rb +205 -0
  169. data/lib/aws/ec2/route_table/association.rb +119 -0
  170. data/lib/aws/ec2/route_table/route.rb +113 -0
  171. data/lib/aws/ec2/route_table_collection.rb +72 -0
  172. data/lib/aws/ec2/security_group.rb +458 -0
  173. data/lib/aws/ec2/security_group/egress_ip_permission_collection.rb +63 -0
  174. data/lib/aws/ec2/security_group/ingress_ip_permission_collection.rb +61 -0
  175. data/lib/aws/ec2/security_group/ip_permission.rb +128 -0
  176. data/lib/aws/ec2/security_group_collection.rb +135 -0
  177. data/lib/aws/ec2/snapshot.rb +143 -0
  178. data/lib/aws/ec2/snapshot_collection.rb +131 -0
  179. data/lib/aws/ec2/subnet.rb +161 -0
  180. data/lib/aws/ec2/subnet_collection.rb +115 -0
  181. data/lib/aws/ec2/tag.rb +81 -0
  182. data/lib/aws/ec2/tag_collection.rb +107 -0
  183. data/lib/aws/ec2/tagged_collection.rb +53 -0
  184. data/lib/aws/ec2/tagged_item.rb +85 -0
  185. data/lib/aws/ec2/volume.rb +170 -0
  186. data/lib/aws/ec2/volume_collection.rb +97 -0
  187. data/lib/aws/ec2/vpc.rb +166 -0
  188. data/lib/aws/ec2/vpc_collection.rb +70 -0
  189. data/lib/aws/ec2/vpn_connection.rb +99 -0
  190. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  191. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  192. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  193. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  194. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  195. data/lib/aws/elb.rb +65 -0
  196. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  197. data/lib/aws/elb/backend_server_policy_collection.rb +140 -0
  198. data/lib/aws/elb/client.rb +539 -0
  199. data/lib/aws/elb/config.rb +18 -0
  200. data/lib/aws/elb/errors.rb +26 -0
  201. data/lib/aws/elb/instance_collection.rb +174 -0
  202. data/lib/aws/elb/listener.rb +189 -0
  203. data/lib/aws/elb/listener_collection.rb +119 -0
  204. data/lib/aws/elb/listener_opts.rb +45 -0
  205. data/lib/aws/elb/load_balancer.rb +253 -0
  206. data/lib/aws/elb/load_balancer_collection.rb +113 -0
  207. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  208. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  209. data/lib/aws/elb/request.rb +23 -0
  210. data/lib/aws/errors.rb +122 -0
  211. data/lib/aws/iam.rb +418 -0
  212. data/lib/aws/iam/access_key.rb +180 -0
  213. data/lib/aws/iam/access_key_collection.rb +128 -0
  214. data/lib/aws/iam/account_alias_collection.rb +79 -0
  215. data/lib/aws/iam/client.rb +1609 -0
  216. data/lib/aws/iam/collection.rb +83 -0
  217. data/lib/aws/iam/config.rb +18 -0
  218. data/lib/aws/iam/errors.rb +22 -0
  219. data/lib/aws/iam/group.rb +111 -0
  220. data/lib/aws/iam/group_collection.rb +132 -0
  221. data/lib/aws/iam/group_policy_collection.rb +47 -0
  222. data/lib/aws/iam/group_user_collection.rb +84 -0
  223. data/lib/aws/iam/login_profile.rb +99 -0
  224. data/lib/aws/iam/mfa_device.rb +52 -0
  225. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  226. data/lib/aws/iam/policy.rb +46 -0
  227. data/lib/aws/iam/policy_collection.rb +188 -0
  228. data/lib/aws/iam/request.rb +29 -0
  229. data/lib/aws/iam/resource.rb +71 -0
  230. data/lib/aws/iam/server_certificate.rb +141 -0
  231. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  232. data/lib/aws/iam/signing_certificate.rb +169 -0
  233. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  234. data/lib/aws/iam/user.rb +205 -0
  235. data/lib/aws/iam/user_collection.rb +133 -0
  236. data/lib/aws/iam/user_group_collection.rb +98 -0
  237. data/lib/aws/iam/user_policy.rb +90 -0
  238. data/lib/aws/iam/user_policy_collection.rb +45 -0
  239. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  240. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  241. data/lib/aws/rails.rb +195 -0
  242. data/lib/aws/record.rb +116 -0
  243. data/lib/aws/record/abstract_base.rb +645 -0
  244. data/lib/aws/record/attributes.rb +384 -0
  245. data/lib/aws/record/conversion.rb +38 -0
  246. data/lib/aws/record/dirty_tracking.rb +285 -0
  247. data/lib/aws/record/errors.rb +143 -0
  248. data/lib/aws/record/exceptions.rb +48 -0
  249. data/lib/aws/record/hash_model.rb +161 -0
  250. data/lib/aws/record/hash_model/attributes.rb +182 -0
  251. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  252. data/lib/aws/record/hash_model/scope.rb +108 -0
  253. data/lib/aws/record/model.rb +427 -0
  254. data/lib/aws/record/model/attributes.rb +379 -0
  255. data/lib/aws/record/model/finder_methods.rb +232 -0
  256. data/lib/aws/record/model/scope.rb +213 -0
  257. data/lib/aws/record/naming.rb +31 -0
  258. data/lib/aws/record/scope.rb +199 -0
  259. data/lib/aws/record/validations.rb +694 -0
  260. data/lib/aws/record/validator.rb +237 -0
  261. data/lib/aws/record/validators/acceptance.rb +51 -0
  262. data/lib/aws/record/validators/block.rb +38 -0
  263. data/lib/aws/record/validators/confirmation.rb +43 -0
  264. data/lib/aws/record/validators/count.rb +108 -0
  265. data/lib/aws/record/validators/exclusion.rb +43 -0
  266. data/lib/aws/record/validators/format.rb +57 -0
  267. data/lib/aws/record/validators/inclusion.rb +56 -0
  268. data/lib/aws/record/validators/length.rb +107 -0
  269. data/lib/aws/record/validators/method.rb +33 -0
  270. data/lib/aws/record/validators/numericality.rb +138 -0
  271. data/lib/aws/record/validators/presence.rb +45 -0
  272. data/lib/aws/s3.rb +135 -0
  273. data/lib/aws/s3/access_control_list.rb +250 -0
  274. data/lib/aws/s3/acl_object.rb +264 -0
  275. data/lib/aws/s3/bucket.rb +393 -0
  276. data/lib/aws/s3/bucket_collection.rb +143 -0
  277. data/lib/aws/s3/bucket_lifecycle_configuration.rb +360 -0
  278. data/lib/aws/s3/bucket_version_collection.rb +77 -0
  279. data/lib/aws/s3/client.rb +1184 -0
  280. data/lib/aws/s3/client/xml.rb +177 -0
  281. data/lib/aws/s3/config.rb +26 -0
  282. data/lib/aws/s3/data_options.rb +100 -0
  283. data/lib/aws/s3/errors.rb +81 -0
  284. data/lib/aws/s3/multipart_upload.rb +317 -0
  285. data/lib/aws/s3/multipart_upload_collection.rb +68 -0
  286. data/lib/aws/s3/object_collection.rb +337 -0
  287. data/lib/aws/s3/object_metadata.rb +96 -0
  288. data/lib/aws/s3/object_upload_collection.rb +77 -0
  289. data/lib/aws/s3/object_version.rb +143 -0
  290. data/lib/aws/s3/object_version_collection.rb +89 -0
  291. data/lib/aws/s3/paginated_collection.rb +75 -0
  292. data/lib/aws/s3/policy.rb +74 -0
  293. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  294. data/lib/aws/s3/prefixed_collection.rb +81 -0
  295. data/lib/aws/s3/presigned_post.rb +553 -0
  296. data/lib/aws/s3/request.rb +201 -0
  297. data/lib/aws/s3/s3_object.rb +1037 -0
  298. data/lib/aws/s3/tree.rb +118 -0
  299. data/lib/aws/s3/tree/branch_node.rb +68 -0
  300. data/lib/aws/s3/tree/child_collection.rb +104 -0
  301. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  302. data/lib/aws/s3/tree/node.rb +22 -0
  303. data/lib/aws/s3/tree/parent.rb +87 -0
  304. data/lib/aws/s3/uploaded_part.rb +80 -0
  305. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  306. data/lib/aws/simple_db.rb +217 -0
  307. data/lib/aws/simple_db/attribute.rb +154 -0
  308. data/lib/aws/simple_db/attribute_collection.rb +231 -0
  309. data/lib/aws/simple_db/client.rb +349 -0
  310. data/lib/aws/simple_db/config.rb +20 -0
  311. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  312. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  313. data/lib/aws/simple_db/domain.rb +121 -0
  314. data/lib/aws/simple_db/domain_collection.rb +113 -0
  315. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  316. data/lib/aws/simple_db/errors.rb +55 -0
  317. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  318. data/lib/aws/simple_db/item.rb +93 -0
  319. data/lib/aws/simple_db/item_collection.rb +649 -0
  320. data/lib/aws/simple_db/item_data.rb +73 -0
  321. data/lib/aws/simple_db/put_attributes.rb +60 -0
  322. data/lib/aws/simple_db/request.rb +23 -0
  323. data/lib/aws/simple_email_service.rb +426 -0
  324. data/lib/aws/simple_email_service/client.rb +286 -0
  325. data/lib/aws/simple_email_service/config.rb +19 -0
  326. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  327. data/lib/aws/simple_email_service/errors.rb +22 -0
  328. data/lib/aws/simple_email_service/identity.rb +91 -0
  329. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  330. data/lib/aws/simple_email_service/quotas.rb +64 -0
  331. data/lib/aws/simple_email_service/request.rb +29 -0
  332. data/lib/aws/simple_workflow.rb +226 -0
  333. data/lib/aws/simple_workflow/activity_task.rb +173 -0
  334. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  335. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  336. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  337. data/lib/aws/simple_workflow/client.rb +1434 -0
  338. data/lib/aws/simple_workflow/config.rb +18 -0
  339. data/lib/aws/simple_workflow/count.rb +49 -0
  340. data/lib/aws/simple_workflow/decision_task.rb +601 -0
  341. data/lib/aws/simple_workflow/decision_task_collection.rb +225 -0
  342. data/lib/aws/simple_workflow/domain.rb +122 -0
  343. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  344. data/lib/aws/simple_workflow/errors.rb +20 -0
  345. data/lib/aws/simple_workflow/history_event.rb +276 -0
  346. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  347. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  348. data/lib/aws/simple_workflow/request.rb +36 -0
  349. data/lib/aws/simple_workflow/resource.rb +94 -0
  350. data/lib/aws/simple_workflow/type.rb +89 -0
  351. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  352. data/lib/aws/simple_workflow/workflow_execution.rb +386 -0
  353. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  354. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  355. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  356. data/lib/aws/sns.rb +74 -0
  357. data/lib/aws/sns/client.rb +371 -0
  358. data/lib/aws/sns/config.rb +18 -0
  359. data/lib/aws/sns/errors.rb +22 -0
  360. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  361. data/lib/aws/sns/policy.rb +47 -0
  362. data/lib/aws/sns/request.rb +23 -0
  363. data/lib/aws/sns/subscription.rb +144 -0
  364. data/lib/aws/sns/subscription_collection.rb +80 -0
  365. data/lib/aws/sns/topic.rb +403 -0
  366. data/lib/aws/sns/topic_collection.rb +67 -0
  367. data/lib/aws/sns/topic_subscription_collection.rb +55 -0
  368. data/lib/aws/sqs.rb +79 -0
  369. data/lib/aws/sqs/client.rb +360 -0
  370. data/lib/aws/sqs/config.rb +18 -0
  371. data/lib/aws/sqs/errors.rb +101 -0
  372. data/lib/aws/sqs/policy.rb +48 -0
  373. data/lib/aws/sqs/queue.rb +725 -0
  374. data/lib/aws/sqs/queue_collection.rb +170 -0
  375. data/lib/aws/sqs/received_message.rb +181 -0
  376. data/lib/aws/sqs/received_sns_message.rb +112 -0
  377. data/lib/aws/sqs/request.rb +43 -0
  378. data/lib/aws/sts.rb +152 -0
  379. data/lib/aws/sts/client.rb +105 -0
  380. data/lib/aws/sts/config.rb +18 -0
  381. data/lib/aws/sts/errors.rb +22 -0
  382. data/lib/aws/sts/federated_session.rb +56 -0
  383. data/lib/aws/sts/policy.rb +30 -0
  384. data/lib/aws/sts/request.rb +29 -0
  385. data/lib/aws/sts/session.rb +48 -0
  386. data/lib/net/http/connection_pool.rb +210 -0
  387. data/lib/net/http/connection_pool/connection.rb +132 -0
  388. data/lib/net/http/connection_pool/session.rb +93 -0
  389. data/lib/user.rb +49 -0
  390. metadata +433 -0
@@ -0,0 +1,228 @@
1
+ # Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ class EC2
16
+
17
+ # Represents a collection of EC2 images. You can use this to
18
+ # find out which images exist with the characteristics you are
19
+ # interested in:
20
+ #
21
+ # ec2 = EC2.new
22
+ # all_images = ec2.images
23
+ # amazon_owned_images = all_images.with_owner('amazon')
24
+ # my_images = all_images.with_owner('self')
25
+ # tagged_amis = all_images.tagged('mytag')
26
+ # tagged_amis.map(&:id) # => ["ami-123", ...]
27
+ #
28
+ # You can also use it to create new images. For example:
29
+ #
30
+ # ec2.images.create(:instance_id => "i-123",
31
+ # :name => "my-image")
32
+ #
33
+ class ImageCollection < Collection
34
+
35
+ include TaggedCollection
36
+ include BlockDeviceMappings
37
+
38
+ # @private
39
+ def initialize(options = {})
40
+ @owners = options[:owners] || []
41
+ @executable_users = options[:executable_users] || []
42
+ super(options)
43
+ end
44
+
45
+ # @return [Image] image_id The ID of the image.
46
+ def [] image_id
47
+ super
48
+ end
49
+
50
+ # @return [ImageCollection] A new collection that only includes
51
+ # images owned by one or more of the specified AWS accounts.
52
+ # The IDs +:amazon+ and +:self+ can be used to include AMIs
53
+ # owned by Amazon or AMIs owned by you, respectively.
54
+ #
55
+ # @param [Array of Strings] owners The AWS account IDs by
56
+ # which the new collection should be filtered.
57
+ def with_owner(*owners)
58
+ collection_with(:owners => @owners + owners)
59
+ end
60
+
61
+ # @return [ImageCollection] A new collection that only includes
62
+ # images for which the specified user ID has explicit launch
63
+ # permissions. The user ID can be an AWS account ID, +:self+
64
+ # to return AMIs for which the sender of the request has
65
+ # explicit launch permissions, or +:all+ to return AMIs with
66
+ # public launch permissions.
67
+ #
68
+ # @param [Array of Strings] users The AWS account IDs by which
69
+ # the new collection should be filtered.
70
+ def executable_by(*users)
71
+ collection_with(:executable_users => @executable_users + users)
72
+ end
73
+
74
+ # @yield [image] Each image in the collection.
75
+ # @return [nil]
76
+ def each &block
77
+ opts = {}
78
+ opts[:owners] = @owners.map { |id| id.to_s } unless @owners.empty?
79
+ opts[:executable_users] = @executable_users.map { |id| id.to_s } unless
80
+ @executable_users.empty?
81
+ response = filtered_request(:describe_images, opts)
82
+ response.images_set.each do |i|
83
+ image = Image.new_from(:describe_images, i, i.image_id, :config => config)
84
+ yield(image)
85
+ end
86
+ nil
87
+ end
88
+
89
+ # Creates an AMI. There are several ways to create an AMI
90
+ # using this method; for detailed information on each strategy
91
+ # see {the EC2 Developer
92
+ # Guide}[http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/creating-an-ami.html].
93
+ #
94
+ # @param [Hash] options Options for creating the image.
95
+ # +:name+ is required, and you must also specify one of the
96
+ # following options:
97
+ #
98
+ # * +:instance_id+
99
+ # * +:image_location+
100
+ # * +:root_device_name+
101
+ #
102
+ # @option options [String] :instance_id The ID of a running
103
+ # instance. This instance will be rebooted unless
104
+ # +:no_reboot+ is set to +true+.
105
+ #
106
+ # @option options [String] :description A description of the
107
+ # new image.
108
+ #
109
+ # @option options [Boolean] :no_reboot By default this
110
+ # option is set to +false+, which means Amazon EC2
111
+ # attempts to cleanly shut down the instance before image
112
+ # creation and reboots the instance afterwards. When the
113
+ # option is set to +true+, Amazon EC2 does not shut down
114
+ # the instance before creating the image. When this option
115
+ # is used, file system integrity on the created image cannot
116
+ # be guaranteed.
117
+ #
118
+ # *Note*: This option is only valid when used with
119
+ # +:instance_id+.
120
+ #
121
+ # @option options [String] :image_location Full path to your
122
+ # AMI manifest in Amazon S3 storage. This must be of the
123
+ # form "bucket_name/key".
124
+ #
125
+ # @option options [String] :architecture The architecture of
126
+ # the image. Valid values:
127
+ #
128
+ # * +:i386+
129
+ # * +:x86_64+
130
+ #
131
+ # *Note*: This option is only valid with +:image_location+
132
+ # or +:root_device_name+
133
+ #
134
+ # @option options [String] :kernel_id The ID of the kernel to
135
+ # select.
136
+ #
137
+ # *Note*: This option is only valid with +:image_location+
138
+ # or +:root_device_name+
139
+ #
140
+ # @option options [Image] :kernel The kernel image to use.
141
+ # Equivalent to passing +:kernel_id+ with the ID of the
142
+ # image.
143
+ #
144
+ # *Note*: This option is only valid with +:image_location+
145
+ # or +:root_device_name+
146
+ #
147
+ # @option options [String] :ramdisk_id The ID of the RAM disk
148
+ # to select. Some kernels require additional drivers at
149
+ # launch. Check the kernel requirements for information on
150
+ # whether you need to specify a RAM disk. To find kernel
151
+ # requirements, refer to the Resource Center and search for
152
+ # the kernel ID.
153
+ #
154
+ # *Note*: This option is only valid with +:image_location+
155
+ # or +:root_device_name+
156
+ #
157
+ # @option options [Image] :ramdisk The ramdisk image to use.
158
+ # Equivalent to passing +:ramdisk_id+ with the ID of the
159
+ # image.
160
+ #
161
+ # *Note*: This option is only valid with +:image_location+
162
+ # or +:root_device_name+
163
+ #
164
+ # @option options [String] :root_device_name The root device
165
+ # name (e.g., /dev/sda1, or xvda).
166
+ #
167
+ # @option options [Hash] :block_device_mappings This must be a
168
+ # hash; the keys are device names to map, and the value for
169
+ # each entry determines how that device is mapped. Valid
170
+ # values include:
171
+ #
172
+ # * A string, which is interpreted as a virtual device name.
173
+ #
174
+ # * A hash with any of the following options. One of
175
+ # +:snapshot+, +:snapshot_id+ or +:volume_size+ is
176
+ # required.
177
+ #
178
+ # [:snapshot] A snapshot to use when creating the block
179
+ # device.
180
+ #
181
+ # [:snapshot_id] The ID of a snapshot to use when creating
182
+ # the block device.
183
+ #
184
+ # [:volume_size] The size of volume to create, in gigabytes.
185
+ #
186
+ # [:delete_on_termination] Setting this to true causes EC2
187
+ # to delete the volume when the
188
+ # instance is terminated.
189
+ # @return [Image]
190
+ def create options = {}
191
+ resp = case
192
+ when options[:instance_id]
193
+ client.create_image(options)
194
+ when options[:image_location] || options[:root_device_name]
195
+ if kernel = options.delete(:kernel)
196
+ options[:kernel_id] = kernel.id
197
+ end
198
+ if ramdisk = options.delete(:ramdisk)
199
+ options[:ramdisk_id] = ramdisk.id
200
+ end
201
+ options[:block_device_mappings] =
202
+ translate_block_device_mappings(options[:block_device_mappings]) if
203
+ options[:block_device_mappings]
204
+ client.register_image(options)
205
+ else
206
+ raise(ArgumentError,
207
+ "expected instance_id, image_location, " +
208
+ "or root_device_name")
209
+ end
210
+ Image.new(resp.image_id, :config => config)
211
+ end
212
+
213
+ # @private
214
+ protected
215
+ def member_class
216
+ Image
217
+ end
218
+
219
+ # @private
220
+ protected
221
+ def preserved_options
222
+ super.merge(:owners => @owners, :executable_users => @executable_users)
223
+ end
224
+
225
+ end
226
+
227
+ end
228
+ end
@@ -0,0 +1,669 @@
1
+ # Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ class EC2
16
+
17
+ # Represents an EC2 instance.
18
+ #
19
+ # @attr [String] user_data Arbitrary metadata that is available
20
+ # to the instance while it is running. This interface handles
21
+ # the details of encoding the user data for transmission; you
22
+ # should set the user data exactly as you want it to be made
23
+ # available to the instance.
24
+ #
25
+ # The instance must be in a stopped state to change user data;
26
+ # for example:
27
+ #
28
+ # i.user_data # => "HELLO"
29
+ # i.status # => :running
30
+ # i.user_data = "GOODBYE" # raises an exception
31
+ # i.stop; sleep 1 until i.status == :stopped
32
+ # i.user_data = "GOODBYE" # => "GOODBYE"
33
+ #
34
+ # @attr [String] instance_type The instance type,
35
+ # e.g. "m1.small". The instance must be in a stopped state to
36
+ # change the instance type.
37
+ #
38
+ # @attr [Boolean] api_termination_disabled True if the instance
39
+ # cannot be terminated using the {#terminate} method. This
40
+ # attribute can be changed at any time.
41
+ #
42
+ # @attr [String] instance_initiated_shutdown_behavior Valid
43
+ # values are:
44
+ #
45
+ # ["stop"] When the instance shuts down, it will go into a
46
+ # "stopped" state.
47
+ #
48
+ # ["terminate"] When the instance shuts down, it will be
49
+ # terminated.
50
+ #
51
+ # @attr_reader [String] image_id Image ID of the AMI used to
52
+ # launch the instance.
53
+ #
54
+ # @attr_reader [String] key_name The name of the key pair with
55
+ # which this instance was associated at launch.
56
+ #
57
+ # @attr [String] kernel_id The ID of the kernel that the image
58
+ # currently uses. The instance must be in a stopped state to
59
+ # change this attribute.
60
+ #
61
+ # @attr [String] ramdisk_id The ID of the RAM disk that the
62
+ # image currently uses. The instance must be in a stopped
63
+ # state to change this attribute.
64
+ #
65
+ # @attr_reader [Symbol] root_device_type The root device type
66
+ # used by the AMI. The AMI can use an Amazon EBS or instance
67
+ # store root device. Valid values:
68
+ # * +:ebs+
69
+ # * +:instance_store+
70
+ #
71
+ # @attr_reader [String] root_device_name The name of the root
72
+ # device.
73
+ #
74
+ # @attr_reader [String] private_dns_name The DNS name of the
75
+ # instance within the EC2 network.
76
+ #
77
+ # @attr_reader [String] dns_name The DNS name of the instance on
78
+ # the internet.
79
+ #
80
+ # @attr_reader [Integer] ami_launch_index The AMI launch index,
81
+ # which can be used to find this instance within the launch
82
+ # group.
83
+ #
84
+ # @attr_reader [String] private_ip_address The private IP
85
+ # address assigned to the instance.
86
+ #
87
+ # @attr_reader [String] ip_address The IP address of the
88
+ # instance.
89
+ #
90
+ # @attr_reader [Symbol] status The instance status. Valid values are:
91
+ # * +:pending+
92
+ # * +:running+
93
+ # * +:shutting_down+
94
+ # * +:terminated+
95
+ # * +:stopping+
96
+ # * +:stopped+
97
+ #
98
+ # @attr_reader [Integer] status_code The numeric instance status code.
99
+ #
100
+ # @attr_reader [Symbol] architecture The architecture of the
101
+ # image.
102
+ #
103
+ # @attr_reader [Symbol] virtualization_type The instance's
104
+ # virtualization type. Valid values:
105
+ # * +:paravirtual+
106
+ # * +:hvm+
107
+ #
108
+ # @attr_reader [String] reservation_id The ID of the reservation
109
+ # in which this instance was launched.
110
+ #
111
+ # @attr_reader [String] requester_id ID of the requester that
112
+ # launched the instance on your behalf (e.g., AWS Management
113
+ # Console, Auto Scaling).
114
+ #
115
+ # @attr_reader [String] owner_id ID of the AWS account that owns
116
+ # the reservation in which the instance was launched.
117
+ #
118
+ # @attr_reader [Symbol] monitoring The status of CloudWatch
119
+ # monitoring for the instance. Valid values:
120
+ # * +:enabled+
121
+ # * +:disabled+
122
+ # * +:pending+
123
+ #
124
+ # @attr_reader [String] state_transition_reason A string
125
+ # describing the reason for the last state transition.
126
+ #
127
+ # @attr_reader [Time] launch_time The time at which the instance
128
+ # was launched.
129
+ #
130
+ # @attr_reader [String] platform A string describing the
131
+ # platform of the image (e.g. "windows").
132
+ #
133
+ # @attr_reader [Symbol] hypervisor The instance's hypervisor
134
+ # type. Valid values:
135
+ # * +:ovm+
136
+ # * +:xen+
137
+ #
138
+ # @attr_reader [String] client_token Idempotency token you
139
+ # provided when you launched the instance.
140
+ #
141
+ # @attr_reader [String,nil] vpc_id Instances launched in a VPC have
142
+ # a vpc_id. Normal EC2 instances return nil.
143
+ #
144
+ # @attr_reader [String,nil] subnet_id Instances launched in a VPC have
145
+ # a subnet_id. Normal EC2 instances return nil.
146
+ #
147
+ class Instance < Resource
148
+
149
+ include TaggedItem
150
+
151
+ # Creates an object that represents the instance with the
152
+ # given ID. It's usually easier to get an instance of this
153
+ # class by calling {InstanceCollection#[]} or
154
+ # {InstanceCollection#each}.
155
+ def initialize(instance_id, opts = {})
156
+ super
157
+ @id = instance_id
158
+ end
159
+
160
+ # @return [String] Returns the instance id.
161
+ attr_reader :id
162
+ alias_method :instance_id, :id
163
+
164
+ # @private
165
+ def self.reservation_attributes
166
+ @reservation_attributes ||= {}
167
+ end
168
+
169
+ # @private
170
+ def self.reservation_attribute name, options = {}, &block
171
+ attr = attribute(name, options, &block)
172
+ reservation_attributes[attr.name] = attr
173
+ end
174
+
175
+ # @private
176
+ def self.describe_call_attributes
177
+ @describe_call_attributes ||= {}
178
+ end
179
+
180
+ # @private
181
+ def self.mutable_describe_attributes
182
+ @mutable_describe_attributes ||= {}
183
+ end
184
+
185
+ # @private
186
+ def self.describe_call_attribute name, options = {}, &block
187
+ attr = attribute(name, options, &block)
188
+ describe_call_attributes[attr.name] = attr
189
+ end
190
+
191
+ # @private
192
+ def self.mutable_describe_call_attribute name, options = {}, &block
193
+ attr = mutable_attribute(name, options, &block)
194
+ describe_call_attributes[attr.name] = attr
195
+ end
196
+
197
+ # @private
198
+ def self.mutable_describe_attribute name, options = {}, &block
199
+ attr = mutable_attribute(name, options, &block)
200
+ mutable_describe_attributes[attr.name] = attr
201
+ end
202
+
203
+ reservation_attribute :reservation_id, :static => true
204
+
205
+ reservation_attribute :owner_id, :static => true
206
+
207
+ reservation_attribute :requester_id, :static => true
208
+
209
+ describe_call_attribute :private_dns_name
210
+
211
+ describe_call_attribute :dns_name
212
+
213
+ alias_method :public_dns_name, :dns_name
214
+
215
+ describe_call_attribute :product_codes, :static => true
216
+
217
+ describe_call_attribute :ami_launch_index, :static => true
218
+
219
+ describe_call_attribute :monitoring do
220
+ translates_output {|v| v.state.to_sym }
221
+ end
222
+
223
+ describe_call_attribute :private_ip_address
224
+
225
+ describe_call_attribute :ip_address
226
+
227
+ alias_method :public_ip_address, :ip_address
228
+
229
+ describe_call_attribute :architecture, :to_sym => true, :static => true
230
+
231
+ describe_call_attribute :root_device_type, :to_sym => true, :static => true
232
+
233
+ describe_call_attribute :root_device_name, :static => true
234
+
235
+ describe_call_attribute :block_device_mapping
236
+
237
+ protected :block_device_mapping
238
+
239
+ describe_call_attribute :instance_lifecycle, :to_sym => true
240
+
241
+ describe_call_attribute :virtualization_type, :to_sym => true, :static => true
242
+
243
+ describe_call_attribute :hypervisor, :to_sym => true, :static => true
244
+
245
+ describe_call_attribute :placement, :static => true
246
+
247
+ describe_call_attribute :state_transition_reason, :get_as => :reason
248
+
249
+ describe_call_attribute :launch_time, :static => true
250
+
251
+ describe_call_attribute :platform, :static => true
252
+
253
+ describe_call_attribute :client_token
254
+
255
+ describe_call_attribute :image_id
256
+
257
+ describe_call_attribute :key_name, :static => true
258
+
259
+ describe_call_attribute :vpc_id, :static => true
260
+
261
+ describe_call_attribute :subnet_id, :static => true
262
+
263
+ attribute :status do
264
+ translates_output{|state| state.name.tr("-","_").to_sym }
265
+ end
266
+
267
+ attribute :status_code do
268
+ translates_output{|state| state.code }
269
+ end
270
+
271
+ mutable_describe_call_attribute :instance_type
272
+
273
+ mutable_describe_call_attribute :kernel_id, :set_as => :kernel
274
+
275
+ mutable_describe_call_attribute :ramdisk_id, :set_as => :ramdisk
276
+
277
+ mutable_describe_attribute :source_dest_check do
278
+ translates_output{|bool| bool == "true" }
279
+ end
280
+
281
+ alias_method :source_dest_check?, :source_dest_check
282
+
283
+ mutable_describe_call_attribute :group_set
284
+
285
+ describe_call_attribute :network_interface_set
286
+
287
+ mutable_describe_attribute(:user_data) do
288
+ translates_output {|v| Base64.decode64(v) if v }
289
+ translates_input {|v| Base64.encode64(v).strip }
290
+ end
291
+
292
+ mutable_describe_attribute :api_termination_disabled?,
293
+ :as => :disable_api_termination
294
+
295
+ mutable_describe_attribute :instance_initiated_shutdown_behavior
296
+
297
+ provider(:describe_instances) do |provider|
298
+ provider.find {|resp| resp.reservation_index[id] }
299
+ provider.provides *reservation_attributes.keys
300
+ end
301
+
302
+ provider(:describe_instances) do |provider|
303
+ provider.find {|resp| resp.instance_index[id] }
304
+ provider.provides *describe_call_attributes.keys
305
+ provider.provides :status, :get_as => :instance_state
306
+ provider.provides :status_code, :get_as => :instance_state
307
+ end
308
+
309
+ provider(:run_instances) do |provider|
310
+ provider.find {|resp| resp.instances_set.find{|i| i.instance_id == id } }
311
+ provider.provides *describe_call_attributes.keys
312
+ provider.provides :status, :get_as => :instance_state
313
+ provider.provides :status_code, :get_as => :instance_state
314
+ end
315
+
316
+ provider(:run_instances) do |provider|
317
+ provider.find {|resp| resp if resp.instances_set.find{|i| i.instance_id == id } }
318
+ provider.provides *reservation_attributes.keys
319
+ end
320
+
321
+ # These are the few attributes that are only returned by
322
+ # :desribe_instance_attribute and are *NOT* returned by
323
+ # :describe_instances. To make matters worse, only one of
324
+ # them is returned per :describe_instance_attribute call.
325
+ mutable_describe_attributes.values.each do |attr|
326
+
327
+ attr_opt_name = Core::Inflection.class_name(attr.get_as.to_s)
328
+ attr_opt_name = attr_opt_name[0,1].downcase + attr_opt_name[1..-1]
329
+
330
+ provider(:describe_instance_attribute) do |provider|
331
+ provider.find do |resp|
332
+ if
333
+ resp.request_options[:instance_id] == id and
334
+ resp.request_options[:attribute] == attr_opt_name
335
+ then
336
+ return resp
337
+ end
338
+ end
339
+ provider.provides(attr.name, :value_wrapped => true)
340
+ end
341
+
342
+ end
343
+
344
+ provider(:terminate_instances, :start_instances, :stop_instances) do |provider|
345
+ provider.find do |resp|
346
+ resp.instances_set.find {|i| i.instance_id == id }
347
+ end
348
+ provider.provides :status, :get_as => :current_state
349
+ provider.provides :status_code, :get_as => :current_state
350
+ end
351
+
352
+ provider(:monitor_instances, :unmonitor_instances) do |provider|
353
+ provider.find do |resp|
354
+ resp.instances_set.find {|i| i.instance_id == id }
355
+ end
356
+ provider.provides :monitoring
357
+ end
358
+
359
+ # @return [Boolean] Returns true if this is an EC2 VPC instance.
360
+ def vpc?
361
+ !!vpc_id
362
+ end
363
+
364
+ # @return [VPC,nil] Returns the VPC this instance was launched in.
365
+ # If this instance was not launched inside a VPC, nil is returned.
366
+ def vpc
367
+ if vpc_id
368
+ VPC.new(vpc_id, :config => config)
369
+ end
370
+ end
371
+
372
+ # @return [Subnet,nil] Returns the VPC subnet this instance was
373
+ # launched in. Returns nil if this was not launched in a VPC.
374
+ def subnet
375
+ if subnet_id
376
+ Subnet.new(subnet_id, :vpc_id => vpc_id, :config => config)
377
+ end
378
+ end
379
+
380
+ # @return [Array<NetworkInterface>] Returns a list of elastic network
381
+ # interfaces attached to this instance (VPC only). Non-vpc
382
+ # instance may not have attached network interfaces.
383
+ def network_interfaces
384
+ network_interface_set.collect do |ni|
385
+ NetworkInterface.new_from(:describe_network_interfaces, ni,
386
+ ni.network_interface_id, :config => config)
387
+ end
388
+ end
389
+
390
+ # Attaches a network interface to this instance (VPC only).
391
+ #
392
+ # @param [NetworkInterface,String] network_interface A network interface
393
+ # (or network interface id string) to attach to this vpc instance.
394
+ #
395
+ # @param [Hash] options
396
+ #
397
+ # @option (see NetworkInterface#attach)
398
+ #
399
+ # @return [nil]
400
+ #
401
+ def attach_network_interface network_interface, options = {}
402
+ if network_interface.is_a?(NetworkInterface)
403
+ network_interface.attach(self, options)
404
+ else
405
+ i = NetworkInterface.new(network_interface, :config => config)
406
+ i.attach(self, options)
407
+ end
408
+ nil
409
+ end
410
+
411
+ # @return [Array<SecurityGroup>] Returns a list of security
412
+ # groups the instance belongs to.
413
+ def security_groups
414
+ (group_set || []).collect do |g|
415
+ SecurityGroup.new(g.group_id, :name => g.group_name, :config => config)
416
+ end
417
+ end
418
+
419
+ alias_method :groups, :security_groups
420
+
421
+ # @return [Hash<String,Attachment>] Returns a hash of device mappings.
422
+ # The keys are device name strings (e.g. '/dev/sda') and the values
423
+ # are {Attachment} objects.
424
+ def block_device_mappings
425
+ (block_device_mapping || []).inject({}) do |m, mapping|
426
+ device = mapping.device_name
427
+ volume = Volume.new(mapping.ebs.volume_id, :config => config)
428
+ attachment = Attachment.new(volume, self, device, :config => config)
429
+ m[device] = attachment
430
+ m
431
+ end
432
+ end
433
+
434
+ # Enables monitoring for this instance.
435
+ # @return [nil]
436
+ def enable_monitoring
437
+ client.monitor_instances(:instance_ids => [id])
438
+ nil
439
+ end
440
+
441
+ # Disables monitoring for this instance.
442
+ # @return [nil]
443
+ def disable_monitoring
444
+ client.unmonitor_instances(:instance_ids => [id])
445
+ nil
446
+ end
447
+
448
+ # Enables or disables monitoring for this instance.
449
+ # @param [Boolean] state A true or false value. Enables monintoring
450
+ # for a true value, disables it for a false value.
451
+ def monitoring_enabled= state
452
+ state ? enable_monitoring : disable_monitoring
453
+ end
454
+
455
+ # @return [Booelan] Returns +true+ if CloudWatch monitoring is
456
+ # enabled for this instance.
457
+ def monitoring_enabled?
458
+ monitoring == :enabled
459
+ end
460
+
461
+ # @return [Boolean] true if the instance is a Spot instance.
462
+ def spot_instance?
463
+ instance_lifecycle == :spot
464
+ end
465
+
466
+ # @return [String] The availability zone where the instance is
467
+ # running.
468
+ def availability_zone
469
+ if p = placement
470
+ p.availability_zone
471
+ end
472
+ end
473
+
474
+ # @return [Boolean] Returns true if the instance has dedicated tenancy.
475
+ # This will be false for all non-VPC instances. Dedicated Tenancy
476
+ # comes at extra cost.
477
+ def dedicated_tenancy?
478
+ if p = placement
479
+ p.tenancy == 'dedicated'
480
+ else
481
+ false
482
+ end
483
+ end
484
+
485
+ # @return [Image] The AMI used to launch the instance.
486
+ def image
487
+ Image.new(image_id, :config => config)
488
+ end
489
+
490
+ # @return [KeyPair] The key pair with which this instance was
491
+ # associated at launch.
492
+ def key_pair
493
+ KeyPair.new(key_name, :config => config) if key_name
494
+ end
495
+
496
+ # Creates an AMI from this instance.
497
+ #
498
+ # @param [String] name A name for the new image you're
499
+ # creating. Constraints: 3-128 alphanumeric characters,
500
+ # parenthesis (()), commas (,), slashes (/), dashes (-), or
501
+ # underscores(_)
502
+ #
503
+ # @param [Hash] options Additional options for creating the
504
+ # image.
505
+ #
506
+ # @option options [String] :description A description of the
507
+ # new image.
508
+ #
509
+ # @option options [Boolean] :no_reboot By default this
510
+ # option is set to +false+, which means Amazon EC2
511
+ # attempts to cleanly shut down the instance before image
512
+ # creation and reboots the instance afterwards. When the
513
+ # option is set to +true+, Amazon EC2 does not shut down
514
+ # the instance before creating the image. When this option
515
+ # is used, file system integrity on the created image cannot
516
+ # be guaranteed.
517
+ #
518
+ # @return [Image] The newly created image.
519
+ def create_image name, options = {}
520
+ images = ImageCollection.new(:config => config)
521
+ images.create(options.merge(:instance_id => id, :name => name))
522
+ end
523
+
524
+ # Retrieves the console output for the instance.
525
+ #
526
+ # @return [String] the console output.
527
+ def console_output
528
+ output = client.get_console_output(:instance_id => self.id).output
529
+ Base64.decode64(output) if output
530
+ end
531
+
532
+ # Associates the elastic IP address with this instance.
533
+ #
534
+ # @overload associate_elastic_ip(elastic_ip)
535
+ # @param [ElasticIp,String] elastic_ip An Elastic ip address
536
+ # (VPC or non-VPC) or a public ip address string (non-VPC only).
537
+ #
538
+ # @overload associate_elastic_ip(allocation_id)
539
+ # @param [String] allocation_id The allocation id of a
540
+ # VPC elastic ip address.
541
+ #
542
+ # @return [nil]
543
+ #
544
+ def associate_elastic_ip elastic_ip
545
+
546
+ client_opts = {}
547
+ client_opts[:instance_id] = self.id
548
+
549
+ if vpc?
550
+ client_opts[:allocation_id] = elastic_ip.is_a?(ElasticIp) ?
551
+ elastic_ip.allocation_id :
552
+ elastic_ip.to_s
553
+ else
554
+ client_opts[:public_ip] = elastic_ip.to_s
555
+ end
556
+
557
+ client.associate_address(client_opts)
558
+ nil
559
+
560
+ end
561
+
562
+ alias_method :ip_address=, :associate_elastic_ip
563
+
564
+ # Disassociates an attached elastic IP address from this instance.
565
+ # Raises an exception if there is no elastic IP address associated
566
+ # with this instance.
567
+ def disassociate_elastic_ip
568
+ if ip = self.elastic_ip
569
+ ip.disassociate
570
+ else
571
+ raise "instance #{id} does not have an associated elastic ip"
572
+ end
573
+ end
574
+
575
+ # @return [ElasticIp,nil] Returns an elastic IP address if one
576
+ # is associated with this instance, nil otherwise.
577
+ def elastic_ip
578
+ ips = ElasticIpCollection.new(:config => config)
579
+ ips.filter('instance-id', id).first
580
+ end
581
+
582
+ # @return [Boolean] Returns true if an elastic IP address is
583
+ # associated with this instance, false otherwise.
584
+ def has_elastic_ip?
585
+ !elastic_ip.nil?
586
+ end
587
+
588
+ # @return [Boolean] Returns true if the instance exists according to
589
+ # EC2.
590
+ def exists?
591
+ client.describe_instances(:filters => [
592
+ { :name => "instance-id", :values => [id] }
593
+ ]).instance_index.key?(id)
594
+ end
595
+
596
+ # Resets the kernel to its default value.
597
+ def reset_kernel_id
598
+ client.reset_instance_attribute(
599
+ :instance_id => id, :attribute => "kernel").return
600
+ end
601
+
602
+ # Resets the RAM disk to its default value.
603
+ def reset_ramdisk_id
604
+ client.reset_instance_attribute(
605
+ :instance_id => id, :attribute => "ramdisk").return
606
+ end
607
+
608
+ # Terminates the instance.
609
+ # @return [nil]
610
+ def terminate
611
+ instance_action :terminate
612
+ end
613
+ alias_method :delete, :terminate
614
+
615
+ # Reboots the instance.
616
+ # @return [nil]
617
+ def reboot
618
+ instance_action :reboot
619
+ end
620
+
621
+ # Starts the instance, assuming it is in a stopped state.
622
+ # @see stop
623
+ # @return [nil]
624
+ def start
625
+ instance_action :start
626
+ end
627
+
628
+ # Stops the instance, eventually putting it into a stopped state.
629
+ # @return [nil]
630
+ def stop
631
+ instance_action :stop
632
+ end
633
+
634
+ # @private
635
+ protected
636
+ def find_in_response resp
637
+ resp.instance_index[id]
638
+ end
639
+
640
+ # @private
641
+ protected
642
+ def instance_action name
643
+ client.send("#{name}_instances", :instance_ids => [id])
644
+ nil
645
+ end
646
+
647
+ protected
648
+ def get_resource attribute
649
+ if self.class.mutable_describe_attributes.include?(attribute.name)
650
+ describe_attribute_call(attribute)
651
+ else
652
+ describe_call
653
+ end
654
+ end
655
+
656
+ protected
657
+ def attributes_from_response_object(obj)
658
+ if atts = super(obj)
659
+ if obj[:instance_state]
660
+ atts[:status] = obj[:instance_state].name.tr("-","_").to_sym
661
+ end
662
+ atts
663
+ end
664
+ end
665
+
666
+ end
667
+
668
+ end
669
+ end