aws-sdk-v1 1.52.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 (560) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +7 -0
  3. data/LICENSE.txt +12 -0
  4. data/README.md +337 -0
  5. data/bin/aws-rb +179 -0
  6. data/ca-bundle.crt +3554 -0
  7. data/endpoints.json +1671 -0
  8. data/lib/aws-sdk-v1.rb +2 -0
  9. data/lib/aws-sdk.rb +1 -0
  10. data/lib/aws.rb +14 -0
  11. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +1070 -0
  12. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +372 -0
  13. data/lib/aws/api_config/CloudFront-2013-05-12.yml +2448 -0
  14. data/lib/aws/api_config/CloudFront-2013-08-26.yml +2599 -0
  15. data/lib/aws/api_config/CloudFront-2013-09-27.yml +2765 -0
  16. data/lib/aws/api_config/CloudFront-2013-11-11.yml +2886 -0
  17. data/lib/aws/api_config/CloudFront-2013-11-22.yml +2918 -0
  18. data/lib/aws/api_config/CloudFront-2014-01-31.yml +2934 -0
  19. data/lib/aws/api_config/CloudFront-2014-05-31.yml +3100 -0
  20. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  21. data/lib/aws/api_config/CloudSearch-2013-01-01.yml +1164 -0
  22. data/lib/aws/api_config/CloudTrail-2013-11-01.yml +130 -0
  23. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  24. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  25. data/lib/aws/api_config/DirectConnect-2012-10-25.yml +735 -0
  26. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1168 -0
  27. data/lib/aws/api_config/DynamoDB-2012-08-10.yml +2105 -0
  28. data/lib/aws/api_config/EC2-2013-08-15.yml +4708 -0
  29. data/lib/aws/api_config/EC2-2013-10-01.yml +4726 -0
  30. data/lib/aws/api_config/EC2-2013-10-15.yml +4651 -0
  31. data/lib/aws/api_config/EC2-2014-02-01.yml +4755 -0
  32. data/lib/aws/api_config/EC2-2014-05-01.yml +4812 -0
  33. data/lib/aws/api_config/ELB-2012-06-01.yml +766 -0
  34. data/lib/aws/api_config/EMR-2009-03-31.yml +972 -0
  35. data/lib/aws/api_config/ElastiCache-2013-06-15.yml +1188 -0
  36. data/lib/aws/api_config/ElastiCache-2014-03-24.yml +1375 -0
  37. data/lib/aws/api_config/ElastiCache-2014-07-15.yml +1385 -0
  38. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +854 -0
  39. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +3082 -0
  40. data/lib/aws/api_config/Glacier-2012-06-01.yml +649 -0
  41. data/lib/aws/api_config/IAM-2010-05-08.yml +1339 -0
  42. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  43. data/lib/aws/api_config/Kinesis-2013-12-02.yml +201 -0
  44. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +2025 -0
  45. data/lib/aws/api_config/RDS-2013-05-15.yml +2464 -0
  46. data/lib/aws/api_config/RDS-2013-09-09.yml +2640 -0
  47. data/lib/aws/api_config/Redshift-2012-12-01.yml +2161 -0
  48. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  49. data/lib/aws/api_config/Route53-2013-04-01.yml +889 -0
  50. data/lib/aws/api_config/SNS-2010-03-31.yml +448 -0
  51. data/lib/aws/api_config/SQS-2012-11-05.yml +404 -0
  52. data/lib/aws/api_config/STS-2011-06-15.yml +151 -0
  53. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  54. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  55. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2388 -0
  56. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  57. data/lib/aws/api_config/StorageGateway-2013-06-30.yml +1025 -0
  58. data/lib/aws/api_config/Support-2013-04-15.yml +489 -0
  59. data/lib/aws/auto_scaling.rb +163 -0
  60. data/lib/aws/auto_scaling/activity.rb +102 -0
  61. data/lib/aws/auto_scaling/activity_collection.rb +81 -0
  62. data/lib/aws/auto_scaling/client.rb +48 -0
  63. data/lib/aws/auto_scaling/config.rb +18 -0
  64. data/lib/aws/auto_scaling/errors.rb +22 -0
  65. data/lib/aws/auto_scaling/group.rb +421 -0
  66. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  67. data/lib/aws/auto_scaling/group_options.rb +155 -0
  68. data/lib/aws/auto_scaling/instance.rb +192 -0
  69. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  70. data/lib/aws/auto_scaling/launch_configuration.rb +162 -0
  71. data/lib/aws/auto_scaling/launch_configuration_collection.rb +160 -0
  72. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  73. data/lib/aws/auto_scaling/notification_configuration_collection.rb +183 -0
  74. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  75. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  76. data/lib/aws/auto_scaling/scaling_policy_options.rb +65 -0
  77. data/lib/aws/auto_scaling/scheduled_action.rb +141 -0
  78. data/lib/aws/auto_scaling/scheduled_action_collection.rb +202 -0
  79. data/lib/aws/auto_scaling/tag.rb +59 -0
  80. data/lib/aws/auto_scaling/tag_collection.rb +114 -0
  81. data/lib/aws/cloud_formation.rb +272 -0
  82. data/lib/aws/cloud_formation/client.rb +48 -0
  83. data/lib/aws/cloud_formation/config.rb +18 -0
  84. data/lib/aws/cloud_formation/errors.rb +22 -0
  85. data/lib/aws/cloud_formation/stack.rb +266 -0
  86. data/lib/aws/cloud_formation/stack_collection.rb +232 -0
  87. data/lib/aws/cloud_formation/stack_event.rb +73 -0
  88. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  89. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  90. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  91. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  92. data/lib/aws/cloud_formation/stack_resource_collection.rb +83 -0
  93. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  94. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  95. data/lib/aws/cloud_front.rb +72 -0
  96. data/lib/aws/cloud_front/client.rb +57 -0
  97. data/lib/aws/cloud_front/config.rb +18 -0
  98. data/lib/aws/cloud_front/errors.rb +22 -0
  99. data/lib/aws/cloud_search.rb +73 -0
  100. data/lib/aws/cloud_search/client.rb +40 -0
  101. data/lib/aws/cloud_search/config.rb +18 -0
  102. data/lib/aws/cloud_search/errors.rb +22 -0
  103. data/lib/aws/cloud_trail.rb +72 -0
  104. data/lib/aws/cloud_trail/client.rb +35 -0
  105. data/lib/aws/cloud_trail/config.rb +18 -0
  106. data/lib/aws/cloud_trail/errors.rb +22 -0
  107. data/lib/aws/cloud_watch.rb +118 -0
  108. data/lib/aws/cloud_watch/alarm.rb +293 -0
  109. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  110. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  111. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  112. data/lib/aws/cloud_watch/client.rb +40 -0
  113. data/lib/aws/cloud_watch/config.rb +18 -0
  114. data/lib/aws/cloud_watch/errors.rb +22 -0
  115. data/lib/aws/cloud_watch/metric.rb +135 -0
  116. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  117. data/lib/aws/cloud_watch/metric_collection.rb +129 -0
  118. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  119. data/lib/aws/core.rb +716 -0
  120. data/lib/aws/core/async_handle.rb +90 -0
  121. data/lib/aws/core/cacheable.rb +77 -0
  122. data/lib/aws/core/client.rb +787 -0
  123. data/lib/aws/core/collection.rb +263 -0
  124. data/lib/aws/core/collection/simple.rb +82 -0
  125. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  126. data/lib/aws/core/collection/with_next_token.rb +97 -0
  127. data/lib/aws/core/configuration.rb +542 -0
  128. data/lib/aws/core/credential_providers.rb +639 -0
  129. data/lib/aws/core/data.rb +247 -0
  130. data/lib/aws/core/deprecations.rb +84 -0
  131. data/lib/aws/core/endpoints.rb +37 -0
  132. data/lib/aws/core/http/connection_pool.rb +369 -0
  133. data/lib/aws/core/http/curb_handler.rb +148 -0
  134. data/lib/aws/core/http/handler.rb +89 -0
  135. data/lib/aws/core/http/net_http_handler.rb +144 -0
  136. data/lib/aws/core/http/patch.rb +102 -0
  137. data/lib/aws/core/http/request.rb +259 -0
  138. data/lib/aws/core/http/response.rb +81 -0
  139. data/lib/aws/core/indifferent_hash.rb +88 -0
  140. data/lib/aws/core/inflection.rb +56 -0
  141. data/lib/aws/core/ini_parser.rb +42 -0
  142. data/lib/aws/core/json_client.rb +47 -0
  143. data/lib/aws/core/json_parser.rb +76 -0
  144. data/lib/aws/core/json_request_builder.rb +35 -0
  145. data/lib/aws/core/json_response_parser.rb +79 -0
  146. data/lib/aws/core/lazy_error_classes.rb +108 -0
  147. data/lib/aws/core/log_formatter.rb +428 -0
  148. data/lib/aws/core/managed_file.rb +32 -0
  149. data/lib/aws/core/meta_utils.rb +45 -0
  150. data/lib/aws/core/model.rb +62 -0
  151. data/lib/aws/core/naming.rb +30 -0
  152. data/lib/aws/core/option_grammar.rb +738 -0
  153. data/lib/aws/core/options/json_serializer.rb +82 -0
  154. data/lib/aws/core/options/validator.rb +155 -0
  155. data/lib/aws/core/options/xml_serializer.rb +118 -0
  156. data/lib/aws/core/page_result.rb +75 -0
  157. data/lib/aws/core/policy.rb +941 -0
  158. data/lib/aws/core/query_client.rb +41 -0
  159. data/lib/aws/core/query_error_parser.rb +24 -0
  160. data/lib/aws/core/query_request_builder.rb +47 -0
  161. data/lib/aws/core/query_response_parser.rb +35 -0
  162. data/lib/aws/core/region.rb +85 -0
  163. data/lib/aws/core/region_collection.rb +80 -0
  164. data/lib/aws/core/resource.rb +413 -0
  165. data/lib/aws/core/resource_cache.rb +40 -0
  166. data/lib/aws/core/response.rb +215 -0
  167. data/lib/aws/core/response_cache.rb +50 -0
  168. data/lib/aws/core/rest_error_parser.rb +24 -0
  169. data/lib/aws/core/rest_json_client.rb +40 -0
  170. data/lib/aws/core/rest_request_builder.rb +154 -0
  171. data/lib/aws/core/rest_response_parser.rb +66 -0
  172. data/lib/aws/core/rest_xml_client.rb +47 -0
  173. data/lib/aws/core/service_interface.rb +83 -0
  174. data/lib/aws/core/signers/base.rb +46 -0
  175. data/lib/aws/core/signers/cloud_front.rb +56 -0
  176. data/lib/aws/core/signers/s3.rb +159 -0
  177. data/lib/aws/core/signers/version_2.rb +72 -0
  178. data/lib/aws/core/signers/version_3.rb +86 -0
  179. data/lib/aws/core/signers/version_3_https.rb +61 -0
  180. data/lib/aws/core/signers/version_4.rb +228 -0
  181. data/lib/aws/core/signers/version_4/chunk_signed_stream.rb +191 -0
  182. data/lib/aws/core/uri_escape.rb +44 -0
  183. data/lib/aws/core/xml/frame.rb +245 -0
  184. data/lib/aws/core/xml/frame_stack.rb +85 -0
  185. data/lib/aws/core/xml/grammar.rb +307 -0
  186. data/lib/aws/core/xml/parser.rb +70 -0
  187. data/lib/aws/core/xml/root_frame.rb +65 -0
  188. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  189. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +56 -0
  190. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  191. data/lib/aws/core/xml/sax_handlers/rexml.rb +47 -0
  192. data/lib/aws/core/xml/stub.rb +123 -0
  193. data/lib/aws/data_pipeline.rb +72 -0
  194. data/lib/aws/data_pipeline/client.rb +36 -0
  195. data/lib/aws/data_pipeline/config.rb +18 -0
  196. data/lib/aws/data_pipeline/errors.rb +20 -0
  197. data/lib/aws/direct_connect.rb +73 -0
  198. data/lib/aws/direct_connect/client.rb +36 -0
  199. data/lib/aws/direct_connect/config.rb +18 -0
  200. data/lib/aws/direct_connect/errors.rb +22 -0
  201. data/lib/aws/dynamo_db.rb +230 -0
  202. data/lib/aws/dynamo_db/attribute_collection.rb +456 -0
  203. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  204. data/lib/aws/dynamo_db/batch_write.rb +254 -0
  205. data/lib/aws/dynamo_db/binary.rb +35 -0
  206. data/lib/aws/dynamo_db/client.rb +129 -0
  207. data/lib/aws/dynamo_db/client/v20111205.rb +1266 -0
  208. data/lib/aws/dynamo_db/client/v20120810.rb +1409 -0
  209. data/lib/aws/dynamo_db/client_v2.rb +44 -0
  210. data/lib/aws/dynamo_db/config.rb +24 -0
  211. data/lib/aws/dynamo_db/errors.rb +20 -0
  212. data/lib/aws/dynamo_db/expectations.rb +40 -0
  213. data/lib/aws/dynamo_db/item.rb +133 -0
  214. data/lib/aws/dynamo_db/item_collection.rb +856 -0
  215. data/lib/aws/dynamo_db/item_data.rb +31 -0
  216. data/lib/aws/dynamo_db/keys.rb +41 -0
  217. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  218. data/lib/aws/dynamo_db/resource.rb +33 -0
  219. data/lib/aws/dynamo_db/table.rb +492 -0
  220. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  221. data/lib/aws/dynamo_db/types.rb +111 -0
  222. data/lib/aws/ec2.rb +428 -0
  223. data/lib/aws/ec2/attachment.rb +135 -0
  224. data/lib/aws/ec2/attachment_collection.rb +54 -0
  225. data/lib/aws/ec2/availability_zone.rb +86 -0
  226. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  227. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  228. data/lib/aws/ec2/client.rb +154 -0
  229. data/lib/aws/ec2/collection.rb +36 -0
  230. data/lib/aws/ec2/config.rb +21 -0
  231. data/lib/aws/ec2/customer_gateway.rb +90 -0
  232. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  233. data/lib/aws/ec2/dhcp_options.rb +106 -0
  234. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  235. data/lib/aws/ec2/elastic_ip.rb +209 -0
  236. data/lib/aws/ec2/elastic_ip_collection.rb +93 -0
  237. data/lib/aws/ec2/errors.rb +32 -0
  238. data/lib/aws/ec2/export_task.rb +120 -0
  239. data/lib/aws/ec2/export_task_collection.rb +67 -0
  240. data/lib/aws/ec2/filtered_collection.rb +87 -0
  241. data/lib/aws/ec2/has_permissions.rb +44 -0
  242. data/lib/aws/ec2/image.rb +270 -0
  243. data/lib/aws/ec2/image_collection.rb +219 -0
  244. data/lib/aws/ec2/instance.rb +803 -0
  245. data/lib/aws/ec2/instance_collection.rb +402 -0
  246. data/lib/aws/ec2/internet_gateway.rb +122 -0
  247. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  248. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  249. data/lib/aws/ec2/key_pair.rb +82 -0
  250. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  251. data/lib/aws/ec2/network_acl.rb +256 -0
  252. data/lib/aws/ec2/network_acl/association.rb +56 -0
  253. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  254. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  255. data/lib/aws/ec2/network_interface.rb +237 -0
  256. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  257. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  258. data/lib/aws/ec2/permission_collection.rb +174 -0
  259. data/lib/aws/ec2/region.rb +106 -0
  260. data/lib/aws/ec2/region_collection.rb +51 -0
  261. data/lib/aws/ec2/reserved_instances.rb +57 -0
  262. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  263. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  264. data/lib/aws/ec2/reserved_instances_offering_collection.rb +45 -0
  265. data/lib/aws/ec2/resource.rb +161 -0
  266. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  267. data/lib/aws/ec2/route_table.rb +205 -0
  268. data/lib/aws/ec2/route_table/association.rb +119 -0
  269. data/lib/aws/ec2/route_table/route.rb +119 -0
  270. data/lib/aws/ec2/route_table_collection.rb +72 -0
  271. data/lib/aws/ec2/security_group.rb +482 -0
  272. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  273. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  274. data/lib/aws/ec2/security_group_collection.rb +133 -0
  275. data/lib/aws/ec2/snapshot.rb +143 -0
  276. data/lib/aws/ec2/snapshot_collection.rb +131 -0
  277. data/lib/aws/ec2/subnet.rb +161 -0
  278. data/lib/aws/ec2/subnet_collection.rb +119 -0
  279. data/lib/aws/ec2/tag.rb +81 -0
  280. data/lib/aws/ec2/tag_collection.rb +107 -0
  281. data/lib/aws/ec2/tagged_collection.rb +67 -0
  282. data/lib/aws/ec2/tagged_item.rb +85 -0
  283. data/lib/aws/ec2/volume.rb +185 -0
  284. data/lib/aws/ec2/volume_collection.rb +102 -0
  285. data/lib/aws/ec2/vpc.rb +174 -0
  286. data/lib/aws/ec2/vpc_collection.rb +70 -0
  287. data/lib/aws/ec2/vpn_connection.rb +99 -0
  288. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  289. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  290. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  291. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  292. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  293. data/lib/aws/elastic_beanstalk.rb +49 -0
  294. data/lib/aws/elastic_beanstalk/client.rb +36 -0
  295. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  296. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  297. data/lib/aws/elastic_transcoder.rb +29 -0
  298. data/lib/aws/elastic_transcoder/client.rb +48 -0
  299. data/lib/aws/elastic_transcoder/config.rb +18 -0
  300. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  301. data/lib/aws/elasticache.rb +49 -0
  302. data/lib/aws/elasticache/client.rb +41 -0
  303. data/lib/aws/elasticache/config.rb +18 -0
  304. data/lib/aws/elasticache/errors.rb +22 -0
  305. data/lib/aws/elb.rb +66 -0
  306. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  307. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  308. data/lib/aws/elb/client.rb +35 -0
  309. data/lib/aws/elb/config.rb +18 -0
  310. data/lib/aws/elb/errors.rb +26 -0
  311. data/lib/aws/elb/instance_collection.rb +168 -0
  312. data/lib/aws/elb/listener.rb +190 -0
  313. data/lib/aws/elb/listener_collection.rb +113 -0
  314. data/lib/aws/elb/listener_opts.rb +45 -0
  315. data/lib/aws/elb/load_balancer.rb +280 -0
  316. data/lib/aws/elb/load_balancer_collection.rb +146 -0
  317. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  318. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  319. data/lib/aws/emr.rb +87 -0
  320. data/lib/aws/emr/client.rb +35 -0
  321. data/lib/aws/emr/config.rb +18 -0
  322. data/lib/aws/emr/errors.rb +22 -0
  323. data/lib/aws/emr/instance_group.rb +138 -0
  324. data/lib/aws/emr/instance_group_collection.rb +82 -0
  325. data/lib/aws/emr/job_flow.rb +307 -0
  326. data/lib/aws/emr/job_flow_collection.rb +183 -0
  327. data/lib/aws/errors.rb +162 -0
  328. data/lib/aws/glacier.rb +79 -0
  329. data/lib/aws/glacier/archive.rb +56 -0
  330. data/lib/aws/glacier/archive_collection.rb +146 -0
  331. data/lib/aws/glacier/client.rb +49 -0
  332. data/lib/aws/glacier/config.rb +19 -0
  333. data/lib/aws/glacier/errors.rb +22 -0
  334. data/lib/aws/glacier/resource.rb +30 -0
  335. data/lib/aws/glacier/vault.rb +145 -0
  336. data/lib/aws/glacier/vault_collection.rb +75 -0
  337. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  338. data/lib/aws/iam.rb +408 -0
  339. data/lib/aws/iam/access_key.rb +185 -0
  340. data/lib/aws/iam/access_key_collection.rb +128 -0
  341. data/lib/aws/iam/account_alias_collection.rb +79 -0
  342. data/lib/aws/iam/client.rb +49 -0
  343. data/lib/aws/iam/collection.rb +83 -0
  344. data/lib/aws/iam/config.rb +18 -0
  345. data/lib/aws/iam/errors.rb +22 -0
  346. data/lib/aws/iam/group.rb +111 -0
  347. data/lib/aws/iam/group_collection.rb +132 -0
  348. data/lib/aws/iam/group_policy_collection.rb +47 -0
  349. data/lib/aws/iam/group_user_collection.rb +84 -0
  350. data/lib/aws/iam/login_profile.rb +111 -0
  351. data/lib/aws/iam/mfa_device.rb +52 -0
  352. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  353. data/lib/aws/iam/policy.rb +46 -0
  354. data/lib/aws/iam/policy_collection.rb +188 -0
  355. data/lib/aws/iam/resource.rb +62 -0
  356. data/lib/aws/iam/server_certificate.rb +148 -0
  357. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  358. data/lib/aws/iam/signing_certificate.rb +186 -0
  359. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  360. data/lib/aws/iam/user.rb +200 -0
  361. data/lib/aws/iam/user_collection.rb +133 -0
  362. data/lib/aws/iam/user_group_collection.rb +98 -0
  363. data/lib/aws/iam/user_policy.rb +90 -0
  364. data/lib/aws/iam/user_policy_collection.rb +45 -0
  365. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  366. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  367. data/lib/aws/import_export.rb +73 -0
  368. data/lib/aws/import_export/client.rb +35 -0
  369. data/lib/aws/import_export/config.rb +19 -0
  370. data/lib/aws/import_export/errors.rb +22 -0
  371. data/lib/aws/kinesis.rb +53 -0
  372. data/lib/aws/kinesis/client.rb +35 -0
  373. data/lib/aws/kinesis/config.rb +18 -0
  374. data/lib/aws/kinesis/errors.rb +20 -0
  375. data/lib/aws/ops_works.rb +29 -0
  376. data/lib/aws/ops_works/client.rb +35 -0
  377. data/lib/aws/ops_works/config.rb +18 -0
  378. data/lib/aws/ops_works/errors.rb +20 -0
  379. data/lib/aws/rails.rb +195 -0
  380. data/lib/aws/rds.rb +70 -0
  381. data/lib/aws/rds/client.rb +42 -0
  382. data/lib/aws/rds/config.rb +18 -0
  383. data/lib/aws/rds/db_instance.rb +215 -0
  384. data/lib/aws/rds/db_instance_collection.rb +75 -0
  385. data/lib/aws/rds/db_snapshot.rb +163 -0
  386. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  387. data/lib/aws/rds/errors.rb +22 -0
  388. data/lib/aws/record.rb +139 -0
  389. data/lib/aws/record/abstract_base.rb +689 -0
  390. data/lib/aws/record/attributes.rb +388 -0
  391. data/lib/aws/record/conversion.rb +38 -0
  392. data/lib/aws/record/dirty_tracking.rb +287 -0
  393. data/lib/aws/record/errors.rb +143 -0
  394. data/lib/aws/record/exceptions.rb +51 -0
  395. data/lib/aws/record/hash_model.rb +204 -0
  396. data/lib/aws/record/hash_model/attributes.rb +195 -0
  397. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  398. data/lib/aws/record/hash_model/scope.rb +108 -0
  399. data/lib/aws/record/model.rb +453 -0
  400. data/lib/aws/record/model/attributes.rb +377 -0
  401. data/lib/aws/record/model/finder_methods.rb +232 -0
  402. data/lib/aws/record/model/scope.rb +212 -0
  403. data/lib/aws/record/naming.rb +31 -0
  404. data/lib/aws/record/scope.rb +203 -0
  405. data/lib/aws/record/validations.rb +694 -0
  406. data/lib/aws/record/validator.rb +246 -0
  407. data/lib/aws/record/validators/acceptance.rb +49 -0
  408. data/lib/aws/record/validators/block.rb +36 -0
  409. data/lib/aws/record/validators/confirmation.rb +41 -0
  410. data/lib/aws/record/validators/count.rb +106 -0
  411. data/lib/aws/record/validators/exclusion.rb +41 -0
  412. data/lib/aws/record/validators/format.rb +55 -0
  413. data/lib/aws/record/validators/inclusion.rb +54 -0
  414. data/lib/aws/record/validators/length.rb +105 -0
  415. data/lib/aws/record/validators/method.rb +31 -0
  416. data/lib/aws/record/validators/numericality.rb +136 -0
  417. data/lib/aws/record/validators/presence.rb +43 -0
  418. data/lib/aws/redshift.rb +51 -0
  419. data/lib/aws/redshift/client.rb +35 -0
  420. data/lib/aws/redshift/config.rb +18 -0
  421. data/lib/aws/redshift/errors.rb +22 -0
  422. data/lib/aws/route_53.rb +86 -0
  423. data/lib/aws/route_53/change_batch.rb +161 -0
  424. data/lib/aws/route_53/change_info.rb +72 -0
  425. data/lib/aws/route_53/client.rb +38 -0
  426. data/lib/aws/route_53/config.rb +18 -0
  427. data/lib/aws/route_53/errors.rb +22 -0
  428. data/lib/aws/route_53/hosted_zone.rb +134 -0
  429. data/lib/aws/route_53/hosted_zone_collection.rb +101 -0
  430. data/lib/aws/route_53/resource_record_set.rb +251 -0
  431. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  432. data/lib/aws/s3.rb +156 -0
  433. data/lib/aws/s3/access_control_list.rb +265 -0
  434. data/lib/aws/s3/acl_object.rb +264 -0
  435. data/lib/aws/s3/acl_options.rb +204 -0
  436. data/lib/aws/s3/bucket.rb +742 -0
  437. data/lib/aws/s3/bucket_collection.rb +162 -0
  438. data/lib/aws/s3/bucket_lifecycle_configuration.rb +473 -0
  439. data/lib/aws/s3/bucket_tag_collection.rb +111 -0
  440. data/lib/aws/s3/bucket_version_collection.rb +79 -0
  441. data/lib/aws/s3/cipher_io.rb +120 -0
  442. data/lib/aws/s3/client.rb +2067 -0
  443. data/lib/aws/s3/client/xml.rb +266 -0
  444. data/lib/aws/s3/config.rb +48 -0
  445. data/lib/aws/s3/cors_rule.rb +108 -0
  446. data/lib/aws/s3/cors_rule_collection.rb +194 -0
  447. data/lib/aws/s3/data_options.rb +191 -0
  448. data/lib/aws/s3/encryption_utils.rb +146 -0
  449. data/lib/aws/s3/errors.rb +94 -0
  450. data/lib/aws/s3/multipart_upload.rb +353 -0
  451. data/lib/aws/s3/multipart_upload_collection.rb +76 -0
  452. data/lib/aws/s3/object_collection.rb +353 -0
  453. data/lib/aws/s3/object_metadata.rb +103 -0
  454. data/lib/aws/s3/object_upload_collection.rb +77 -0
  455. data/lib/aws/s3/object_version.rb +154 -0
  456. data/lib/aws/s3/object_version_collection.rb +89 -0
  457. data/lib/aws/s3/paginated_collection.rb +75 -0
  458. data/lib/aws/s3/policy.rb +74 -0
  459. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  460. data/lib/aws/s3/prefixed_collection.rb +85 -0
  461. data/lib/aws/s3/presign_v4.rb +136 -0
  462. data/lib/aws/s3/presigned_post.rb +554 -0
  463. data/lib/aws/s3/request.rb +62 -0
  464. data/lib/aws/s3/s3_object.rb +1784 -0
  465. data/lib/aws/s3/tree.rb +116 -0
  466. data/lib/aws/s3/tree/branch_node.rb +68 -0
  467. data/lib/aws/s3/tree/child_collection.rb +104 -0
  468. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  469. data/lib/aws/s3/tree/node.rb +22 -0
  470. data/lib/aws/s3/tree/parent.rb +87 -0
  471. data/lib/aws/s3/uploaded_part.rb +82 -0
  472. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  473. data/lib/aws/s3/website_configuration.rb +102 -0
  474. data/lib/aws/simple_db.rb +218 -0
  475. data/lib/aws/simple_db/attribute.rb +156 -0
  476. data/lib/aws/simple_db/attribute_collection.rb +240 -0
  477. data/lib/aws/simple_db/client.rb +67 -0
  478. data/lib/aws/simple_db/config.rb +20 -0
  479. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  480. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  481. data/lib/aws/simple_db/domain.rb +123 -0
  482. data/lib/aws/simple_db/domain_collection.rb +86 -0
  483. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  484. data/lib/aws/simple_db/errors.rb +55 -0
  485. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  486. data/lib/aws/simple_db/item.rb +93 -0
  487. data/lib/aws/simple_db/item_collection.rb +654 -0
  488. data/lib/aws/simple_db/item_data.rb +73 -0
  489. data/lib/aws/simple_db/put_attributes.rb +60 -0
  490. data/lib/aws/simple_email_service.rb +443 -0
  491. data/lib/aws/simple_email_service/client.rb +37 -0
  492. data/lib/aws/simple_email_service/config.rb +18 -0
  493. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  494. data/lib/aws/simple_email_service/errors.rb +22 -0
  495. data/lib/aws/simple_email_service/identity.rb +230 -0
  496. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  497. data/lib/aws/simple_email_service/quotas.rb +66 -0
  498. data/lib/aws/simple_workflow.rb +227 -0
  499. data/lib/aws/simple_workflow/activity_task.rb +178 -0
  500. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  501. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  502. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  503. data/lib/aws/simple_workflow/client.rb +69 -0
  504. data/lib/aws/simple_workflow/config.rb +18 -0
  505. data/lib/aws/simple_workflow/count.rb +49 -0
  506. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  507. data/lib/aws/simple_workflow/decision_task_collection.rb +223 -0
  508. data/lib/aws/simple_workflow/domain.rb +122 -0
  509. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  510. data/lib/aws/simple_workflow/errors.rb +20 -0
  511. data/lib/aws/simple_workflow/history_event.rb +276 -0
  512. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  513. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  514. data/lib/aws/simple_workflow/resource.rb +94 -0
  515. data/lib/aws/simple_workflow/type.rb +89 -0
  516. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  517. data/lib/aws/simple_workflow/workflow_execution.rb +384 -0
  518. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  519. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  520. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  521. data/lib/aws/sns.rb +76 -0
  522. data/lib/aws/sns/client.rb +35 -0
  523. data/lib/aws/sns/config.rb +18 -0
  524. data/lib/aws/sns/errors.rb +22 -0
  525. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  526. data/lib/aws/sns/message.rb +204 -0
  527. data/lib/aws/sns/originators/from_auto_scaling.rb +68 -0
  528. data/lib/aws/sns/policy.rb +47 -0
  529. data/lib/aws/sns/subscription.rb +165 -0
  530. data/lib/aws/sns/subscription_collection.rb +78 -0
  531. data/lib/aws/sns/topic.rb +403 -0
  532. data/lib/aws/sns/topic_collection.rb +62 -0
  533. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  534. data/lib/aws/sqs.rb +80 -0
  535. data/lib/aws/sqs/client.rb +53 -0
  536. data/lib/aws/sqs/config.rb +20 -0
  537. data/lib/aws/sqs/errors.rb +125 -0
  538. data/lib/aws/sqs/policy.rb +48 -0
  539. data/lib/aws/sqs/queue.rb +856 -0
  540. data/lib/aws/sqs/queue_collection.rb +186 -0
  541. data/lib/aws/sqs/received_message.rb +190 -0
  542. data/lib/aws/sqs/received_sns_message.rb +116 -0
  543. data/lib/aws/storage_gateway.rb +72 -0
  544. data/lib/aws/storage_gateway/client.rb +42 -0
  545. data/lib/aws/storage_gateway/config.rb +18 -0
  546. data/lib/aws/storage_gateway/errors.rb +22 -0
  547. data/lib/aws/sts.rb +164 -0
  548. data/lib/aws/sts/client.rb +55 -0
  549. data/lib/aws/sts/config.rb +18 -0
  550. data/lib/aws/sts/errors.rb +22 -0
  551. data/lib/aws/sts/federated_session.rb +56 -0
  552. data/lib/aws/sts/policy.rb +30 -0
  553. data/lib/aws/sts/session.rb +48 -0
  554. data/lib/aws/support.rb +29 -0
  555. data/lib/aws/support/client.rb +35 -0
  556. data/lib/aws/support/config.rb +18 -0
  557. data/lib/aws/support/errors.rb +20 -0
  558. data/lib/aws/version.rb +17 -0
  559. data/rails/init.rb +15 -0
  560. metadata +634 -0
@@ -0,0 +1,803 @@
1
+ # Copyright 2011-2013 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
+ require 'base64'
15
+
16
+ module AWS
17
+ class EC2
18
+
19
+ # Represents an EC2 instance.
20
+ #
21
+ # @attr [String] user_data Arbitrary metadata that is available
22
+ # to the instance while it is running. This interface handles
23
+ # the details of encoding the user data for transmission; you
24
+ # should set the user data exactly as you want it to be made
25
+ # available to the instance.
26
+ #
27
+ # The instance must be in a stopped state to change user data;
28
+ # for example:
29
+ #
30
+ # i.user_data # => "HELLO"
31
+ # i.status # => :running
32
+ # i.user_data = "GOODBYE" # raises an exception
33
+ # i.stop; sleep 1 until i.status == :stopped
34
+ # i.user_data = "GOODBYE" # => "GOODBYE"
35
+ #
36
+ # @attr [String] instance_type The instance type,
37
+ # e.g. "m1.small". The instance must be in a stopped state to
38
+ # change the instance type.
39
+ #
40
+ # @attr [Boolean] ebs_optimized The instance must be in a stopped state to
41
+ # change the ebs_optimized state.
42
+ #
43
+ # @attr [Boolean] api_termination_disabled? True if the instance
44
+ # cannot be terminated using the {#terminate} method. This
45
+ # attribute can be changed at any time.
46
+ #
47
+ # @attr [String] instance_initiated_shutdown_behavior Valid
48
+ # values are:
49
+ #
50
+ # * "stop"] When the instance shuts down, it will go into a
51
+ # "stopped" state.
52
+ # * "terminate"] When the instance shuts down, it will be
53
+ # terminated.
54
+ #
55
+ # @attr [Boolean] source_dest_check
56
+ #
57
+ # @attr_reader [String] image_id Image ID of the AMI used to
58
+ # launch the instance.
59
+ #
60
+ # @attr_reader [String] key_name The name of the key pair with
61
+ # which this instance was associated at launch.
62
+ #
63
+ # @attr [String] kernel_id The ID of the kernel that the image
64
+ # currently uses. The instance must be in a stopped state to
65
+ # change this attribute.
66
+ #
67
+ # @attr [String] ramdisk_id The ID of the RAM disk that the
68
+ # image currently uses. The instance must be in a stopped
69
+ # state to change this attribute.
70
+ #
71
+ # @attr_reader [Symbol] root_device_type The root device type
72
+ # used by the AMI. The AMI can use an Amazon EBS or instance
73
+ # store root device. Valid values:
74
+ #
75
+ # * `:ebs`
76
+ # * `:instance_store`
77
+ #
78
+ # @attr_reader [String] root_device_name The name of the root
79
+ # device.
80
+ #
81
+ # @attr_reader [String] private_dns_name The DNS name of the
82
+ # instance within the EC2 network.
83
+ #
84
+ # @attr_reader [String] dns_name The DNS name of the instance on
85
+ # the internet.
86
+ #
87
+ # @attr_reader [Integer] ami_launch_index The AMI launch index,
88
+ # which can be used to find this instance within the launch
89
+ # group.
90
+ #
91
+ # @attr_reader [String] private_ip_address The private IP
92
+ # address assigned to the instance.
93
+ #
94
+ # @attr_reader [String] ip_address The IP address of the
95
+ # instance.
96
+ #
97
+ # @attr_reader [Symbol] status The instance status.
98
+ # Valid values are:
99
+ #
100
+ # * `:pending`
101
+ # * `:running`
102
+ # * `:shutting_down`
103
+ # * `:terminated`
104
+ # * `:stopping`
105
+ # * `:stopped`
106
+ #
107
+ # @attr_reader [Integer] status_code The numeric instance status code.
108
+ #
109
+ # @attr_reader [Symbol] architecture The architecture of the image.
110
+ #
111
+ # @attr_reader [Symbol] virtualization_type The instance's
112
+ # virtualization type. Valid values:
113
+ #
114
+ # * `:paravirtual`
115
+ # * `:hvm`
116
+ #
117
+ # @attr_reader [String] reservation_id The ID of the reservation
118
+ # in which this instance was launched.
119
+ #
120
+ # @attr_reader [String] requester_id ID of the requester that
121
+ # launched the instance on your behalf (e.g., AWS Management
122
+ # Console, Auto Scaling).
123
+ #
124
+ # @attr_reader [String] owner_id ID of the AWS account that owns
125
+ # the reservation in which the instance was launched.
126
+ #
127
+ # @attr_reader [Symbol] monitoring The status of CloudWatch
128
+ # monitoring for the instance. Valid values:
129
+ #
130
+ # * `:enabled`
131
+ # * `:disabled`
132
+ # * `:pending`
133
+ #
134
+ # @attr_reader [String] state_transition_reason A string
135
+ # describing the reason for the last state transition.
136
+ #
137
+ # @attr_reader [Time] launch_time The time at which the instance
138
+ # was launched.
139
+ #
140
+ # @attr_reader [String] platform A string describing the
141
+ # platform of the image (e.g. "windows").
142
+ #
143
+ # @attr_reader [Symbol] hypervisor The instance's hypervisor
144
+ # type. Valid values:
145
+ #
146
+ # * `:ovm`
147
+ # * `:xen`
148
+ #
149
+ # @attr_reader [String] client_token Idempotency token you
150
+ # provided when you launched the instance.
151
+ #
152
+ # @attr_reader [String,nil] vpc_id Instances launched in a VPC have
153
+ # a vpc_id. Normal EC2 instances return nil.
154
+ #
155
+ # @attr_reader [String,nil] subnet_id Instances launched in a VPC have
156
+ # a subnet_id. Normal EC2 instances return nil.
157
+ #
158
+ # @attr_reader [String,nil] iam_instance_profile_id
159
+ #
160
+ # @attr_reader [String,nil] iam_instance_profile_arn
161
+ #
162
+ class Instance < Resource
163
+
164
+ include TaggedItem
165
+
166
+ # Creates an object that represents the instance with the
167
+ # given ID. It's usually easier to get an instance of this
168
+ # class by calling {InstanceCollection#[]} or
169
+ # {InstanceCollection#each}.
170
+ def initialize(instance_id, opts = {})
171
+ super
172
+ @id = instance_id
173
+ end
174
+
175
+ # @return [String] Returns the instance id.
176
+ attr_reader :id
177
+ alias_method :instance_id, :id
178
+
179
+ # @api private
180
+ def self.reservation_attributes
181
+ @reservation_attributes ||= {}
182
+ end
183
+
184
+ # @api private
185
+ def self.reservation_attribute name, options = {}, &block
186
+ attr = attribute(name, options, &block)
187
+ reservation_attributes[attr.name] = attr
188
+ end
189
+
190
+ # @api private
191
+ def self.describe_call_attributes
192
+ @describe_call_attributes ||= {}
193
+ end
194
+
195
+ # @api private
196
+ def self.mutable_describe_attributes
197
+ @mutable_describe_attributes ||= {}
198
+ end
199
+
200
+ # @api private
201
+ def self.describe_call_attribute name, options = {}, &block
202
+ attr = attribute(name, options, &block)
203
+ describe_call_attributes[attr.name] = attr
204
+ end
205
+
206
+ # @api private
207
+ def self.mutable_describe_call_attribute name, options = {}, &block
208
+ attr = mutable_attribute(name, options, &block)
209
+ describe_call_attributes[attr.name] = attr
210
+ end
211
+
212
+ # @api private
213
+ def self.mutable_describe_attribute name, options = {}, &block
214
+ attr = mutable_attribute(name, options, &block)
215
+ mutable_describe_attributes[attr.name] = attr
216
+ end
217
+
218
+ reservation_attribute :reservation_id, :static => true
219
+
220
+ reservation_attribute :owner_id, :static => true
221
+
222
+ reservation_attribute :requester_id, :static => true
223
+
224
+ describe_call_attribute :private_dns_name
225
+
226
+ describe_call_attribute :dns_name
227
+
228
+ alias_method :public_dns_name, :dns_name
229
+
230
+ describe_call_attribute :product_codes, :static => true
231
+
232
+ describe_call_attribute :ami_launch_index, :static => true
233
+
234
+ describe_call_attribute :monitoring do
235
+ translates_output {|v| v.state.to_sym }
236
+ end
237
+
238
+ describe_call_attribute :private_ip_address
239
+
240
+ describe_call_attribute :ip_address
241
+
242
+ alias_method :public_ip_address, :ip_address
243
+
244
+ describe_call_attribute :architecture, :to_sym => true, :static => true
245
+
246
+ describe_call_attribute :root_device_type, :to_sym => true, :static => true
247
+
248
+ describe_call_attribute :root_device_name, :static => true
249
+
250
+ describe_call_attribute :block_device_mapping
251
+
252
+ protected :block_device_mapping
253
+
254
+ describe_call_attribute :instance_lifecycle, :to_sym => true
255
+
256
+ describe_call_attribute :virtualization_type, :to_sym => true, :static => true
257
+
258
+ describe_call_attribute :hypervisor, :to_sym => true, :static => true
259
+
260
+ describe_call_attribute :placement, :static => true
261
+
262
+ describe_call_attribute :state_transition_reason, :from => :reason
263
+
264
+ describe_call_attribute :launch_time, :static => true
265
+
266
+ describe_call_attribute :platform, :static => true
267
+
268
+ describe_call_attribute :client_token
269
+
270
+ describe_call_attribute :image_id, :static => true
271
+
272
+ describe_call_attribute :key_name, :static => true
273
+
274
+ describe_call_attribute :vpc_id, :static => true
275
+
276
+ describe_call_attribute :subnet_id, :static => true
277
+
278
+ describe_call_attribute :iam_instance_profile_id,
279
+ :from => :iam_instance_profile,
280
+ :static => true do
281
+ translates_output{|profile| profile[:id] }
282
+ end
283
+
284
+ describe_call_attribute :iam_instance_profile_arn,
285
+ :from => :iam_instance_profile,
286
+ :static => true do
287
+ translates_output{|profile| profile[:arn] }
288
+ end
289
+
290
+ attribute :status do
291
+ translates_output{|state| state.name.tr("-","_").to_sym }
292
+ end
293
+
294
+ attribute :status, :from => [:instance_state, :name], :to_sym => true
295
+
296
+ attribute :status_code, :from => [:instance_state, :code]
297
+
298
+ mutable_describe_call_attribute :instance_type
299
+
300
+ mutable_describe_call_attribute :ebs_optimized
301
+
302
+ mutable_describe_call_attribute :kernel_id, :set_as => :kernel
303
+
304
+ mutable_describe_call_attribute :ramdisk_id, :set_as => :ramdisk
305
+
306
+ mutable_describe_attribute :source_dest_check do
307
+ translates_output{|bool| bool.to_s == "true" }
308
+ end
309
+
310
+ alias_method :source_dest_check?, :source_dest_check
311
+
312
+ mutable_describe_call_attribute :group_set
313
+
314
+ describe_call_attribute :network_interface_set
315
+
316
+ mutable_describe_attribute(:user_data) do
317
+ translates_output {|v| Base64.decode64(v) if v }
318
+ translates_input {|v| Base64.encode64(v).strip }
319
+ end
320
+
321
+ mutable_describe_attribute :api_termination_disabled?,
322
+ :from => :disable_api_termination
323
+
324
+ mutable_describe_attribute :instance_initiated_shutdown_behavior
325
+
326
+ provider(:describe_instances) do |provider|
327
+ provider.find {|resp| resp.reservation_index[id] }
328
+ provider.provides *reservation_attributes.keys
329
+ end
330
+
331
+ provider(:describe_instances) do |provider|
332
+ provider.find {|resp| resp.instance_index[id] }
333
+ provider.provides *describe_call_attributes.keys
334
+ provider.provides :status
335
+ provider.provides :status_code
336
+ end
337
+
338
+ provider(:run_instances) do |provider|
339
+ provider.find {|resp| resp.instances_set.find{|i| i.instance_id == id } }
340
+ provider.provides *describe_call_attributes.keys
341
+ provider.provides :status
342
+ provider.provides :status_code
343
+ end
344
+
345
+ provider(:run_instances) do |provider|
346
+ provider.find {|resp| resp if resp.instances_set.find{|i| i.instance_id == id } }
347
+ provider.provides *reservation_attributes.keys
348
+ end
349
+
350
+ # These are the few attributes that are only returned by
351
+ # :desribe_instance_attribute and are *NOT* returned by
352
+ # :describe_instances. To make matters worse, only one of
353
+ # them is returned per :describe_instance_attribute call.
354
+ mutable_describe_attributes.values.each do |attr|
355
+
356
+ attr_opt_name = Core::Inflection.class_name(attr.from.to_s)
357
+ attr_opt_name = attr_opt_name[0,1].downcase + attr_opt_name[1..-1]
358
+
359
+ provider(:describe_instance_attribute) do |provider|
360
+ provider.find do |resp|
361
+ if
362
+ resp.request_options[:instance_id] == id and
363
+ resp.request_options[:attribute] == attr_opt_name
364
+ then
365
+ return resp
366
+ end
367
+ end
368
+ provider.provides(attr.name, :value_wrapped => true)
369
+ end
370
+
371
+ end
372
+
373
+ provider(:terminate_instances, :start_instances, :stop_instances) do |provider|
374
+ provider.find do |resp|
375
+ resp.instances_set.find {|i| i.instance_id == id }
376
+ end
377
+ provider.provides :status, :from => [:current_state, :name]
378
+ provider.provides :status_code, :from => [:current_state, :code]
379
+ end
380
+
381
+ provider(:monitor_instances, :unmonitor_instances) do |provider|
382
+ provider.find do |resp|
383
+ resp.instances_set.find {|i| i.instance_id == id }
384
+ end
385
+ provider.provides :monitoring
386
+ end
387
+
388
+ # @return [Boolean] Returns true if this is an EC2 VPC instance.
389
+ def vpc?
390
+ !!vpc_id
391
+ end
392
+
393
+ # @return [VPC,nil] Returns the VPC this instance was launched in.
394
+ # If this instance was not launched inside a VPC, nil is returned.
395
+ def vpc
396
+ if vpc_id
397
+ VPC.new(vpc_id, :config => config)
398
+ end
399
+ end
400
+
401
+ # @return [Subnet,nil] Returns the VPC subnet this instance was
402
+ # launched in. Returns nil if this was not launched in a VPC.
403
+ def subnet
404
+ if subnet_id
405
+ Subnet.new(subnet_id, :vpc_id => vpc_id, :config => config)
406
+ end
407
+ end
408
+
409
+ # @return [Array<NetworkInterface>] Returns a list of elastic network
410
+ # interfaces attached to this instance (VPC only). Non-vpc
411
+ # instance may not have attached network interfaces.
412
+ def network_interfaces
413
+ network_interface_set.collect do |ni|
414
+ NetworkInterface.new_from(:describe_network_interfaces, ni,
415
+ ni.network_interface_id, :config => config)
416
+ end
417
+ end
418
+
419
+ # Attaches a network interface to this instance (VPC only).
420
+ #
421
+ # @param [NetworkInterface,String] network_interface A network interface
422
+ # (or network interface id string) to attach to this vpc instance.
423
+ #
424
+ # @param [Hash] options
425
+ #
426
+ # @option (see NetworkInterface#attach)
427
+ #
428
+ # @return [nil]
429
+ #
430
+ def attach_network_interface network_interface, options = {}
431
+ if network_interface.is_a?(NetworkInterface)
432
+ network_interface.attach(self, options)
433
+ else
434
+ i = NetworkInterface.new(network_interface, :config => config)
435
+ i.attach(self, options)
436
+ end
437
+ nil
438
+ end
439
+
440
+ # @return [Array<SecurityGroup>] Returns a list of security
441
+ # groups the instance belongs to.
442
+ def security_groups
443
+ (group_set || []).collect do |g|
444
+ SecurityGroup.new(g.group_id, :name => g.group_name, :config => config)
445
+ end
446
+ end
447
+ alias_method :groups, :security_groups
448
+
449
+ # @return [Hash<String,Attachment>] Returns a hash of attachments.
450
+ # The keys are device name strings (e.g. '/dev/sda') and the values
451
+ # are {Attachment} objects.
452
+ # @note This method will not return data for ephemeral volumes.
453
+ # @see {#block_devices}
454
+ def attachments
455
+ (block_device_mapping || []).inject({}) do |m, mapping|
456
+ if mapping[:ebs]
457
+ device = mapping[:device_name]
458
+ volume = Volume.new(mapping[:ebs][:volume_id], :config => config)
459
+ attachment = Attachment.new(volume, self, device, :config => config)
460
+ m[device] = attachment
461
+ end
462
+ m
463
+ end
464
+ end
465
+ alias_method :block_device_mappings, :attachments
466
+
467
+ # Returns a list of block device mappings.
468
+ #
469
+ # instance.block_devices
470
+ # #=>
471
+ # [
472
+ # {
473
+ # :device_name => "/dev/sda2",
474
+ # :ebs => {
475
+ # :volume_id => "vol-123",
476
+ # :status => "attaching",
477
+ # :attach_time => time,
478
+ # :delete_on_termination => true
479
+ # }
480
+ # }, {
481
+ # :device_name => "/dev/sdb",
482
+ # :virtual_name => "ephemeral0",
483
+ # }
484
+ # ]
485
+ #
486
+ # @return [Array<Hash>] Returns a list of block device mappings. This
487
+ # list may contain ephemeral volumes.
488
+ def block_devices
489
+ block_device_mapping.to_a
490
+ end
491
+
492
+ # Enables monitoring for this instance.
493
+ # @return [nil]
494
+ def enable_monitoring
495
+ client.monitor_instances(:instance_ids => [id])
496
+ nil
497
+ end
498
+
499
+ # Disables monitoring for this instance.
500
+ # @return [nil]
501
+ def disable_monitoring
502
+ client.unmonitor_instances(:instance_ids => [id])
503
+ nil
504
+ end
505
+
506
+ # Enables or disables monitoring for this instance.
507
+ # @param [Boolean] state A true or false value. Enables monintoring
508
+ # for a true value, disables it for a false value.
509
+ def monitoring_enabled= state
510
+ state ? enable_monitoring : disable_monitoring
511
+ end
512
+
513
+ # @return [Booelan] Returns `true` if CloudWatch monitoring is
514
+ # enabled for this instance.
515
+ def monitoring_enabled?
516
+ monitoring == :enabled
517
+ end
518
+
519
+ # @return [Boolean] true if the instance is a Spot instance.
520
+ def spot_instance?
521
+ instance_lifecycle == :spot
522
+ end
523
+
524
+ # @return [String] The availability zone where the instance is
525
+ # running.
526
+ def availability_zone
527
+ if p = placement
528
+ p.availability_zone
529
+ end
530
+ end
531
+
532
+ # @return [Boolean] Returns true if the instance has dedicated tenancy.
533
+ # This will be false for all non-VPC instances. Dedicated Tenancy
534
+ # comes at extra cost.
535
+ def dedicated_tenancy?
536
+ if p = placement
537
+ p.tenancy == 'dedicated'
538
+ else
539
+ false
540
+ end
541
+ end
542
+
543
+ # @return [Image] The AMI used to launch the instance.
544
+ def image
545
+ Image.new(image_id, :config => config)
546
+ end
547
+
548
+ # @return [KeyPair] The key pair with which this instance was
549
+ # associated at launch.
550
+ def key_pair
551
+ KeyPair.new(key_name, :config => config) if key_name
552
+ end
553
+
554
+ # Creates an AMI from this instance.
555
+ #
556
+ # @param [String] name A name for the new image you're
557
+ # creating. Constraints: 3-128 alphanumeric characters,
558
+ # parenthesis (()), commas (,), slashes (/), dashes (-), or
559
+ # underscores(_)
560
+ #
561
+ # @param [Hash] options Additional options for creating the image.
562
+ #
563
+ # @option options [String] :description A description of the new image.
564
+ #
565
+ # @option options [Boolean] :no_reboot By default this
566
+ # option is set to `false`, which means Amazon EC2
567
+ # attempts to cleanly shut down the instance before image
568
+ # creation and reboots the instance afterwards. When the
569
+ # option is set to `true`, Amazon EC2 does not shut down
570
+ # the instance before creating the image. When this option
571
+ # is used, file system integrity on the created image cannot
572
+ # be guaranteed.
573
+ #
574
+ # @return [Image] The newly created image.
575
+ def create_image name, options = {}
576
+ images = ImageCollection.new(:config => config)
577
+ images.create(options.merge(:instance_id => id, :name => name))
578
+ end
579
+
580
+ # Retrieves the console output for the instance, returning +nil+ if it
581
+ # is not available yet.
582
+ # @return [String] the console output
583
+ # @return [nil] if no output is available
584
+ def console_output
585
+ output = client.get_console_output(:instance_id => self.id)[:output]
586
+ Base64.decode64(output) if output
587
+ end
588
+
589
+ # Associates the elastic IP address with this instance.
590
+ #
591
+ # @overload associate_elastic_ip(elastic_ip)
592
+ # @param [ElasticIp,String] elastic_ip An Elastic ip address
593
+ # (VPC or non-VPC) or a public ip address string (non-VPC only).
594
+ #
595
+ # @overload associate_elastic_ip(allocation_id)
596
+ # @param [String] allocation_id The allocation id of a
597
+ # VPC elastic ip address.
598
+ #
599
+ # @return [nil]
600
+ #
601
+ def associate_elastic_ip elastic_ip
602
+
603
+ client_opts = {}
604
+ client_opts[:instance_id] = self.id
605
+
606
+ if vpc?
607
+ client_opts[:allocation_id] = elastic_ip.is_a?(ElasticIp) ?
608
+ elastic_ip.allocation_id :
609
+ elastic_ip.to_s
610
+ else
611
+ client_opts[:public_ip] = elastic_ip.to_s
612
+ end
613
+
614
+ client.associate_address(client_opts)
615
+ nil
616
+
617
+ end
618
+
619
+ alias_method :ip_address=, :associate_elastic_ip
620
+
621
+ # Disassociates an attached elastic IP address from this instance.
622
+ # Raises an exception if there is no elastic IP address associated
623
+ # with this instance.
624
+ def disassociate_elastic_ip
625
+ if ip = self.elastic_ip
626
+ ip.disassociate
627
+ else
628
+ raise "instance #{id} does not have an associated elastic ip"
629
+ end
630
+ end
631
+
632
+ # @return [ElasticIp,nil] Returns an elastic IP address if one
633
+ # is associated with this instance, nil otherwise.
634
+ def elastic_ip
635
+ ips = ElasticIpCollection.new(:config => config)
636
+ ips.filter('instance-id', id).first
637
+ end
638
+
639
+ # @return [Boolean] Returns true if an elastic IP address is
640
+ # associated with this instance, false otherwise.
641
+ def has_elastic_ip?
642
+ !elastic_ip.nil?
643
+ end
644
+
645
+ # @return [Boolean] Returns true if the instance exists according to
646
+ # EC2.
647
+ def exists?
648
+ client.describe_instances(:filters => [
649
+ { :name => "instance-id", :values => [id] }
650
+ ]).instance_index.key?(id)
651
+ end
652
+
653
+ # Resets the kernel to its default value.
654
+ def reset_kernel_id
655
+ client.reset_instance_attribute(
656
+ :instance_id => id, :attribute => "kernel").return
657
+ end
658
+
659
+ # Resets the RAM disk to its default value.
660
+ def reset_ramdisk_id
661
+ client.reset_instance_attribute(
662
+ :instance_id => id, :attribute => "ramdisk").return
663
+ end
664
+
665
+ # Terminates the instance.
666
+ # @return [nil]
667
+ def terminate
668
+ instance_action :terminate
669
+ end
670
+ alias_method :delete, :terminate
671
+
672
+ # Reboots the instance.
673
+ # @return [nil]
674
+ def reboot
675
+ instance_action :reboot
676
+ end
677
+
678
+ # Starts the instance, assuming it is in a stopped state.
679
+ # @see stop
680
+ # @return [nil]
681
+ def start
682
+ instance_action :start
683
+ end
684
+
685
+ # Stops the instance, eventually putting it into a stopped state.
686
+ # @return [nil]
687
+ def stop
688
+ instance_action :stop
689
+ end
690
+
691
+ # This produces an image of an EC2 instance for use in another
692
+ # virtualization environment and then writes the image to a
693
+ # S3 bucket.
694
+ #
695
+ # ## Granting EC2 write access to your bucket
696
+ #
697
+ # Before you can export an image to an S3 bucket, you must modify
698
+ # the bucket ACL. You only need to do this once per bucket.
699
+ #
700
+ # s3.buckets['bucket-name'].acl.change do |acl|
701
+ # acl.grant(:read_acp).to(:amazon_customer_email => 'vm-import-export@amazon.com')
702
+ # acl.grant(:write).to(:amazon_customer_email => 'vm-import-export@amazon.com')
703
+ # end
704
+ #
705
+ # ## Performing the export
706
+ #
707
+ # Simply call #export_to_s3 on your instance. Only instances
708
+ # derived from your own ImportInstance tasks may be exported.
709
+ #
710
+ # task = ec2.instances['i-12345678'].export_to_s3('bucket-name')
711
+ #
712
+ # ## Downloading the results
713
+ #
714
+ # Given a completed export task you can download the final image:
715
+ #
716
+ # File.open('image.ova', 'wb') {|f| f.write(task.s3_object.read) }
717
+ #
718
+ # @param [S3::Bucket,String] bucket The destination bucket. May
719
+ # be the name of the bucket (string) or a {S3::Bucket} object. The
720
+ # bucket must exist and grant write permissiosn to the AWS account
721
+ # 'vm-import-export@amazon.com.'.
722
+ #
723
+ # @param [Hash] options
724
+ #
725
+ # @option options [String] :target_environment ('vmware') The target
726
+ # virtualization environment. Valid values include: 'vmware', 'citrix'
727
+ # and 'microsoft'.
728
+ #
729
+ # @option options [String] :disk_image_format The format for the exported
730
+ # image. Defaults to 'vmdk' if `:target_environemnt` is 'vmware',
731
+ # otherwise, 'vhd'.
732
+ #
733
+ # @option options [String] :container_format The container format used to
734
+ # combine disk images with metadata (such as OVF). If absent, only
735
+ # the disk image will be exported. Defaults to 'ova' if
736
+ # `:target_environment` is 'vmware', otherwise ommited.
737
+ #
738
+ # @option options [String] :description Description of the conversion
739
+ # task or the resource being exported.
740
+ #
741
+ # @option options [String] :prefix (nil) The image is written to a
742
+ # single object in the bucket at the key:
743
+ #
744
+ # "#{prefix}#{export_task_id}.#{disk_image_format}"
745
+ #
746
+ # @return [ExportTask]
747
+ #
748
+ def export_to_s3 bucket, options = {}
749
+
750
+ bucket_name = bucket.is_a?(S3::Bucket) ? bucket.name : bucket.to_s
751
+
752
+ opts = {}
753
+ opts[:instance_id] = instance_id
754
+ opts[:description] = options[:description] if options[:description]
755
+ opts[:target_environment] = options[:target_environment] || 'vmware'
756
+ opts[:export_to_s3] = {}
757
+ opts[:export_to_s3][:s3_bucket] = bucket_name
758
+ [:disk_image_format, :container_format, :s3_prefix].each do |opt|
759
+ opts[:export_to_s3][opt] = options[opt] if options.key?(opt)
760
+ end
761
+
762
+ resp = client.create_instance_export_task(opts)
763
+
764
+ ExportTask.new_from(
765
+ :create_instance_export_task,
766
+ resp[:export_task],
767
+ resp[:export_task][:export_task_id],
768
+ :config => config)
769
+
770
+ end
771
+
772
+ protected
773
+
774
+ def find_in_response resp
775
+ resp.instance_index[id]
776
+ end
777
+
778
+ def instance_action name
779
+ client.send("#{name}_instances", :instance_ids => [id])
780
+ nil
781
+ end
782
+
783
+ def get_resource attribute
784
+ if self.class.mutable_describe_attributes.include?(attribute.name)
785
+ describe_attribute_call(attribute)
786
+ else
787
+ describe_call
788
+ end
789
+ end
790
+
791
+ def attributes_from_response_object(obj)
792
+ if atts = super(obj)
793
+ if obj[:instance_state]
794
+ atts[:status] = obj[:instance_state].name.tr("-","_").to_sym
795
+ end
796
+ atts
797
+ end
798
+ end
799
+
800
+ end
801
+
802
+ end
803
+ end