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