fog-aws 3.5.2 → 3.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (333) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +485 -22
  3. data/LICENSE.md +1 -1
  4. data/README.md +117 -7
  5. data/fog-aws.gemspec +8 -8
  6. data/lib/fog/aws/compute.rb +6 -3
  7. data/lib/fog/aws/credential_fetcher.rb +75 -7
  8. data/lib/fog/aws/elasticache.rb +4 -2
  9. data/lib/fog/aws/elb.rb +1 -1
  10. data/lib/fog/aws/elbv2.rb +72 -0
  11. data/lib/fog/aws/kinesis.rb +23 -15
  12. data/lib/fog/aws/models/compute/flavors.rb +2563 -521
  13. data/lib/fog/aws/models/compute/security_group.rb +13 -5
  14. data/lib/fog/aws/models/compute/server.rb +6 -2
  15. data/lib/fog/aws/models/compute/servers.rb +2 -0
  16. data/lib/fog/aws/models/compute/snapshot.rb +7 -6
  17. data/lib/fog/aws/models/compute/vpc.rb +8 -2
  18. data/lib/fog/aws/models/storage/directories.rb +1 -0
  19. data/lib/fog/aws/models/storage/directory.rb +0 -1
  20. data/lib/fog/aws/models/storage/file.rb +164 -20
  21. data/lib/fog/aws/models/storage/files.rb +32 -2
  22. data/lib/fog/aws/parsers/compute/create_snapshot.rb +1 -1
  23. data/lib/fog/aws/parsers/compute/create_subnet.rb +33 -6
  24. data/lib/fog/aws/parsers/compute/describe_security_groups.rb +18 -4
  25. data/lib/fog/aws/parsers/compute/describe_subnets.rb +33 -6
  26. data/lib/fog/aws/parsers/dns/create_hosted_zone.rb +1 -1
  27. data/lib/fog/aws/parsers/dns/get_hosted_zone.rb +3 -3
  28. data/lib/fog/aws/parsers/dns/list_hosted_zones.rb +3 -1
  29. data/lib/fog/aws/parsers/elbv2/create_load_balancer.rb +88 -0
  30. data/lib/fog/aws/parsers/elbv2/describe_listeners.rb +110 -0
  31. data/lib/fog/aws/parsers/elbv2/describe_load_balancers.rb +88 -0
  32. data/lib/fog/aws/parsers/elbv2/describe_tags.rb +53 -0
  33. data/lib/fog/aws/parsers/elbv2/empty.rb +10 -0
  34. data/lib/fog/aws/parsers/iam/get_group_policy.rb +1 -1
  35. data/lib/fog/aws/parsers/iam/get_role_policy.rb +1 -1
  36. data/lib/fog/aws/parsers/iam/get_user_policy.rb +1 -1
  37. data/lib/fog/aws/parsers/iam/policy_version.rb +1 -1
  38. data/lib/fog/aws/parsers/storage/get_object_tagging.rb +33 -0
  39. data/lib/fog/aws/parsers/storage/upload_part_copy_object.rb +18 -0
  40. data/lib/fog/aws/parsers/sts/assume_role_with_web_identity.rb +1 -1
  41. data/lib/fog/aws/requests/compute/authorize_security_group_ingress.rb +15 -0
  42. data/lib/fog/aws/requests/compute/create_network_interface.rb +7 -4
  43. data/lib/fog/aws/requests/compute/create_subnet.rb +3 -3
  44. data/lib/fog/aws/requests/compute/create_vpc.rb +2 -2
  45. data/lib/fog/aws/requests/compute/describe_security_groups.rb +2 -0
  46. data/lib/fog/aws/requests/compute/request_spot_instances.rb +1 -1
  47. data/lib/fog/aws/requests/compute/run_instances.rb +64 -0
  48. data/lib/fog/aws/requests/compute/stop_instances.rb +11 -3
  49. data/lib/fog/aws/requests/elbv2/add_tags.rb +45 -0
  50. data/lib/fog/aws/requests/elbv2/create_load_balancer.rb +160 -0
  51. data/lib/fog/aws/requests/elbv2/describe_listeners.rb +38 -0
  52. data/lib/fog/aws/requests/elbv2/describe_load_balancers.rb +100 -0
  53. data/lib/fog/aws/requests/elbv2/describe_tags.rb +50 -0
  54. data/lib/fog/aws/requests/elbv2/remove_tags.rb +45 -0
  55. data/lib/fog/aws/requests/rds/add_tags_to_resource.rb +12 -10
  56. data/lib/fog/aws/requests/rds/list_tags_for_resource.rb +10 -7
  57. data/lib/fog/aws/requests/rds/remove_tags_from_resource.rb +9 -8
  58. data/lib/fog/aws/requests/storage/delete_multiple_objects.rb +18 -8
  59. data/lib/fog/aws/requests/storage/get_object.rb +1 -1
  60. data/lib/fog/aws/requests/storage/get_object_tagging.rb +41 -0
  61. data/lib/fog/aws/requests/storage/get_service.rb +1 -1
  62. data/lib/fog/aws/requests/storage/put_object_tagging.rb +42 -0
  63. data/lib/fog/aws/requests/storage/shared_mock_methods.rb +1 -0
  64. data/lib/fog/aws/requests/storage/sync_clock.rb +9 -1
  65. data/lib/fog/aws/requests/storage/upload_part_copy.rb +119 -0
  66. data/lib/fog/aws/requests/sts/assume_role_with_web_identity.rb +7 -6
  67. data/lib/fog/aws/storage.rb +56 -5
  68. data/lib/fog/aws/version.rb +1 -1
  69. data/lib/fog/aws.rb +7 -2
  70. metadata +35 -295
  71. data/.gitignore +0 -16
  72. data/.travis.yml +0 -53
  73. data/Gemfile +0 -14
  74. data/Rakefile +0 -14
  75. data/gemfiles/Gemfile-edge +0 -14
  76. data/gemfiles/Gemfile-ruby-2.0 +0 -7
  77. data/stale.yml +0 -17
  78. data/tests/credentials_tests.rb +0 -87
  79. data/tests/helper.rb +0 -29
  80. data/tests/helpers/collection_helper.rb +0 -90
  81. data/tests/helpers/compute/flavors_helper.rb +0 -28
  82. data/tests/helpers/compute/server_helper.rb +0 -23
  83. data/tests/helpers/compute/servers_helper.rb +0 -8
  84. data/tests/helpers/dns_helper.rb +0 -56
  85. data/tests/helpers/formats_helper.rb +0 -100
  86. data/tests/helpers/formats_helper_tests.rb +0 -107
  87. data/tests/helpers/mock_helper.rb +0 -109
  88. data/tests/helpers/model_helper.rb +0 -30
  89. data/tests/helpers/responds_to_helper.rb +0 -11
  90. data/tests/helpers/schema_validator_tests.rb +0 -104
  91. data/tests/helpers/succeeds_helper.rb +0 -9
  92. data/tests/lorem.txt +0 -1
  93. data/tests/models/auto_scaling/activities_tests.rb +0 -6
  94. data/tests/models/auto_scaling/configuration_test.rb +0 -13
  95. data/tests/models/auto_scaling/configurations_tests.rb +0 -11
  96. data/tests/models/auto_scaling/groups_test.rb +0 -27
  97. data/tests/models/auto_scaling/helper.rb +0 -0
  98. data/tests/models/auto_scaling/instance_tests.rb +0 -15
  99. data/tests/models/auto_scaling/instances_tests.rb +0 -6
  100. data/tests/models/beanstalk/application_tests.rb +0 -69
  101. data/tests/models/beanstalk/applications_tests.rb +0 -7
  102. data/tests/models/beanstalk/environment_tests.rb +0 -131
  103. data/tests/models/beanstalk/environments_tests.rb +0 -34
  104. data/tests/models/beanstalk/template_tests.rb +0 -47
  105. data/tests/models/beanstalk/templates_tests.rb +0 -62
  106. data/tests/models/beanstalk/version_tests.rb +0 -66
  107. data/tests/models/beanstalk/versions_tests.rb +0 -60
  108. data/tests/models/cdn/distribution_tests.rb +0 -15
  109. data/tests/models/cdn/distributions_tests.rb +0 -15
  110. data/tests/models/cdn/invalidation_tests.rb +0 -31
  111. data/tests/models/cdn/invalidations_tests.rb +0 -14
  112. data/tests/models/cdn/streaming_distribution_tests.rb +0 -15
  113. data/tests/models/cdn/streaming_distributions_tests.rb +0 -15
  114. data/tests/models/cloud_watch/alarm_data_tests.rb +0 -42
  115. data/tests/models/cloud_watch/alarm_history_tests.rb +0 -22
  116. data/tests/models/cloud_watch/metric_statistics_tests.rb +0 -51
  117. data/tests/models/cloud_watch/metrics_tests.rb +0 -32
  118. data/tests/models/compute/address_tests.rb +0 -43
  119. data/tests/models/compute/addresses_tests.rb +0 -5
  120. data/tests/models/compute/dhcp_option_tests.rb +0 -3
  121. data/tests/models/compute/dhcp_options_tests.rb +0 -3
  122. data/tests/models/compute/internet_gateway_tests.rb +0 -3
  123. data/tests/models/compute/internet_gateways_tests.rb +0 -3
  124. data/tests/models/compute/key_pair_tests.rb +0 -26
  125. data/tests/models/compute/key_pairs_tests.rb +0 -5
  126. data/tests/models/compute/network_acl_tests.rb +0 -109
  127. data/tests/models/compute/network_acls_tests.rb +0 -20
  128. data/tests/models/compute/network_interfaces_test.rb +0 -12
  129. data/tests/models/compute/security_group_tests.rb +0 -98
  130. data/tests/models/compute/security_groups_tests.rb +0 -5
  131. data/tests/models/compute/server_tests.rb +0 -94
  132. data/tests/models/compute/snapshot_tests.rb +0 -10
  133. data/tests/models/compute/snapshots_tests.rb +0 -10
  134. data/tests/models/compute/subnet_tests.rb +0 -13
  135. data/tests/models/compute/subnets_tests.rb +0 -5
  136. data/tests/models/compute/volume_tests.rb +0 -65
  137. data/tests/models/compute/volumes_tests.rb +0 -5
  138. data/tests/models/compute/vpc_tests.rb +0 -26
  139. data/tests/models/compute/vpcs_tests.rb +0 -19
  140. data/tests/models/data_pipeline/pipeline_tests.rb +0 -8
  141. data/tests/models/data_pipeline/pipelines_tests.rb +0 -8
  142. data/tests/models/dns/record_tests.rb +0 -33
  143. data/tests/models/dns/records_tests.rb +0 -41
  144. data/tests/models/dns/zone_tests.rb +0 -4
  145. data/tests/models/dns/zones_tests.rb +0 -4
  146. data/tests/models/efs/file_system_tests.rb +0 -12
  147. data/tests/models/efs/mount_target_tests.rb +0 -45
  148. data/tests/models/efs/mount_targets_tests.rb +0 -30
  149. data/tests/models/elasticache/cluster_tests.rb +0 -30
  150. data/tests/models/elasticache/parameter_groups_tests.rb +0 -15
  151. data/tests/models/elasticache/security_groups_tests.rb +0 -52
  152. data/tests/models/elasticache/subnet_groups_tests.rb +0 -43
  153. data/tests/models/elb/model_tests.rb +0 -360
  154. data/tests/models/elb/tagging_tests.rb +0 -15
  155. data/tests/models/glacier/model_tests.rb +0 -47
  156. data/tests/models/iam/access_keys_tests.rb +0 -53
  157. data/tests/models/iam/groups_tests.rb +0 -59
  158. data/tests/models/iam/instance_profile_tests.rb +0 -18
  159. data/tests/models/iam/managed_policies_tests.rb +0 -89
  160. data/tests/models/iam/policies_tests.rb +0 -57
  161. data/tests/models/iam/roles_tests.rb +0 -71
  162. data/tests/models/iam/users_tests.rb +0 -119
  163. data/tests/models/rds/cluster_tests.rb +0 -54
  164. data/tests/models/rds/clusters_tests.rb +0 -5
  165. data/tests/models/rds/event_subscription_tests.rb +0 -9
  166. data/tests/models/rds/event_subscriptions_tests.rb +0 -6
  167. data/tests/models/rds/helper.rb +0 -25
  168. data/tests/models/rds/instance_option_tests.rb +0 -14
  169. data/tests/models/rds/parameter_group_tests.rb +0 -24
  170. data/tests/models/rds/parameter_groups_tests.rb +0 -8
  171. data/tests/models/rds/security_group_tests.rb +0 -77
  172. data/tests/models/rds/security_groups_tests.rb +0 -5
  173. data/tests/models/rds/server_tests.rb +0 -131
  174. data/tests/models/rds/servers_tests.rb +0 -24
  175. data/tests/models/rds/snapshot_tests.rb +0 -12
  176. data/tests/models/rds/snapshots_tests.rb +0 -12
  177. data/tests/models/rds/tagging_tests.rb +0 -20
  178. data/tests/models/sns/topic_tests.rb +0 -15
  179. data/tests/models/sns/topics_tests.rb +0 -6
  180. data/tests/models/storage/directory_tests.rb +0 -91
  181. data/tests/models/storage/file_tests.rb +0 -129
  182. data/tests/models/storage/files_tests.rb +0 -58
  183. data/tests/models/storage/url_tests.rb +0 -25
  184. data/tests/models/storage/version_tests.rb +0 -52
  185. data/tests/models/storage/versions_tests.rb +0 -51
  186. data/tests/models/support/trusted_advisor_tests.rb +0 -25
  187. data/tests/parsers/compute/describe_images_tests.rb +0 -33
  188. data/tests/parsers/elb/describe_load_balancers.rb +0 -65
  189. data/tests/requests/auto_scaling/auto_scaling_tests.rb +0 -111
  190. data/tests/requests/auto_scaling/describe_types_tests.rb +0 -102
  191. data/tests/requests/auto_scaling/helper.rb +0 -229
  192. data/tests/requests/auto_scaling/model_tests.rb +0 -235
  193. data/tests/requests/auto_scaling/notification_configuration_tests.rb +0 -124
  194. data/tests/requests/auto_scaling/tag_tests.rb +0 -63
  195. data/tests/requests/beanstalk/application_tests.rb +0 -140
  196. data/tests/requests/beanstalk/solution_stack_tests.rb +0 -22
  197. data/tests/requests/cdn/cdn_tests.rb +0 -252
  198. data/tests/requests/cloud_formation/stack_tests.rb +0 -167
  199. data/tests/requests/cloud_watch/get_metric_statistics_tests.rb +0 -28
  200. data/tests/requests/cloud_watch/list_metrics_test.rb +0 -64
  201. data/tests/requests/cloud_watch/put_metric_data_tests.rb +0 -36
  202. data/tests/requests/compute/address_tests.rb +0 -144
  203. data/tests/requests/compute/assign_private_ip_tests.rb +0 -55
  204. data/tests/requests/compute/availability_zone_tests.rb +0 -25
  205. data/tests/requests/compute/client_tests.rb +0 -25
  206. data/tests/requests/compute/dhcp_options_tests.rb +0 -39
  207. data/tests/requests/compute/helper.rb +0 -27
  208. data/tests/requests/compute/image_tests.rb +0 -169
  209. data/tests/requests/compute/instance_attrib_tests.rb +0 -168
  210. data/tests/requests/compute/instance_tests.rb +0 -338
  211. data/tests/requests/compute/internet_gateway_tests.rb +0 -49
  212. data/tests/requests/compute/key_pair_tests.rb +0 -67
  213. data/tests/requests/compute/network_acl_tests.rb +0 -112
  214. data/tests/requests/compute/network_interface_tests.rb +0 -239
  215. data/tests/requests/compute/placement_group_tests.rb +0 -48
  216. data/tests/requests/compute/region_tests.rb +0 -52
  217. data/tests/requests/compute/route_tests.rb +0 -341
  218. data/tests/requests/compute/security_group_tests.rb +0 -446
  219. data/tests/requests/compute/snapshot_tests.rb +0 -77
  220. data/tests/requests/compute/spot_datafeed_subscription_tests.rb +0 -47
  221. data/tests/requests/compute/spot_instance_tests.rb +0 -55
  222. data/tests/requests/compute/spot_price_history_tests.rb +0 -23
  223. data/tests/requests/compute/subnet_tests.rb +0 -87
  224. data/tests/requests/compute/tag_tests.rb +0 -101
  225. data/tests/requests/compute/volume_tests.rb +0 -263
  226. data/tests/requests/compute/vpc_tests.rb +0 -216
  227. data/tests/requests/data_pipeline/helper.rb +0 -78
  228. data/tests/requests/data_pipeline/pipeline_tests.rb +0 -80
  229. data/tests/requests/dns/change_resource_record_sets_tests.rb +0 -34
  230. data/tests/requests/dns/dns_tests.rb +0 -240
  231. data/tests/requests/dns/health_check_tests.rb +0 -159
  232. data/tests/requests/dns/helper.rb +0 -21
  233. data/tests/requests/dynamodb/item_tests.rb +0 -137
  234. data/tests/requests/dynamodb/table_tests.rb +0 -99
  235. data/tests/requests/ecs/cluster_tests.rb +0 -112
  236. data/tests/requests/ecs/container_instance_tests.rb +0 -119
  237. data/tests/requests/ecs/helper.rb +0 -276
  238. data/tests/requests/ecs/sample_task_definition1.json +0 -56
  239. data/tests/requests/ecs/service_tests.rb +0 -132
  240. data/tests/requests/ecs/task_definitions_tests.rb +0 -97
  241. data/tests/requests/ecs/task_tests.rb +0 -145
  242. data/tests/requests/efs/file_system_tests.rb +0 -152
  243. data/tests/requests/efs/helper.rb +0 -44
  244. data/tests/requests/elasticache/cache_cluster_tests.rb +0 -137
  245. data/tests/requests/elasticache/describe_events.rb +0 -17
  246. data/tests/requests/elasticache/describe_reserved_cache_nodes.rb +0 -17
  247. data/tests/requests/elasticache/helper.rb +0 -103
  248. data/tests/requests/elasticache/parameter_group_tests.rb +0 -105
  249. data/tests/requests/elasticache/security_group_tests.rb +0 -108
  250. data/tests/requests/elasticache/subnet_group_tests.rb +0 -52
  251. data/tests/requests/elb/helper.rb +0 -91
  252. data/tests/requests/elb/listener_tests.rb +0 -68
  253. data/tests/requests/elb/load_balancer_tests.rb +0 -89
  254. data/tests/requests/elb/policy_tests.rb +0 -132
  255. data/tests/requests/emr/helper.rb +0 -167
  256. data/tests/requests/emr/instance_group_tests.rb +0 -106
  257. data/tests/requests/emr/job_flow_tests.rb +0 -88
  258. data/tests/requests/federation/get_signin_token_tests.rb +0 -11
  259. data/tests/requests/glacier/archive_tests.rb +0 -13
  260. data/tests/requests/glacier/multipart_upload_tests.rb +0 -29
  261. data/tests/requests/glacier/tree_hash_tests.rb +0 -91
  262. data/tests/requests/glacier/vault_tests.rb +0 -35
  263. data/tests/requests/iam/access_key_tests.rb +0 -53
  264. data/tests/requests/iam/account_policy_tests.rb +0 -20
  265. data/tests/requests/iam/account_tests.rb +0 -34
  266. data/tests/requests/iam/group_policy_tests.rb +0 -48
  267. data/tests/requests/iam/group_tests.rb +0 -44
  268. data/tests/requests/iam/helper.rb +0 -154
  269. data/tests/requests/iam/instance_profile_tests.rb +0 -44
  270. data/tests/requests/iam/login_profile_tests.rb +0 -62
  271. data/tests/requests/iam/managed_policy_tests.rb +0 -110
  272. data/tests/requests/iam/mfa_tests.rb +0 -23
  273. data/tests/requests/iam/role_tests.rb +0 -156
  274. data/tests/requests/iam/server_certificate_tests.rb +0 -130
  275. data/tests/requests/iam/user_policy_tests.rb +0 -45
  276. data/tests/requests/iam/user_tests.rb +0 -78
  277. data/tests/requests/iam/versioned_managed_policy_tests.rb +0 -105
  278. data/tests/requests/kinesis/helper.rb +0 -111
  279. data/tests/requests/kinesis/stream_tests.rb +0 -169
  280. data/tests/requests/kms/helper.rb +0 -27
  281. data/tests/requests/kms/key_tests.rb +0 -23
  282. data/tests/requests/lambda/function_sample_1.js +0 -9
  283. data/tests/requests/lambda/function_sample_2.js +0 -9
  284. data/tests/requests/lambda/function_tests.rb +0 -460
  285. data/tests/requests/lambda/helper.rb +0 -81
  286. data/tests/requests/rds/cluster_snapshot_tests.rb +0 -43
  287. data/tests/requests/rds/cluster_tests.rb +0 -37
  288. data/tests/requests/rds/db_engine_versions.rb +0 -7
  289. data/tests/requests/rds/db_snapshot_tests.rb +0 -62
  290. data/tests/requests/rds/describe_events.rb +0 -16
  291. data/tests/requests/rds/event_subscription_tests.rb +0 -30
  292. data/tests/requests/rds/helper.rb +0 -406
  293. data/tests/requests/rds/instance_option_tests.rb +0 -27
  294. data/tests/requests/rds/instance_tests.rb +0 -149
  295. data/tests/requests/rds/log_file_tests.rb +0 -19
  296. data/tests/requests/rds/parameter_group_tests.rb +0 -62
  297. data/tests/requests/rds/parameter_request_tests.rb +0 -32
  298. data/tests/requests/rds/security_group_tests.rb +0 -101
  299. data/tests/requests/rds/subnet_groups_tests.rb +0 -52
  300. data/tests/requests/rds/tagging_tests.rb +0 -78
  301. data/tests/requests/redshift/cluster_parameter_group_tests.rb +0 -76
  302. data/tests/requests/redshift/cluster_security_group_tests.rb +0 -42
  303. data/tests/requests/redshift/cluster_snapshot_tests.rb +0 -73
  304. data/tests/requests/redshift/cluster_tests.rb +0 -80
  305. data/tests/requests/ses/helper.rb +0 -9
  306. data/tests/requests/ses/verified_domain_identity_tests.rb +0 -16
  307. data/tests/requests/ses/verified_email_address_tests.rb +0 -27
  308. data/tests/requests/simpledb/attributes_tests.rb +0 -86
  309. data/tests/requests/simpledb/domain_tests.rb +0 -51
  310. data/tests/requests/simpledb/helper.rb +0 -10
  311. data/tests/requests/sns/helper.rb +0 -9
  312. data/tests/requests/sns/subscription_tests.rb +0 -86
  313. data/tests/requests/sns/topic_tests.rb +0 -53
  314. data/tests/requests/sqs/helper.rb +0 -9
  315. data/tests/requests/sqs/message_tests.rb +0 -51
  316. data/tests/requests/sqs/queue_tests.rb +0 -50
  317. data/tests/requests/storage/acl_utils_tests.rb +0 -209
  318. data/tests/requests/storage/bucket_tests.rb +0 -416
  319. data/tests/requests/storage/cors_utils_tests.rb +0 -108
  320. data/tests/requests/storage/delete_multiple_objects_tests.rb +0 -12
  321. data/tests/requests/storage/multipart_upload_tests.rb +0 -121
  322. data/tests/requests/storage/object_tests.rb +0 -262
  323. data/tests/requests/storage/versioning_tests.rb +0 -262
  324. data/tests/requests/sts/assume_role_tests.rb +0 -19
  325. data/tests/requests/sts/assume_role_with_saml_tests.rb +0 -18
  326. data/tests/requests/sts/assume_role_with_web_identity_tests.rb +0 -28
  327. data/tests/requests/sts/get_federation_token_tests.rb +0 -20
  328. data/tests/requests/sts/session_token_tests.rb +0 -16
  329. data/tests/requests/support/helper.rb +0 -43
  330. data/tests/requests/support/trusted_advisor_check_tests.rb +0 -16
  331. data/tests/signaturev4_tests.rb +0 -106
  332. data/tests/signed_params_tests.rb +0 -17
  333. data/tests/storage_tests.rb +0 -7
@@ -30,6 +30,8 @@ module Fog
30
30
  # * 'Ebs.Encrypted'<~Boolean> - specifies whether or not the volume is to be encrypted unless snapshot is specified
31
31
  # * 'Ebs.VolumeType'<~String> - Type of EBS volue. Valid options in ['standard', 'io1'] default is 'standard'.
32
32
  # * 'Ebs.Iops'<~String> - The number of I/O operations per second (IOPS) that the volume supports. Required when VolumeType is 'io1'
33
+ # * 'HibernationOptions'<~Array>: array of hashes
34
+ # * 'Configured'<~Boolean> - specifies whether or not the instance is configued for hibernation. This parameter is valid only if the instance meets the hibernation prerequisites.
33
35
  # * 'NetworkInterfaces'<~Array>: array of hashes
34
36
  # * 'NetworkInterfaceId'<~String> - An existing interface to attach to a single instance
35
37
  # * 'DeviceIndex'<~String> - The device index. Applies both to attaching an existing network interface and creating a network interface
@@ -42,6 +44,11 @@ module Fog
42
44
  # * 'PrivateIpAddresses.Primary'<~Bool> - Indicates whether the private IP address is the primary private IP address.
43
45
  # * 'SecondaryPrivateIpAddressCount'<~Bool> - The number of private IP addresses to assign to the network interface.
44
46
  # * 'AssociatePublicIpAddress'<~String> - Indicates whether to assign a public IP address to an instance in a VPC. The public IP address is assigned to a specific network interface
47
+ # * 'TagSpecifications'<~Array>: array of hashes
48
+ # * 'ResourceType'<~String> - Type of resource to apply tags on, e.g: instance or volume
49
+ # * 'Tags'<~Array> - List of hashs reprensenting tag to be set
50
+ # * 'Key'<~String> - Tag name
51
+ # * 'Value'<~String> - Tag value
45
52
  # * 'ClientToken'<~String> - unique case-sensitive token for ensuring idempotency
46
53
  # * 'DisableApiTermination'<~Boolean> - specifies whether or not to allow termination of the instance from the api
47
54
  # * 'SecurityGroup'<~Array> or <~String> - Name of security group(s) for instances (not supported for VPC)
@@ -75,6 +82,8 @@ module Fog
75
82
  # * 'deviceName'<~String> - specifies how volume is exposed to instance
76
83
  # * 'status'<~String> - status of attached volume
77
84
  # * 'volumeId'<~String> - Id of attached volume
85
+ # * 'hibernationOptions'<~Array>
86
+ # * 'configured'<~Boolean> - whether or not the instance is enabled for hibernation
78
87
  # * 'dnsName'<~String> - public dns name, blank until instance is running
79
88
  # * 'imageId'<~String> - image id of ami used to launch instance
80
89
  # * 'instanceId'<~String> - id of the instance
@@ -111,6 +120,13 @@ module Fog
111
120
  end
112
121
  end
113
122
  end
123
+ if hibernation_options = options.delete('HibernationOptions')
124
+ hibernation_options.each_with_index do |mapping, index|
125
+ for key, value in mapping
126
+ options.merge!({ format("HibernationOptions.%d.#{key}", index) => value })
127
+ end
128
+ end
129
+ end
114
130
  if security_groups = options.delete('SecurityGroup')
115
131
  options.merge!(Fog::AWS.indexed_param('SecurityGroup', [*security_groups]))
116
132
  end
@@ -133,6 +149,45 @@ module Fog
133
149
  end
134
150
  end
135
151
  end
152
+ if tag_specifications = options.delete('TagSpecifications')
153
+ # From https://docs.aws.amazon.com/sdk-for-ruby/v2/api/Aws/EC2/Client.html#run_instances-instance_method
154
+ # And https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
155
+ # Discussed at https://github.com/fog/fog-aws/issues/603
156
+ #
157
+ # Example
158
+ #
159
+ # TagSpecifications: [
160
+ # {
161
+ # ResourceType: "instance",
162
+ # Tags: [
163
+ # {
164
+ # Key: "Project",
165
+ # Value: "MyProject",
166
+ # },
167
+ # ],
168
+ # },
169
+ # {
170
+ # ResourceType: "volume",
171
+ # Tags: [
172
+ # {
173
+ # Key: "Project",
174
+ # Value: "MyProject",
175
+ # },
176
+ # ],
177
+ # },
178
+ # ]
179
+ tag_specifications.each_with_index do |val, idx|
180
+ resource_type = val["ResourceType"]
181
+ tags = val["Tags"]
182
+ options["TagSpecification.#{idx}.ResourceType"] = resource_type
183
+ tags.each_with_index do |tag, tag_idx|
184
+ aws_tag_key = "TagSpecification.#{idx}.Tag.#{tag_idx}.Key"
185
+ aws_tag_value = "TagSpecification.#{idx}.Tag.#{tag_idx}.Value"
186
+ options[aws_tag_key] = tag["Key"]
187
+ options[aws_tag_value] = tag["Value"]
188
+ end
189
+ end
190
+ end
136
191
 
137
192
  idempotent = !(options['ClientToken'].nil? || options['ClientToken'].empty?)
138
193
 
@@ -182,6 +237,14 @@ module Fog
182
237
  }
183
238
  end
184
239
 
240
+ hibernation_options = (options['HibernationOptions'] || []).reduce([]) do |mapping, device|
241
+ configure = device.fetch("Configure", true)
242
+
243
+ mapping << {
244
+ "Configure" => configure,
245
+ }
246
+ end
247
+
185
248
  if options['SubnetId']
186
249
  if options['PrivateIpAddress']
187
250
  ni_options = {'PrivateIpAddress' => options['PrivateIpAddress']}
@@ -221,6 +284,7 @@ module Fog
221
284
  'associatePublicIP' => options['associatePublicIP'] || false,
222
285
  'architecture' => 'i386',
223
286
  'blockDeviceMapping' => block_device_mapping,
287
+ 'hibernationOptions' => hibernation_options,
224
288
  'networkInterfaces' => network_interfaces,
225
289
  'clientToken' => options['clientToken'],
226
290
  'dnsName' => nil,
@@ -16,9 +16,17 @@ module Fog
16
16
  # * TODO: fill in the blanks
17
17
  #
18
18
  # {Amazon API Reference}[http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-StopInstances.html]
19
- def stop_instances(instance_id, force = false)
19
+ def stop_instances(instance_id, options = {})
20
20
  params = Fog::AWS.indexed_param('InstanceId', instance_id)
21
- params.merge!('Force' => 'true') if force
21
+ unless options.is_a?(Hash)
22
+ Fog::Logger.warning("stop_instances with #{options.class} param is deprecated, use stop_instances('force' => boolean) instead [light_black](#{caller.first})[/]")
23
+ options = {'force' => options}
24
+ end
25
+ params.merge!('Force' => 'true') if options['force']
26
+ if options['hibernate']
27
+ params.merge!('Hibernate' => 'true')
28
+ params.merge!('Force' => 'false')
29
+ end
22
30
  request({
23
31
  'Action' => 'StopInstances',
24
32
  :idempotent => true,
@@ -28,7 +36,7 @@ module Fog
28
36
  end
29
37
 
30
38
  class Mock
31
- def stop_instances(instance_id, force = false)
39
+ def stop_instances(instance_id, options = {})
32
40
  instance_ids = Array(instance_id)
33
41
 
34
42
  instance_set = self.data[:instances].values
@@ -0,0 +1,45 @@
1
+ module Fog
2
+ module AWS
3
+ class ELBV2
4
+ class Real
5
+ require 'fog/aws/parsers/elbv2/empty'
6
+
7
+ # adds tags to a load balancer instance
8
+ # http://docs.aws.amazon.com/ElasticLoadBalancing/latest/APIReference/API_AddTags.html
9
+ # ==== Parameters
10
+ # * resource_arn <~String> - The Amazon Resource Name (ARN) of the resource
11
+ # * tags <~Hash> A Hash of (String) key-value pairs
12
+ # ==== Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ def add_tags(resource_arn, tags)
16
+ keys = tags.keys.sort
17
+ values = keys.map {|key| tags[key]}
18
+ request({
19
+ 'Action' => 'AddTags',
20
+ 'ResourceArns.member.1' => resource_arn,
21
+ :parser => Fog::Parsers::AWS::ELBV2::Empty.new,
22
+ }.merge(Fog::AWS.indexed_param('Tags.member.%d.Key', keys))
23
+ .merge(Fog::AWS.indexed_param('Tags.member.%d.Value', values)))
24
+ end
25
+
26
+ end
27
+
28
+ class Mock
29
+ def add_tags(resource_arn, tags)
30
+ response = Excon::Response.new
31
+ if self.data[:load_balancers_v2][resource_arn]
32
+ self.data[:tags][resource_arn].merge! tags
33
+ response.status = 200
34
+ response.body = {
35
+ "ResponseMetadata"=>{ "RequestId"=> Fog::AWS::Mock.request_id }
36
+ }
37
+ response
38
+ else
39
+ raise Fog::AWS::ELBV2::NotFound.new("Elastic load balancer #{resource_arn} not found")
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,160 @@
1
+ module Fog
2
+ module AWS
3
+ class ELBV2
4
+ class Real
5
+ require 'fog/aws/parsers/elbv2/create_load_balancer'
6
+
7
+ # Create a new Elastic Load Balancer
8
+ #
9
+ # ==== Parameters
10
+ # * name<~String> - The name of the load balancer.
11
+ # This name must be unique per region per account, can have a maximum of 32 characters, must contain only alphanumeric characters or hyphens,
12
+ # must not begin or end with a hyphen, and must not begin with "internal-".
13
+ # - Required: Yes
14
+ # * options<~Hash>:
15
+ # * ip_address_type<~String> - [Application Load Balancers] The type of IP addresses used by the subnets for your load balancer.
16
+ # The possible values are ipv4 (for IPv4 addresses) and dualstack (for IPv4 and IPv6 addresses).
17
+ # Internal load balancers must use ipv4.
18
+ # - Required: No
19
+ # * scheme<~String> - The default is an Internet-facing load balancer. Valid Values: internet-facing | internal
20
+ # - Required: No
21
+ # * security_groups<~Array> - The IDs of the security groups for the load balancer.
22
+ # - Required: No
23
+ # * subnet_mappings<~Array> - The IDs of the public subnets. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings.
24
+ # - [Application Load Balancers] You must specify subnets from at least two Availability Zones.
25
+ # You cannot specify Elastic IP addresses for your subnets.
26
+ # - [Network Load Balancers] You can specify subnets from one or more Availability Zones.
27
+ # You can specify one Elastic IP address per subnet if you need static IP addresses for your internet-facing load balancer.
28
+ # For internal load balancers, you can specify one private IP address per subnet from the IPv4 range of the subnet.
29
+ # - Required: No
30
+ # * subnets<~Array> - The IDs of the public subnets. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings.
31
+ # - [Application Load Balancers] You must specify subnets from at least two Availability Zones.
32
+ # - [Network Load Balancers] You can specify subnets from one or more Availability Zones.
33
+ # - Required: No
34
+ # * tags<~Hash> - One or more tags to assign to the load balancer.
35
+ # - Required: No
36
+ # * type<~String> - The type of load balancer. The default is application. Valid Values: application | network
37
+ # - Required: No
38
+ # ==== Returns
39
+ # * response<~Excon::Response>:
40
+ # * body<~Hash>:
41
+ # * 'ResponseMetadata'<~Hash>:
42
+ # * 'RequestId'<~String> - Id of request
43
+ # * 'CreateLoadBalancerResult'<~Hash>:
44
+ # * 'LoadBalancers'<~Array>
45
+ # * 'AvailabilityZones'<~Array>:
46
+ # * 'SubnetId'<~String> - ID of the subnet
47
+ # * 'ZoneName'<~String> - Name of the Availability Zone
48
+ # * 'LoadBalancerAddresses'<~Array>:
49
+ # * 'IpAddress'<~String> - IP address
50
+ # * 'AllocationId'<~String> - ID of the AWS allocation
51
+ # * 'CanonicalHostedZoneName'<~String> - name of the Route 53 hosted zone associated with the load balancer
52
+ # * 'CanonicalHostedZoneNameID'<~String> - ID of the Route 53 hosted zone associated with the load balancer
53
+ # * 'CreatedTime'<~Time> - time load balancer was created
54
+ # * 'DNSName'<~String> - external DNS name of load balancer
55
+ # * 'LoadBalancerName'<~String> - name of load balancer
56
+ # * 'SecurityGroups'<~Array> - array of security group id
57
+ def create_load_balancer(name, options = {})
58
+ params = {}
59
+ params.merge!(Fog::AWS.indexed_param('Subnets.member.%d', options[:subnets]))
60
+ params.merge!(Fog::AWS.indexed_param('SecurityGroups.member.%d', options[:security_groups]))
61
+ params.merge!(Fog::AWS.serialize_keys('Scheme', options[:scheme]))
62
+ params.merge!(Fog::AWS.serialize_keys('Type', options[:type]))
63
+ params.merge!(Fog::AWS.serialize_keys('IpAddressType', options[:ip_address_type]))
64
+
65
+
66
+ unless options[:tags].nil?
67
+ tag_keys = options[:tags].keys.sort
68
+ tag_values = tag_keys.map { |key| options[:tags][key] }
69
+ params.merge!(Fog::AWS.indexed_param('Tags.member.%d.Key', tag_keys))
70
+ params.merge!(Fog::AWS.indexed_param('Tags.member.%d.Value', tag_values))
71
+ end
72
+
73
+ unless options[:subnet_mappings].nil?
74
+ subnet_ids = []
75
+ allocation_ids = []
76
+ private_ipv4_address = []
77
+ options[:subnet_mappings].each do |subnet_mapping|
78
+ subnet_ids.push(subnet_mapping[:subnet_id])
79
+ allocation_ids.push(subnet_mapping[:allocation_id])
80
+ private_ipv4_address.push(subnet_mapping[:private_ipv4_address])
81
+ end
82
+ params.merge!(Fog::AWS.indexed_param('SubnetMappings.member.%d.SubnetId', subnet_ids))
83
+ params.merge!(Fog::AWS.indexed_param('SubnetMappings.member.%d.AllocationId', allocation_ids))
84
+ params.merge!(Fog::AWS.indexed_param('SubnetMappings.member.%d.PrivateIPv4Address', private_ipv4_address))
85
+ end
86
+
87
+
88
+ request({
89
+ 'Action' => 'CreateLoadBalancer',
90
+ 'Name' => name,
91
+ :parser => Fog::Parsers::AWS::ELBV2::CreateLoadBalancer.new
92
+ }.merge!(params))
93
+ end
94
+ end
95
+
96
+ class Mock
97
+ def create_load_balancer(name, options = {})
98
+ response = Excon::Response.new
99
+ response.status = 200
100
+
101
+ raise Fog::AWS::ELBV2::IdentifierTaken if self.data[:load_balancers_v2].key? name
102
+
103
+ dns_name = Fog::AWS::ELBV2::Mock.dns_name(name, @region)
104
+ type = options[:type] || 'application'
105
+ load_balancer_arn = Fog::AWS::Mock.arn('elasticloadbalancing', self.data[:owner_id], "loadbalancer/#{type[0..2]}/#{name}/#{Fog::AWS::Mock.key_id}")
106
+
107
+ subnet_ids = options[:subnets] || []
108
+ region = if subnet_ids.any?
109
+ # using Hash here for Rubt 1.8.7 support.
110
+ Hash[
111
+ Fog::AWS::Compute::Mock.data.select do |_, region_data|
112
+ unless region_data[@aws_access_key_id].nil?
113
+ region_data[@aws_access_key_id][:subnets].any? do |region_subnets|
114
+ subnet_ids.include? region_subnets['subnetId']
115
+ end
116
+ end
117
+ end
118
+ ].keys[0]
119
+ else
120
+ 'us-east-1'
121
+ end
122
+
123
+ subnets = Fog::AWS::Compute::Mock.data[region][@aws_access_key_id][:subnets].select {|e| subnet_ids.include?(e["subnetId"]) }
124
+ availability_zones = subnets.map do |subnet|
125
+ { "LoadBalancerAddresses"=>[], "SubnetId"=>subnet["subnetId"], "ZoneName"=>subnet["availabilityZone"]}
126
+ end
127
+ vpc_id = subnets.first['vpcId']
128
+
129
+ self.data[:tags] ||= {}
130
+ self.data[:tags][load_balancer_arn] = options[:tags] || {}
131
+
132
+ load_balancer = {
133
+ 'AvailabilityZones' => availability_zones || [],
134
+ 'Scheme' => options[:scheme] || 'internet-facing',
135
+ 'SecurityGroups' => options[:security_groups] || [],
136
+ 'CanonicalHostedZoneId' => '',
137
+ 'CreatedTime' => Time.now,
138
+ 'DNSName' => dns_name,
139
+ 'VpcId' => vpc_id,
140
+ 'Type' => type,
141
+ 'State' => {'Code' => 'provisioning'},
142
+ 'LoadBalancerArn' => load_balancer_arn,
143
+ 'LoadBalancerName' => name
144
+ }
145
+ self.data[:load_balancers_v2][load_balancer_arn] = load_balancer
146
+ response.body = {
147
+ 'ResponseMetadata' => {
148
+ 'RequestId' => Fog::AWS::Mock.request_id
149
+ },
150
+ 'CreateLoadBalancerResult' => {
151
+ 'LoadBalancers' => [load_balancer]
152
+ }
153
+ }
154
+
155
+ response
156
+ end
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,38 @@
1
+ module Fog
2
+ module AWS
3
+ class ELBV2
4
+ class Real
5
+ require 'fog/aws/parsers/elbv2/describe_listeners'
6
+
7
+ # Describe all or specified load balancers
8
+ #
9
+ # ==== Parameters
10
+ # * 'LoadBalancerArn'<~String> - The Amazon Resource Name (ARN) of the load balancer
11
+ # * options<~Hash>
12
+ # * 'Marker'<String> - Indicates where to begin in your list of load balancers
13
+ #
14
+ # ==== Returns
15
+ # * response<~Excon::Response>:
16
+ # * body<~Hash>:
17
+ # * 'ResponseMetadata'<~Hash>:
18
+ # * 'RequestId'<~String> - Id of request
19
+ # * 'DescribeListenersResult'<~Hash>:
20
+ # * 'Listeners'<~Array>
21
+ # * 'LoadBalancerArn'<~String> - The Amazon Resource Name (ARN) of the load balancer
22
+ # * 'Protocol'<~String> - The protocol for connections from clients to the load balancer
23
+ # * 'Port'<~String> - The port on which the load balancer is listening
24
+ # * 'DefaultActions'<~Array> - The default actions for the listener
25
+ # * 'Type'<~String> - The type of action
26
+ # * 'TargetGroupArn'<~String> - The Amazon Resource Name (ARN) of the target group. Specify only when Type is forward
27
+ # * 'NextMarker'<~String> - Marker to specify for next page
28
+ def describe_listeners(load_balancer_arn, options = {})
29
+ request({
30
+ 'Action' => 'DescribeListeners',
31
+ 'LoadBalancerArn' => load_balancer_arn,
32
+ :parser => Fog::Parsers::AWS::ELBV2::DescribeListeners.new
33
+ }.merge!(options))
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,100 @@
1
+ module Fog
2
+ module AWS
3
+ class ELBV2
4
+ class Real
5
+ require 'fog/aws/parsers/elbv2/describe_load_balancers'
6
+
7
+ # Describe all or specified load balancers
8
+ #
9
+ # ==== Parameters
10
+ # * options<~Hash>
11
+ # * 'LoadBalancerNames'<~Array> - List of load balancer names to describe, defaults to all
12
+ # * 'Marker'<String> - Indicates where to begin in your list of load balancers
13
+ #
14
+ # ==== Returns
15
+ # * response<~Excon::Response>:
16
+ # * body<~Hash>:
17
+ # * 'ResponseMetadata'<~Hash>:
18
+ # * 'RequestId'<~String> - Id of request
19
+ # * 'DescribeLoadBalancersResult'<~Hash>:
20
+ # * 'LoadBalancers'<~Array>
21
+ # * 'AvailabilityZones'<~Array>:
22
+ # * 'SubnetId'<~String> - ID of the subnet
23
+ # * 'ZoneName'<~String> - Name of the Availability Zone
24
+ # * 'LoadBalancerAddresses'<~Array>:
25
+ # * 'IpAddress'<~String> - IP address
26
+ # * 'AllocationId'<~String> - ID of the AWS allocation
27
+ # * 'CanonicalHostedZoneName'<~String> - name of the Route 53 hosted zone associated with the load balancer
28
+ # * 'CanonicalHostedZoneNameID'<~String> - ID of the Route 53 hosted zone associated with the load balancer
29
+ # * 'CreatedTime'<~Time> - time load balancer was created
30
+ # * 'DNSName'<~String> - external DNS name of load balancer
31
+ # * 'LoadBalancerName'<~String> - name of load balancer
32
+ # * 'SecurityGroups'<~Array> - array of security group id
33
+ # * 'NextMarker'<~String> - Marker to specify for next page
34
+ def describe_load_balancers(options = {})
35
+ unless options.is_a?(Hash)
36
+ Fog::Logger.deprecation("describe_load_balancers with #{options.class} is deprecated, use all('LoadBalancerNames' => []) instead [light_black](#{caller.first})[/]")
37
+ options = { 'LoadBalancerNames' => [options].flatten }
38
+ end
39
+
40
+ if names = options.delete('LoadBalancerNames')
41
+ options.update(Fog::AWS.indexed_param('LoadBalancerNames.member', [*names]))
42
+ end
43
+
44
+ request({
45
+ 'Action' => 'DescribeLoadBalancers',
46
+ :parser => Fog::Parsers::AWS::ELBV2::DescribeLoadBalancers.new
47
+ }.merge!(options))
48
+ end
49
+ end
50
+
51
+ class Mock
52
+ def describe_load_balancers(options = {})
53
+ unless options.is_a?(Hash)
54
+ Fog::Logger.deprecation("describe_load_balancers with #{options.class} is deprecated, use all('LoadBalancerNames' => []) instead [light_black](#{caller.first})[/]")
55
+ options = { 'LoadBalancerNames' => [options].flatten }
56
+ end
57
+
58
+ lb_names = options['LoadBalancerNames'] || []
59
+
60
+ lb_names = [*lb_names]
61
+ load_balancers = if lb_names.any?
62
+ lb_names.map do |lb_name|
63
+ lb = self.data[:load_balancers_v2].find { |name, data| name == lb_name }
64
+ raise Fog::AWS::ELBV2::NotFound unless lb
65
+ lb[1].dup
66
+ end.compact
67
+ else
68
+ self.data[:load_balancers_v2].map { |lb, values| values.dup }
69
+ end
70
+
71
+ marker = options.fetch('Marker', 0).to_i
72
+ if load_balancers.count - marker > 400
73
+ next_marker = marker + 400
74
+ load_balancers = load_balancers[marker...next_marker]
75
+ else
76
+ next_marker = nil
77
+ end
78
+
79
+ response = Excon::Response.new
80
+ response.status = 200
81
+
82
+ response.body = {
83
+ 'ResponseMetadata' => {
84
+ 'RequestId' => Fog::AWS::Mock.request_id
85
+ },
86
+ 'DescribeLoadBalancersResult' => {
87
+ 'LoadBalancers' => load_balancers
88
+ }
89
+ }
90
+
91
+ if next_marker
92
+ response.body['DescribeLoadBalancersResult']['NextMarker'] = next_marker.to_s
93
+ end
94
+
95
+ response
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,50 @@
1
+ module Fog
2
+ module AWS
3
+ class ELBV2
4
+ class Real
5
+ require 'fog/aws/parsers/elbv2/describe_tags'
6
+
7
+ # returns a Hash of tags for a load balancer
8
+ # http://docs.aws.amazon.com/ElasticLoadBalancing/latest/APIReference/API_DescribeTags.html
9
+ # ==== Parameters
10
+ # * resource_arns <~Array> - ARN(s) of the ELB instance whose tags are to be retrieved
11
+ # ==== Returns
12
+ # * response<~Excon::Response>:
13
+ # * body<~Hash>:
14
+ def describe_tags(resource_arns)
15
+ request({
16
+ 'Action' => 'DescribeTags',
17
+ :parser => Fog::Parsers::AWS::ELBV2::DescribeTags.new
18
+ }.merge!(Fog::AWS.indexed_param('ResourceArns.member.%d', [*resource_arns]))
19
+ )
20
+ end
21
+ end
22
+
23
+ class Mock
24
+ def describe_tags(resource_arns)
25
+ response = Excon::Response.new
26
+ resource_arns = [*resource_arns]
27
+
28
+ tag_describtions = resource_arns.map do |resource_arn|
29
+ if self.data[:load_balancers_v2][resource_arn]
30
+ {
31
+ "Tags"=>self.data[:tags][resource_arn],
32
+ "ResourceArn"=>resource_arn
33
+ }
34
+ else
35
+ raise Fog::AWS::ELBV2::NotFound.new("Elastic load balancer #{resource_arns} not found")
36
+ end
37
+ end
38
+
39
+ response.status = 200
40
+ response.body = {
41
+ "ResponseMetadata"=>{"RequestId"=> Fog::AWS::Mock.request_id },
42
+ "DescribeTagsResult"=>{"TagDescriptions"=> tag_describtions}
43
+ }
44
+
45
+ response
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,45 @@
1
+ module Fog
2
+ module AWS
3
+ class ELBV2
4
+ class Real
5
+ require 'fog/aws/parsers/elbv2/empty'
6
+
7
+ # removes tags from an elastic load balancer instance
8
+ # http://docs.aws.amazon.com/ElasticLoadBalancing/latest/APIReference/API_RemoveTags.html
9
+ # ==== Parameters
10
+ # * resource_arn <~String> - ARN of the ELB instance whose tags are to be retrieved
11
+ # * keys <~Array> A list of String keys for the tags to remove
12
+ # ==== Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ def remove_tags(resource_arn, keys)
16
+ request(
17
+ { 'Action' => 'RemoveTags',
18
+ 'ResourceArns.member.1' => resource_arn,
19
+ :parser => Fog::Parsers::AWS::ELBV2::Empty.new,
20
+ }.merge(Fog::AWS.indexed_param('TagKeys.member.%d', keys))
21
+ )
22
+ end
23
+
24
+ end
25
+
26
+ class Mock
27
+
28
+ def remove_tags(resource_arn, keys)
29
+ response = Excon::Response.new
30
+ if self.data[:load_balancers_v2][resource_arn]
31
+ keys.each {|key| self.data[:tags][resource_arn].delete key}
32
+ response.status = 200
33
+ response.body = {
34
+ "ResponseMetadata"=>{ "RequestId"=> Fog::AWS::Mock.request_id }
35
+ }
36
+ response
37
+ else
38
+ raise Fog::AWS::ELBV2::NotFound.new("Elastic load balancer #{resource_arn} not found")
39
+ end
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+ end
@@ -12,28 +12,30 @@ module Fog
12
12
  # * body<~Hash>:
13
13
  def add_tags_to_resource(rds_id, tags)
14
14
  keys = tags.keys.sort
15
- values = keys.map {|key| tags[key]}
15
+ values = keys.map { |key| tags[key] }
16
+ resource_name = "arn:aws:rds:#{@region}:#{owner_id}:db:#{rds_id}"
17
+ %w[us-gov-west-1 us-gov-east-1].include?(@region) ? resource_name.insert(7, '-us-gov') : resource_name
16
18
  request({
17
- 'Action' => 'AddTagsToResource',
18
- 'ResourceName' => "arn:aws:rds:#{@region}:#{owner_id}:db:#{rds_id}",
19
- :parser => Fog::Parsers::AWS::RDS::Base.new,
20
- }.merge(Fog::AWS.indexed_param('Tags.member.%d.Key', keys)).
21
- merge(Fog::AWS.indexed_param('Tags.member.%d.Value', values)))
19
+ 'Action' => 'AddTagsToResource',
20
+ 'ResourceName' => resource_name,
21
+ :parser => Fog::Parsers::AWS::RDS::Base.new
22
+ }.merge(Fog::AWS.indexed_param('Tags.member.%d.Key', keys))
23
+ .merge(Fog::AWS.indexed_param('Tags.member.%d.Value', values)))
22
24
  end
23
25
  end
24
26
 
25
27
  class Mock
26
28
  def add_tags_to_resource(rds_id, tags)
27
29
  response = Excon::Response.new
28
- if server = self.data[:servers][rds_id]
29
- self.data[:tags][rds_id].merge! tags
30
+ if server = data[:servers][rds_id]
31
+ data[:tags][rds_id].merge! tags
30
32
  response.status = 200
31
33
  response.body = {
32
- "ResponseMetadata"=>{ "RequestId"=> Fog::AWS::Mock.request_id }
34
+ 'ResponseMetadata' => { 'RequestId' => Fog::AWS::Mock.request_id }
33
35
  }
34
36
  response
35
37
  else
36
- raise Fog::AWS::RDS::NotFound.new("DBInstance #{rds_id} not found")
38
+ raise Fog::AWS::RDS::NotFound, "DBInstance #{rds_id} not found"
37
39
  end
38
40
  end
39
41
  end
@@ -11,11 +11,14 @@ module Fog
11
11
  # ==== Returns
12
12
  # * response<~Excon::Response>:
13
13
  # * body<~Hash>:
14
+
14
15
  def list_tags_for_resource(rds_id)
16
+ resource_name = "arn:aws:rds:#{@region}:#{owner_id}:db:#{rds_id}"
17
+ %w[us-gov-west-1 us-gov-east-1].include?(@region) ? resource_name.insert(7, '-us-gov') : resource_name
15
18
  request(
16
- 'Action' => 'ListTagsForResource',
17
- 'ResourceName' => "arn:aws:rds:#{@region}:#{owner_id}:db:#{rds_id}",
18
- :parser => Fog::Parsers::AWS::RDS::TagListParser.new
19
+ 'Action' => 'ListTagsForResource',
20
+ 'ResourceName' => resource_name,
21
+ :parser => Fog::Parsers::AWS::RDS::TagListParser.new
19
22
  )
20
23
  end
21
24
  end
@@ -23,15 +26,15 @@ module Fog
23
26
  class Mock
24
27
  def list_tags_for_resource(rds_id)
25
28
  response = Excon::Response.new
26
- if server = self.data[:servers][rds_id]
29
+ if server = data[:servers][rds_id]
27
30
  response.status = 200
28
31
  response.body = {
29
- "ListTagsForResourceResult" =>
30
- {"TagList" => self.data[:tags][rds_id]}
32
+ 'ListTagsForResourceResult' =>
33
+ { 'TagList' => data[:tags][rds_id] }
31
34
  }
32
35
  response
33
36
  else
34
- raise Fog::AWS::RDS::NotFound.new("DBInstance #{rds_id} not found")
37
+ raise Fog::AWS::RDS::NotFound, "DBInstance #{rds_id} not found"
35
38
  end
36
39
  end
37
40
  end