ey-core 3.6.4 → 3.6.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 (542) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +23 -23
  3. data/.ruby-gemset +1 -1
  4. data/.ruby-version +1 -1
  5. data/.travis.yml +23 -23
  6. data/CHANGELOG.md +189 -189
  7. data/Gemfile +26 -20
  8. data/Guardfile +15 -15
  9. data/LICENSE.txt +19 -19
  10. data/README.md +135 -135
  11. data/Rakefile +18 -18
  12. data/bin/ey-core +4 -4
  13. data/docs/development.md +6 -0
  14. data/examples/add_instance.rb +74 -74
  15. data/examples/boot_env.rb +60 -60
  16. data/examples/console/README.md +14 -14
  17. data/examples/console/address.md +51 -51
  18. data/examples/stop_env.rb +51 -51
  19. data/examples/terminate_instance.rb +62 -62
  20. data/ey-core.gemspec +52 -52
  21. data/features/accounts.feature +13 -13
  22. data/features/applications.feature +29 -29
  23. data/features/current_user.feature +14 -14
  24. data/features/docker_registry_credentials.feature +21 -21
  25. data/features/environment_variables.feature +54 -54
  26. data/features/environments.feature +30 -30
  27. data/features/init.feature +6 -6
  28. data/features/login.feature +6 -6
  29. data/features/scp.feature +6 -6
  30. data/features/step_definitions/accounts_steps.rb +37 -37
  31. data/features/step_definitions/applications_steps.rb +39 -39
  32. data/features/step_definitions/current_user_steps.rb +11 -11
  33. data/features/step_definitions/deprecated_command_steps.rb +3 -3
  34. data/features/step_definitions/docker_registry_credentials_steps.rb +3 -3
  35. data/features/step_definitions/environment_variables_steps.rb +51 -51
  36. data/features/step_definitions/environments_steps.rb +52 -52
  37. data/features/step_definitions/version_steps.rb +3 -3
  38. data/features/support/account_helpers.rb +89 -89
  39. data/features/support/app_helpers.rb +19 -19
  40. data/features/support/aruba.rb +1 -1
  41. data/features/support/boilerplate.rb +1 -1
  42. data/features/support/client_helpers.rb +36 -36
  43. data/features/support/config_file_helpers.rb +42 -42
  44. data/features/support/core.rb +19 -19
  45. data/features/support/deployment_helpers.rb +19 -19
  46. data/features/support/env.rb +40 -40
  47. data/features/support/environment_helpers.rb +23 -23
  48. data/features/support/environment_variable_helpers.rb +20 -20
  49. data/features/support/fake_kernel.rb +23 -23
  50. data/features/support/io.rb +5 -5
  51. data/features/support/mock_api.rb +20 -20
  52. data/features/support/output_helpers.rb +7 -7
  53. data/features/support/resource_helpers.rb +201 -201
  54. data/features/support/server_helpers.rb +27 -27
  55. data/features/version.feature +8 -8
  56. data/features/whoami.feature +14 -14
  57. data/lib/ey-core/associations.rb +155 -155
  58. data/lib/ey-core/cli/accounts.rb +17 -17
  59. data/lib/ey-core/cli/applications.rb +36 -36
  60. data/lib/ey-core/cli/console.rb +28 -28
  61. data/lib/ey-core/cli/current_user.rb +16 -16
  62. data/lib/ey-core/cli/deploy.rb +126 -126
  63. data/lib/ey-core/cli/docker_registry_login.rb +29 -29
  64. data/lib/ey-core/cli/environment_variables.rb +71 -71
  65. data/lib/ey-core/cli/environments.rb +39 -39
  66. data/lib/ey-core/cli/errors.rb +11 -11
  67. data/lib/ey-core/cli/help.rb +30 -30
  68. data/lib/ey-core/cli/helpers/archive.rb +70 -70
  69. data/lib/ey-core/cli/helpers/chef.rb +51 -51
  70. data/lib/ey-core/cli/helpers/core.rb +225 -225
  71. data/lib/ey-core/cli/helpers/deprecated.rb +39 -39
  72. data/lib/ey-core/cli/helpers/log_streaming.rb +41 -41
  73. data/lib/ey-core/cli/helpers/server_sieve.rb +83 -83
  74. data/lib/ey-core/cli/helpers/stream_printer.rb +42 -42
  75. data/lib/ey-core/cli/init.rb +14 -14
  76. data/lib/ey-core/cli/login.rb +38 -38
  77. data/lib/ey-core/cli/logout.rb +22 -22
  78. data/lib/ey-core/cli/logs.rb +70 -70
  79. data/lib/ey-core/cli/main.rb +66 -66
  80. data/lib/ey-core/cli/recipes/apply.rb +65 -65
  81. data/lib/ey-core/cli/recipes/download.rb +52 -52
  82. data/lib/ey-core/cli/recipes/main.rb +21 -21
  83. data/lib/ey-core/cli/recipes/upload.rb +78 -78
  84. data/lib/ey-core/cli/recipes.rb +10 -10
  85. data/lib/ey-core/cli/scp.rb +14 -14
  86. data/lib/ey-core/cli/servers.rb +59 -59
  87. data/lib/ey-core/cli/ssh.rb +156 -156
  88. data/lib/ey-core/cli/status.rb +60 -60
  89. data/lib/ey-core/cli/subcommand.rb +53 -53
  90. data/lib/ey-core/cli/timeout_deploy.rb +58 -58
  91. data/lib/ey-core/cli/version.rb +16 -16
  92. data/lib/ey-core/cli/web/disable.rb +49 -49
  93. data/lib/ey-core/cli/web/enable.rb +46 -46
  94. data/lib/ey-core/cli/web/main.rb +21 -21
  95. data/lib/ey-core/cli/web/restart.rb +42 -42
  96. data/lib/ey-core/cli/web.rb +10 -10
  97. data/lib/ey-core/cli/whoami.rb +12 -12
  98. data/lib/ey-core/cli.rb +8 -8
  99. data/lib/ey-core/client/mock.rb +306 -306
  100. data/lib/ey-core/client/real.rb +93 -93
  101. data/lib/ey-core/client.rb +469 -469
  102. data/lib/ey-core/collection.rb +131 -131
  103. data/lib/ey-core/collections/account_cancellations.rb +6 -6
  104. data/lib/ey-core/collections/account_referrals.rb +10 -10
  105. data/lib/ey-core/collections/accounts.rb +8 -8
  106. data/lib/ey-core/collections/addons.rb +16 -16
  107. data/lib/ey-core/collections/addresses.rb +9 -9
  108. data/lib/ey-core/collections/alerts.rb +9 -9
  109. data/lib/ey-core/collections/application_archives.rb +9 -9
  110. data/lib/ey-core/collections/application_deployments.rb +9 -9
  111. data/lib/ey-core/collections/applications.rb +9 -9
  112. data/lib/ey-core/collections/auto_scaling_alarms.rb +8 -8
  113. data/lib/ey-core/collections/auto_scaling_groups.rb +8 -8
  114. data/lib/ey-core/collections/auto_scaling_policies.rb +33 -33
  115. data/lib/ey-core/collections/backup_files.rb +9 -9
  116. data/lib/ey-core/collections/blueprints.rb +9 -9
  117. data/lib/ey-core/collections/components.rb +9 -9
  118. data/lib/ey-core/collections/contacts.rb +9 -9
  119. data/lib/ey-core/collections/container_clusters.rb +9 -9
  120. data/lib/ey-core/collections/container_service_deployments.rb +17 -17
  121. data/lib/ey-core/collections/costs.rb +8 -8
  122. data/lib/ey-core/collections/database_plan_usages.rb +7 -7
  123. data/lib/ey-core/collections/database_server_revisions.rb +7 -7
  124. data/lib/ey-core/collections/database_server_snapshots.rb +17 -17
  125. data/lib/ey-core/collections/database_server_usages.rb +7 -7
  126. data/lib/ey-core/collections/database_servers.rb +9 -9
  127. data/lib/ey-core/collections/database_services.rb +9 -9
  128. data/lib/ey-core/collections/deployments.rb +8 -8
  129. data/lib/ey-core/collections/environment_plan_usages.rb +7 -7
  130. data/lib/ey-core/collections/environment_variables.rb +8 -8
  131. data/lib/ey-core/collections/environments.rb +15 -15
  132. data/lib/ey-core/collections/features.rb +9 -9
  133. data/lib/ey-core/collections/firewall_rules.rb +9 -9
  134. data/lib/ey-core/collections/firewalls.rb +9 -9
  135. data/lib/ey-core/collections/gems.rb +6 -6
  136. data/lib/ey-core/collections/keypair_deployments.rb +9 -9
  137. data/lib/ey-core/collections/keypairs.rb +9 -9
  138. data/lib/ey-core/collections/legacy_alerts.rb +9 -9
  139. data/lib/ey-core/collections/load_balancer_nodes.rb +9 -9
  140. data/lib/ey-core/collections/load_balancer_services.rb +9 -9
  141. data/lib/ey-core/collections/load_balancers.rb +16 -16
  142. data/lib/ey-core/collections/logical_databases.rb +16 -16
  143. data/lib/ey-core/collections/logs.rb +9 -9
  144. data/lib/ey-core/collections/memberships.rb +9 -9
  145. data/lib/ey-core/collections/messages.rb +9 -9
  146. data/lib/ey-core/collections/plan_usages.rb +7 -7
  147. data/lib/ey-core/collections/provider_locations.rb +13 -13
  148. data/lib/ey-core/collections/providers.rb +15 -15
  149. data/lib/ey-core/collections/requests.rb +10 -10
  150. data/lib/ey-core/collections/server_events.rb +9 -9
  151. data/lib/ey-core/collections/server_usages.rb +7 -7
  152. data/lib/ey-core/collections/servers.rb +13 -13
  153. data/lib/ey-core/collections/services.rb +14 -14
  154. data/lib/ey-core/collections/ssl_certificates.rb +9 -9
  155. data/lib/ey-core/collections/storage_users.rb +10 -10
  156. data/lib/ey-core/collections/storages.rb +9 -9
  157. data/lib/ey-core/collections/tasks.rb +9 -9
  158. data/lib/ey-core/collections/tokens.rb +9 -9
  159. data/lib/ey-core/collections/untracked_addresses.rb +4 -4
  160. data/lib/ey-core/collections/untracked_servers.rb +9 -9
  161. data/lib/ey-core/collections/users.rb +12 -12
  162. data/lib/ey-core/collections/volumes.rb +9 -9
  163. data/lib/ey-core/logger.rb +31 -31
  164. data/lib/ey-core/memory_cache.rb +17 -17
  165. data/lib/ey-core/mock/helper.rb +104 -104
  166. data/lib/ey-core/mock/params.rb +31 -31
  167. data/lib/ey-core/mock/resources.rb +92 -92
  168. data/lib/ey-core/mock/searching.rb +115 -115
  169. data/lib/ey-core/mock/util.rb +23 -23
  170. data/lib/ey-core/model.rb +44 -44
  171. data/lib/ey-core/models/account.rb +80 -80
  172. data/lib/ey-core/models/account_cancellation.rb +6 -6
  173. data/lib/ey-core/models/account_referral.rb +8 -8
  174. data/lib/ey-core/models/account_trial.rb +15 -15
  175. data/lib/ey-core/models/addon.rb +37 -37
  176. data/lib/ey-core/models/address.rb +59 -59
  177. data/lib/ey-core/models/alert.rb +99 -99
  178. data/lib/ey-core/models/application.rb +33 -33
  179. data/lib/ey-core/models/application_archive.rb +67 -67
  180. data/lib/ey-core/models/application_deployment.rb +18 -18
  181. data/lib/ey-core/models/auto_scaling_alarm.rb +54 -54
  182. data/lib/ey-core/models/auto_scaling_group.rb +75 -75
  183. data/lib/ey-core/models/backup_file.rb +52 -52
  184. data/lib/ey-core/models/base_auto_scaling_policy.rb +61 -61
  185. data/lib/ey-core/models/billing.rb +27 -27
  186. data/lib/ey-core/models/blueprint.rb +30 -30
  187. data/lib/ey-core/models/component.rb +11 -11
  188. data/lib/ey-core/models/contact.rb +14 -14
  189. data/lib/ey-core/models/container_service_deployment.rb +17 -17
  190. data/lib/ey-core/models/cost.rb +16 -16
  191. data/lib/ey-core/models/database_plan_usage.rb +10 -10
  192. data/lib/ey-core/models/database_server.rb +56 -56
  193. data/lib/ey-core/models/database_server_revision.rb +10 -10
  194. data/lib/ey-core/models/database_server_snapshot.rb +43 -43
  195. data/lib/ey-core/models/database_server_usage.rb +15 -15
  196. data/lib/ey-core/models/database_service.rb +52 -52
  197. data/lib/ey-core/models/deployment.rb +31 -31
  198. data/lib/ey-core/models/environment.rb +248 -248
  199. data/lib/ey-core/models/environment_plan_usage.rb +10 -10
  200. data/lib/ey-core/models/environment_variable.rb +29 -29
  201. data/lib/ey-core/models/feature.rb +33 -33
  202. data/lib/ey-core/models/firewall.rb +46 -46
  203. data/lib/ey-core/models/firewall_rule.rb +41 -41
  204. data/lib/ey-core/models/gem.rb +5 -5
  205. data/lib/ey-core/models/keypair.rb +38 -38
  206. data/lib/ey-core/models/keypair_deployment.rb +26 -26
  207. data/lib/ey-core/models/legacy_alert.rb +12 -12
  208. data/lib/ey-core/models/load_balancer.rb +43 -43
  209. data/lib/ey-core/models/load_balancer_node.rb +17 -17
  210. data/lib/ey-core/models/load_balancer_service.rb +22 -22
  211. data/lib/ey-core/models/log.rb +44 -44
  212. data/lib/ey-core/models/logical_database.rb +40 -40
  213. data/lib/ey-core/models/membership.rb +49 -49
  214. data/lib/ey-core/models/message.rb +27 -27
  215. data/lib/ey-core/models/plan_usage.rb +14 -14
  216. data/lib/ey-core/models/provider.rb +59 -59
  217. data/lib/ey-core/models/provider_location.rb +24 -24
  218. data/lib/ey-core/models/request.rb +109 -109
  219. data/lib/ey-core/models/server.rb +151 -151
  220. data/lib/ey-core/models/server_event.rb +11 -11
  221. data/lib/ey-core/models/server_usage.rb +15 -15
  222. data/lib/ey-core/models/service.rb +10 -10
  223. data/lib/ey-core/models/simple_auto_scaling_policy.rb +24 -24
  224. data/lib/ey-core/models/ssl_certificate.rb +44 -44
  225. data/lib/ey-core/models/step_auto_scaling_policy.rb +24 -24
  226. data/lib/ey-core/models/storage.rb +38 -38
  227. data/lib/ey-core/models/storage_user.rb +44 -44
  228. data/lib/ey-core/models/support_trial.rb +10 -10
  229. data/lib/ey-core/models/target_auto_scaling_policy.rb +24 -24
  230. data/lib/ey-core/models/task.rb +35 -35
  231. data/lib/ey-core/models/token.rb +24 -24
  232. data/lib/ey-core/models/untracked_address.rb +24 -24
  233. data/lib/ey-core/models/untracked_server.rb +45 -45
  234. data/lib/ey-core/models/user.rb +39 -39
  235. data/lib/ey-core/models/volume.rb +20 -20
  236. data/lib/ey-core/request.rb +21 -21
  237. data/lib/ey-core/request_failure.rb +11 -11
  238. data/lib/ey-core/requests/acknowledge_alert.rb +29 -29
  239. data/lib/ey-core/requests/apply_environment_updates.rb +54 -54
  240. data/lib/ey-core/requests/apply_server_updates.rb +52 -52
  241. data/lib/ey-core/requests/attach_address.rb +53 -53
  242. data/lib/ey-core/requests/authorized_channel.rb +22 -22
  243. data/lib/ey-core/requests/blueprint_environment.rb +72 -72
  244. data/lib/ey-core/requests/boot_environment.rb +187 -187
  245. data/lib/ey-core/requests/bootstrap_logical_database.rb +80 -80
  246. data/lib/ey-core/requests/cancel_account.rb +33 -33
  247. data/lib/ey-core/requests/change_environment_maintenance.rb +38 -38
  248. data/lib/ey-core/requests/create_account.rb +38 -38
  249. data/lib/ey-core/requests/create_addon.rb +35 -35
  250. data/lib/ey-core/requests/create_address.rb +54 -54
  251. data/lib/ey-core/requests/create_alert.rb +63 -63
  252. data/lib/ey-core/requests/create_application.rb +73 -73
  253. data/lib/ey-core/requests/create_application_archive.rb +44 -44
  254. data/lib/ey-core/requests/create_auto_scaling_alarm.rb +69 -69
  255. data/lib/ey-core/requests/create_auto_scaling_group.rb +62 -62
  256. data/lib/ey-core/requests/create_auto_scaling_policy.rb +68 -68
  257. data/lib/ey-core/requests/create_backup_file.rb +52 -52
  258. data/lib/ey-core/requests/create_database_server.rb +72 -72
  259. data/lib/ey-core/requests/create_database_service.rb +57 -57
  260. data/lib/ey-core/requests/create_database_service_snapshot.rb +69 -69
  261. data/lib/ey-core/requests/create_environment.rb +77 -77
  262. data/lib/ey-core/requests/create_environment_variable.rb +39 -39
  263. data/lib/ey-core/requests/create_firewall.rb +62 -62
  264. data/lib/ey-core/requests/create_firewall_rule.rb +60 -60
  265. data/lib/ey-core/requests/create_keypair.rb +42 -42
  266. data/lib/ey-core/requests/create_keypair_deployment.rb +36 -36
  267. data/lib/ey-core/requests/create_load_balancer.rb +62 -62
  268. data/lib/ey-core/requests/create_log.rb +53 -53
  269. data/lib/ey-core/requests/create_logical_database.rb +56 -56
  270. data/lib/ey-core/requests/create_membership.rb +47 -47
  271. data/lib/ey-core/requests/create_message.rb +35 -35
  272. data/lib/ey-core/requests/create_password_reset.rb +38 -38
  273. data/lib/ey-core/requests/create_provider.rb +90 -90
  274. data/lib/ey-core/requests/create_server.rb +121 -121
  275. data/lib/ey-core/requests/create_ssl_certificate.rb +83 -83
  276. data/lib/ey-core/requests/create_storage.rb +64 -64
  277. data/lib/ey-core/requests/create_storage_user.rb +64 -64
  278. data/lib/ey-core/requests/create_task.rb +55 -55
  279. data/lib/ey-core/requests/create_token.rb +24 -24
  280. data/lib/ey-core/requests/create_untracked_address.rb +50 -50
  281. data/lib/ey-core/requests/create_untracked_server.rb +39 -39
  282. data/lib/ey-core/requests/create_user.rb +54 -54
  283. data/lib/ey-core/requests/deploy_environment_application.rb +61 -61
  284. data/lib/ey-core/requests/deprovision_environment.rb +17 -17
  285. data/lib/ey-core/requests/destroy_addon.rb +24 -24
  286. data/lib/ey-core/requests/destroy_auto_scaling_alarm.rb +49 -49
  287. data/lib/ey-core/requests/destroy_auto_scaling_group.rb +44 -44
  288. data/lib/ey-core/requests/destroy_auto_scaling_policy.rb +49 -49
  289. data/lib/ey-core/requests/destroy_blueprint.rb +22 -22
  290. data/lib/ey-core/requests/destroy_database_server.rb +41 -41
  291. data/lib/ey-core/requests/destroy_database_server_snapshot.rb +42 -42
  292. data/lib/ey-core/requests/destroy_database_service.rb +57 -57
  293. data/lib/ey-core/requests/destroy_environment.rb +43 -43
  294. data/lib/ey-core/requests/destroy_firewall.rb +41 -41
  295. data/lib/ey-core/requests/destroy_firewall_rule.rb +41 -41
  296. data/lib/ey-core/requests/destroy_load_balancer.rb +30 -30
  297. data/lib/ey-core/requests/destroy_logical_database.rb +41 -41
  298. data/lib/ey-core/requests/destroy_provider.rb +34 -34
  299. data/lib/ey-core/requests/destroy_server.rb +48 -48
  300. data/lib/ey-core/requests/destroy_ssl_certificate.rb +28 -28
  301. data/lib/ey-core/requests/destroy_storage.rb +33 -33
  302. data/lib/ey-core/requests/destroy_storage_user.rb +38 -38
  303. data/lib/ey-core/requests/destroy_user.rb +29 -29
  304. data/lib/ey-core/requests/detach_address.rb +48 -48
  305. data/lib/ey-core/requests/disable_feature.rb +30 -30
  306. data/lib/ey-core/requests/discover_container_service_deployments.rb +71 -71
  307. data/lib/ey-core/requests/discover_database_server.rb +66 -66
  308. data/lib/ey-core/requests/discover_database_server_snapshots.rb +69 -69
  309. data/lib/ey-core/requests/discover_provider_location.rb +57 -57
  310. data/lib/ey-core/requests/discover_server.rb +60 -60
  311. data/lib/ey-core/requests/download_file.rb +25 -25
  312. data/lib/ey-core/requests/enable_feature.rb +35 -35
  313. data/lib/ey-core/requests/get_account.rb +29 -29
  314. data/lib/ey-core/requests/get_account_cancellation.rb +21 -21
  315. data/lib/ey-core/requests/get_account_referrals.rb +28 -28
  316. data/lib/ey-core/requests/get_account_trial.rb +32 -32
  317. data/lib/ey-core/requests/get_accounts.rb +42 -42
  318. data/lib/ey-core/requests/get_addon.rb +25 -25
  319. data/lib/ey-core/requests/get_addons.rb +24 -24
  320. data/lib/ey-core/requests/get_address.rb +25 -25
  321. data/lib/ey-core/requests/get_addresses.rb +27 -27
  322. data/lib/ey-core/requests/get_alert.rb +21 -21
  323. data/lib/ey-core/requests/get_alerting_environments.rb +41 -41
  324. data/lib/ey-core/requests/get_alerts.rb +44 -44
  325. data/lib/ey-core/requests/get_api_token.rb +19 -19
  326. data/lib/ey-core/requests/get_application.rb +21 -21
  327. data/lib/ey-core/requests/get_application_archive.rb +32 -32
  328. data/lib/ey-core/requests/get_application_archives.rb +29 -29
  329. data/lib/ey-core/requests/get_application_deployment.rb +21 -21
  330. data/lib/ey-core/requests/get_application_deployments.rb +28 -28
  331. data/lib/ey-core/requests/get_applications.rb +28 -28
  332. data/lib/ey-core/requests/get_auto_scaling_alarm.rb +27 -27
  333. data/lib/ey-core/requests/get_auto_scaling_alarms.rb +34 -34
  334. data/lib/ey-core/requests/get_auto_scaling_group.rb +21 -21
  335. data/lib/ey-core/requests/get_auto_scaling_groups.rb +29 -29
  336. data/lib/ey-core/requests/get_auto_scaling_policies.rb +46 -46
  337. data/lib/ey-core/requests/get_auto_scaling_policy.rb +27 -27
  338. data/lib/ey-core/requests/get_backup_file.rb +21 -21
  339. data/lib/ey-core/requests/get_backup_files.rb +28 -28
  340. data/lib/ey-core/requests/get_billing.rb +24 -24
  341. data/lib/ey-core/requests/get_blueprint.rb +21 -21
  342. data/lib/ey-core/requests/get_blueprints.rb +29 -29
  343. data/lib/ey-core/requests/get_component.rb +21 -21
  344. data/lib/ey-core/requests/get_components.rb +29 -29
  345. data/lib/ey-core/requests/get_contacts.rb +34 -34
  346. data/lib/ey-core/requests/get_costs.rb +25 -25
  347. data/lib/ey-core/requests/get_current_user.rb +19 -19
  348. data/lib/ey-core/requests/get_database_plan_usages.rb +24 -24
  349. data/lib/ey-core/requests/get_database_server.rb +21 -21
  350. data/lib/ey-core/requests/get_database_server_revisions.rb +27 -27
  351. data/lib/ey-core/requests/get_database_server_snapshot.rb +20 -20
  352. data/lib/ey-core/requests/get_database_server_snapshots.rb +39 -39
  353. data/lib/ey-core/requests/get_database_server_usages.rb +24 -24
  354. data/lib/ey-core/requests/get_database_servers.rb +30 -30
  355. data/lib/ey-core/requests/get_database_servers_firewalls.rb +30 -30
  356. data/lib/ey-core/requests/get_database_service.rb +20 -20
  357. data/lib/ey-core/requests/get_database_services.rb +55 -55
  358. data/lib/ey-core/requests/get_deployment.rb +19 -19
  359. data/lib/ey-core/requests/get_deployments.rb +29 -29
  360. data/lib/ey-core/requests/get_environment.rb +21 -21
  361. data/lib/ey-core/requests/get_environment_database_services.rb +21 -21
  362. data/lib/ey-core/requests/get_environment_logical_databases.rb +20 -20
  363. data/lib/ey-core/requests/get_environment_plan_usages.rb +24 -24
  364. data/lib/ey-core/requests/get_environment_variable.rb +19 -19
  365. data/lib/ey-core/requests/get_environment_variables.rb +29 -29
  366. data/lib/ey-core/requests/get_environments.rb +29 -29
  367. data/lib/ey-core/requests/get_feature.rb +21 -21
  368. data/lib/ey-core/requests/get_features.rb +28 -28
  369. data/lib/ey-core/requests/get_firewall.rb +21 -21
  370. data/lib/ey-core/requests/get_firewall_rule.rb +21 -21
  371. data/lib/ey-core/requests/get_firewall_rules.rb +29 -29
  372. data/lib/ey-core/requests/get_firewalls.rb +45 -45
  373. data/lib/ey-core/requests/get_gem.rb +24 -24
  374. data/lib/ey-core/requests/get_keypair.rb +21 -21
  375. data/lib/ey-core/requests/get_keypair_deployment.rb +21 -21
  376. data/lib/ey-core/requests/get_keypair_deployments.rb +29 -29
  377. data/lib/ey-core/requests/get_keypairs.rb +34 -34
  378. data/lib/ey-core/requests/get_legacy_alert.rb +21 -21
  379. data/lib/ey-core/requests/get_legacy_alerts.rb +29 -29
  380. data/lib/ey-core/requests/get_load_balancer.rb +21 -21
  381. data/lib/ey-core/requests/get_load_balancer_node.rb +21 -21
  382. data/lib/ey-core/requests/get_load_balancer_nodes.rb +30 -30
  383. data/lib/ey-core/requests/get_load_balancer_service.rb +21 -21
  384. data/lib/ey-core/requests/get_load_balancer_services.rb +30 -30
  385. data/lib/ey-core/requests/get_load_balancers.rb +29 -29
  386. data/lib/ey-core/requests/get_log.rb +21 -21
  387. data/lib/ey-core/requests/get_logical_database.rb +23 -23
  388. data/lib/ey-core/requests/get_logical_databases.rb +36 -36
  389. data/lib/ey-core/requests/get_logs.rb +37 -37
  390. data/lib/ey-core/requests/get_membership.rb +21 -21
  391. data/lib/ey-core/requests/get_memberships.rb +29 -29
  392. data/lib/ey-core/requests/get_message.rb +28 -28
  393. data/lib/ey-core/requests/get_messages.rb +27 -27
  394. data/lib/ey-core/requests/get_metadata.rb +22 -22
  395. data/lib/ey-core/requests/get_operational_contact.rb +21 -21
  396. data/lib/ey-core/requests/get_operational_contacts.rb +20 -20
  397. data/lib/ey-core/requests/get_plan_usages.rb +24 -24
  398. data/lib/ey-core/requests/get_possible_provider_locations.rb +19 -19
  399. data/lib/ey-core/requests/get_provider.rb +21 -21
  400. data/lib/ey-core/requests/get_provider_location.rb +29 -29
  401. data/lib/ey-core/requests/get_provider_locations.rb +28 -28
  402. data/lib/ey-core/requests/get_providers.rb +28 -28
  403. data/lib/ey-core/requests/get_request.rb +71 -71
  404. data/lib/ey-core/requests/get_requests.rb +29 -29
  405. data/lib/ey-core/requests/get_server.rb +34 -34
  406. data/lib/ey-core/requests/get_server_event.rb +20 -20
  407. data/lib/ey-core/requests/get_server_events.rb +28 -28
  408. data/lib/ey-core/requests/get_server_usages.rb +24 -24
  409. data/lib/ey-core/requests/get_servers.rb +25 -25
  410. data/lib/ey-core/requests/get_ssl_certificate.rb +23 -23
  411. data/lib/ey-core/requests/get_ssl_certificates.rb +28 -28
  412. data/lib/ey-core/requests/get_storage.rb +21 -21
  413. data/lib/ey-core/requests/get_storage_user.rb +21 -21
  414. data/lib/ey-core/requests/get_storage_users.rb +28 -28
  415. data/lib/ey-core/requests/get_storages.rb +28 -28
  416. data/lib/ey-core/requests/get_support_trial.rb +51 -51
  417. data/lib/ey-core/requests/get_task.rb +21 -21
  418. data/lib/ey-core/requests/get_tasks.rb +28 -28
  419. data/lib/ey-core/requests/get_token.rb +21 -21
  420. data/lib/ey-core/requests/get_token_by_login.rb +30 -30
  421. data/lib/ey-core/requests/get_tokens.rb +32 -32
  422. data/lib/ey-core/requests/get_untracked_server.rb +18 -18
  423. data/lib/ey-core/requests/get_untracked_servers.rb +24 -24
  424. data/lib/ey-core/requests/get_user.rb +21 -21
  425. data/lib/ey-core/requests/get_users.rb +42 -42
  426. data/lib/ey-core/requests/get_volume.rb +21 -21
  427. data/lib/ey-core/requests/get_volumes.rb +28 -28
  428. data/lib/ey-core/requests/reboot_server.rb +39 -39
  429. data/lib/ey-core/requests/reconcile_server.rb +39 -39
  430. data/lib/ey-core/requests/request_callback.rb +26 -26
  431. data/lib/ey-core/requests/reset_password.rb +31 -31
  432. data/lib/ey-core/requests/reset_server_state.rb +32 -32
  433. data/lib/ey-core/requests/restart_environment_app_servers.rb +38 -38
  434. data/lib/ey-core/requests/retrieve_docker_registry_credentials.rb +24 -24
  435. data/lib/ey-core/requests/run_cluster_application_action.rb +28 -28
  436. data/lib/ey-core/requests/run_environment_application_action.rb +29 -29
  437. data/lib/ey-core/requests/signup.rb +56 -56
  438. data/lib/ey-core/requests/start_server.rb +39 -39
  439. data/lib/ey-core/requests/stop_server.rb +39 -39
  440. data/lib/ey-core/requests/timeout_deployment.rb +27 -27
  441. data/lib/ey-core/requests/unassign_environment.rb +31 -31
  442. data/lib/ey-core/requests/update_addon.rb +28 -28
  443. data/lib/ey-core/requests/update_address.rb +29 -29
  444. data/lib/ey-core/requests/update_alert.rb +32 -32
  445. data/lib/ey-core/requests/update_application_archive.rb +23 -23
  446. data/lib/ey-core/requests/update_auto_scaling_alarm.rb +45 -45
  447. data/lib/ey-core/requests/update_auto_scaling_group.rb +45 -45
  448. data/lib/ey-core/requests/update_auto_scaling_policy.rb +46 -46
  449. data/lib/ey-core/requests/update_billing.rb +26 -26
  450. data/lib/ey-core/requests/update_blueprint.rb +29 -29
  451. data/lib/ey-core/requests/update_connector.rb +32 -32
  452. data/lib/ey-core/requests/update_environment.rb +17 -17
  453. data/lib/ey-core/requests/update_environment_variable.rb +25 -25
  454. data/lib/ey-core/requests/update_membership.rb +29 -29
  455. data/lib/ey-core/requests/update_provider_location.rb +29 -29
  456. data/lib/ey-core/requests/update_server.rb +29 -29
  457. data/lib/ey-core/requests/update_ssl_certificate.rb +25 -25
  458. data/lib/ey-core/requests/update_untracked_server.rb +24 -24
  459. data/lib/ey-core/requests/upload_file.rb +44 -44
  460. data/lib/ey-core/requests/upload_recipes_for_environment.rb +28 -28
  461. data/lib/ey-core/response.rb +59 -59
  462. data/lib/ey-core/response_cache.rb +29 -29
  463. data/lib/ey-core/subscribable.rb +60 -60
  464. data/lib/ey-core/test_helpers/account_helpers.rb +73 -73
  465. data/lib/ey-core/test_helpers/alert_helpers.rb +16 -16
  466. data/lib/ey-core/test_helpers/auto_scaling_helpers.rb +35 -35
  467. data/lib/ey-core/test_helpers/client_helpers.rb +40 -40
  468. data/lib/ey-core/test_helpers/cucumber.rb +3 -3
  469. data/lib/ey-core/test_helpers/resource_helpers.rb +196 -196
  470. data/lib/ey-core/test_helpers/rspec.rb +5 -5
  471. data/lib/ey-core/test_helpers.rb +17 -17
  472. data/lib/ey-core/token_authentication.rb +13 -13
  473. data/lib/ey-core/version.rb +5 -5
  474. data/lib/ey-core.rb +59 -59
  475. data/spec/account_spec.rb +65 -65
  476. data/spec/account_trial_spec.rb +17 -17
  477. data/spec/accounts_referrals_spec.rb +20 -20
  478. data/spec/accounts_spec.rb +113 -113
  479. data/spec/addons_and_vars_spec.rb +62 -62
  480. data/spec/addresses_spec.rb +57 -57
  481. data/spec/alerts_spec.rb +155 -155
  482. data/spec/application_archives_spec.rb +39 -39
  483. data/spec/applications_spec.rb +65 -65
  484. data/spec/auto_scaling_alarms_spec.rb +40 -40
  485. data/spec/auto_scaling_groups_spec.rb +28 -28
  486. data/spec/auto_scaling_policies_spec.rb +94 -94
  487. data/spec/billing_spec.rb +31 -31
  488. data/spec/blueprints_spec.rb +47 -47
  489. data/spec/client_spec.rb +16 -16
  490. data/spec/collection_spec.rb +43 -43
  491. data/spec/costs_spec.rb +22 -22
  492. data/spec/database_plan_usage_spec.rb +39 -39
  493. data/spec/database_server_snapshots_spec.rb +41 -41
  494. data/spec/database_server_usage_spec.rb +49 -49
  495. data/spec/database_servers_spec.rb +61 -61
  496. data/spec/database_services_spec.rb +76 -76
  497. data/spec/deployments_spec.rb +24 -24
  498. data/spec/docker_registry_credentials_spec.rb +16 -16
  499. data/spec/environment_plan_usage_spec.rb +38 -38
  500. data/spec/environments_spec.rb +212 -212
  501. data/spec/ey-core/cli/accounts_spec.rb +20 -20
  502. data/spec/ey-core/cli/helpers/server_sieve_spec.rb +226 -226
  503. data/spec/ey-core/cli/recipes/apply_spec.rb +34 -34
  504. data/spec/ey-core/cli/recipes/download_spec.rb +93 -93
  505. data/spec/ey-core/cli/recipes/upload_spec.rb +80 -80
  506. data/spec/features_spec.rb +79 -79
  507. data/spec/firewalls_spec.rb +84 -84
  508. data/spec/gems_spec.rb +11 -11
  509. data/spec/keypair_deployments_spec.rb +33 -33
  510. data/spec/keypairs_spec.rb +51 -51
  511. data/spec/legacy_alerts_spec.rb +44 -44
  512. data/spec/load_balancers_spec.rb +31 -31
  513. data/spec/logical_databases_spec.rb +38 -38
  514. data/spec/logs_spec.rb +44 -44
  515. data/spec/memberships_spec.rb +73 -73
  516. data/spec/messages_spec.rb +27 -27
  517. data/spec/metadata_spec.rb +11 -11
  518. data/spec/plan_usage_spec.rb +65 -65
  519. data/spec/provider_locations_spec.rb +85 -85
  520. data/spec/providers_spec.rb +105 -105
  521. data/spec/requests/upload_file_spec.rb +25 -25
  522. data/spec/requests_spec.rb +23 -23
  523. data/spec/reset_password_spec.rb +22 -22
  524. data/spec/server_events_spec.rb +31 -31
  525. data/spec/server_usage_spec.rb +70 -70
  526. data/spec/servers_spec.rb +202 -202
  527. data/spec/services_spec.rb +9 -9
  528. data/spec/signups_spec.rb +45 -45
  529. data/spec/spec_helper.rb +27 -27
  530. data/spec/ssl_certificates_spec.rb +94 -94
  531. data/spec/storages_spec.rb +57 -57
  532. data/spec/support/cli_helpers.rb +47 -47
  533. data/spec/support/core.rb +21 -21
  534. data/spec/support/coverage.rb +43 -43
  535. data/spec/support/fake_kernel.rb +21 -21
  536. data/spec/support/helpers.rb +1 -1
  537. data/spec/support/timecop.rb +8 -8
  538. data/spec/support_trial_spec.rb +33 -33
  539. data/spec/tokens_spec.rb +59 -59
  540. data/spec/untracked_servers_spec.rb +59 -59
  541. data/spec/users_spec.rb +108 -108
  542. metadata +4 -3
@@ -1,52 +1,52 @@
1
- class Ey::Core::Client::DatabaseService < Ey::Core::Model
2
- extend Ey::Core::Associations
3
-
4
- identity :id
5
-
6
- attribute :location
7
- attribute :name
8
- attribute :deleted_at, type: :time
9
- attribute :service_level
10
-
11
- has_one :provider
12
-
13
- has_many :databases, model: :logical_databases
14
- has_many :servers, model: :database_servers
15
- has_many :snapshots, model: :database_server_snapshots
16
-
17
- # @todo remove me next major revision
18
- attr_accessor :database_server
19
-
20
- def save!
21
- requires :name, :provider_id
22
-
23
- server_info = self.servers.map { |c| c.is_a?(Ey::Core::Client::DatabaseServer) ? c.attributes : c }
24
-
25
- server_info += [database_server] if database_server
26
-
27
- if server_info.size > 1
28
- raise ArgumentError, "only one server can be specified"
29
- elsif server_info.size < 1
30
- raise ArgumentError, "you must specify at least one server dude"
31
- end
32
-
33
- params = {
34
- "url" => self.collection.url,
35
- "provider" => self.provider_id,
36
- "database_server" => server_info.first,
37
- "database_service" => {
38
- "name" => self.name,
39
- "service_level" => self.service_level,
40
- },
41
- }
42
-
43
- if new_record?
44
- self.connection.requests.new(self.connection.create_database_service(params).body["request"])
45
- else raise NotImplementedError
46
- end
47
- end
48
-
49
- def destroy!
50
- connection.requests.new(self.connection.destroy_database_service("id" => self.id).body["request"])
51
- end
52
- end
1
+ class Ey::Core::Client::DatabaseService < Ey::Core::Model
2
+ extend Ey::Core::Associations
3
+
4
+ identity :id
5
+
6
+ attribute :location
7
+ attribute :name
8
+ attribute :deleted_at, type: :time
9
+ attribute :service_level
10
+
11
+ has_one :provider
12
+
13
+ has_many :databases, model: :logical_databases
14
+ has_many :servers, model: :database_servers
15
+ has_many :snapshots, model: :database_server_snapshots
16
+
17
+ # @todo remove me next major revision
18
+ attr_accessor :database_server
19
+
20
+ def save!
21
+ requires :name, :provider_id
22
+
23
+ server_info = self.servers.map { |c| c.is_a?(Ey::Core::Client::DatabaseServer) ? c.attributes : c }
24
+
25
+ server_info += [database_server] if database_server
26
+
27
+ if server_info.size > 1
28
+ raise ArgumentError, "only one server can be specified"
29
+ elsif server_info.size < 1
30
+ raise ArgumentError, "you must specify at least one server dude"
31
+ end
32
+
33
+ params = {
34
+ "url" => self.collection.url,
35
+ "provider" => self.provider_id,
36
+ "database_server" => server_info.first,
37
+ "database_service" => {
38
+ "name" => self.name,
39
+ "service_level" => self.service_level,
40
+ },
41
+ }
42
+
43
+ if new_record?
44
+ self.connection.requests.new(self.connection.create_database_service(params).body["request"])
45
+ else raise NotImplementedError
46
+ end
47
+ end
48
+
49
+ def destroy!
50
+ connection.requests.new(self.connection.destroy_database_service("id" => self.id).body["request"])
51
+ end
52
+ end
@@ -1,31 +1,31 @@
1
- class Ey::Core::Client::Deployment < Ey::Core::Model
2
- extend Ey::Core::Associations
3
-
4
- identity :id, type: :integer
5
-
6
- attribute :commit
7
- attribute :finished_at, type: :time
8
- attribute :migrate, type: :boolean
9
- attribute :migrate_command
10
- attribute :ref
11
- attribute :resolved_ref
12
- attribute :serverside_version
13
- attribute :started_at, type: :time
14
- attribute :successful, type: :boolean
15
- attribute :verbose
16
- attribute :streaming
17
- attribute :request_url, aliases: :request
18
-
19
- has_one :account
20
- has_one :environment
21
- has_one :application
22
- has_one :user
23
-
24
- def request
25
- self.request_url && self.connection.requests.get(self.request_url.split("/").last)
26
- end
27
-
28
- def timeout(message=nil)
29
- merge_attributes(self.connection.timeout_deployment("id" => self.id, "message" => message).body["deployment"])
30
- end
31
- end
1
+ class Ey::Core::Client::Deployment < Ey::Core::Model
2
+ extend Ey::Core::Associations
3
+
4
+ identity :id, type: :integer
5
+
6
+ attribute :commit
7
+ attribute :finished_at, type: :time
8
+ attribute :migrate, type: :boolean
9
+ attribute :migrate_command
10
+ attribute :ref
11
+ attribute :resolved_ref
12
+ attribute :serverside_version
13
+ attribute :started_at, type: :time
14
+ attribute :successful, type: :boolean
15
+ attribute :verbose
16
+ attribute :streaming
17
+ attribute :request_url, aliases: :request
18
+
19
+ has_one :account
20
+ has_one :environment
21
+ has_one :application
22
+ has_one :user
23
+
24
+ def request
25
+ self.request_url && self.connection.requests.get(self.request_url.split("/").last)
26
+ end
27
+
28
+ def timeout(message=nil)
29
+ merge_attributes(self.connection.timeout_deployment("id" => self.id, "message" => message).body["deployment"])
30
+ end
31
+ end
@@ -1,248 +1,248 @@
1
- class Ey::Core::Client::Environment < Ey::Core::Model
2
- extend Ey::Core::Associations
3
-
4
- identity :id
5
-
6
- attribute :classic, type: :boolean
7
- attribute :created_at, type: :time
8
- attribute :custom_recipes
9
- attribute :database_stack
10
- attribute :deleted_at, type: :time
11
- attribute :deploy_method
12
- attribute :framework_env
13
- attribute :language
14
- attribute :monitor_url
15
- attribute :name
16
- attribute :region
17
- attribute :release_label
18
- attribute :stack_name
19
- attribute :username
20
- attribute :service_level
21
- attribute :database_backup_limit
22
- attribute :encrypted_ebs_for_everything
23
-
24
- has_one :account
25
- has_one :database_service
26
- has_one :firewall
27
- has_one :auto_scaling_group
28
- has_one :assignee, assoc_name: :user, resource: :user
29
-
30
- has_many :costs
31
- has_many :keypairs
32
- has_many :servers
33
- has_many :applications
34
- has_many :logical_databases
35
- has_many :deployments
36
- has_many :environment_variables
37
-
38
- attr_accessor :application_id
39
-
40
- def latest_deploy(app)
41
- deployments = connection.deployments.all(environment_id: self.id, application_id: app.id)
42
- deployments.first
43
- end
44
-
45
- # @param application [Ey::Core::Client::Application]
46
- # @option opts [Ey::Core::Client::ApplicationArchive] :archive
47
- def deploy(application, opts={})
48
- raise "Environment does not contain an app deployment for this application" unless self.applications.get(application.id)
49
- raise ":ref is a required key" unless opts[:ref]
50
- connection.requests.new(connection.deploy_environment_application({"deploy" => opts}.merge("id" => self.id, "application_id" => application.id)).body["request"])
51
- end
52
-
53
- # @param application [Ey::Core::Client::Application]
54
- # @param action [String]
55
- # @option opts [Ey::Core::Client::ApplicationArchive] :archive
56
- def run_action(application, action, task={})
57
- requires :id
58
-
59
- response = self.connection.run_environment_application_action(
60
- "environment" => self.id,
61
- "application" => application.id,
62
- "task" => task,
63
- "action" => action,
64
- )
65
- connection.requests.new(response.body["request"])
66
- end
67
-
68
- def apply(type="main", data={})
69
- connection.requests.new(self.connection.apply_environment_updates("id" => self.id, "type" => type, "data" => data).body["request"])
70
- end
71
-
72
- def deprovision
73
- connection.requests.new(self.connection.deprovision_environment("id" => self.id).body["request"])
74
- end
75
-
76
- def destroy!
77
- connection.requests.new(self.connection.destroy_environment("id" => self.id).body["request"])
78
- end
79
-
80
- def application
81
- if self.application_id
82
- connection.applications.get(self.application_id)
83
- end
84
- end
85
-
86
- def blueprints
87
- requires :id
88
- self.connection.blueprints.all(environment: self.identity)
89
- end
90
-
91
- def save_blueprint(options={})
92
- requires :id
93
- raise "name is a required key" unless options["name"]
94
- self.connection.blueprints.new(self.connection.blueprint_environment("id" => self.id, "name" => options["name"]).body["blueprint"])
95
- end
96
-
97
- def upload_recipes(file)
98
- # file should be a StringIO
99
- self.connection.upload_recipes_for_environment("file" => file, "id" => self.identity)
100
- end
101
-
102
- def maintenance(application, action)
103
- requires :identity
104
-
105
- params = {
106
- "id" => self.identity,
107
- "application_id" => application.id,
108
- "maintenance" => {
109
- "action" => action
110
- }
111
- }
112
-
113
- self.connection.requests.new(self.connection.change_environment_maintenance(params).body["request"])
114
- end
115
-
116
- def restart_app_servers
117
- params = {
118
- "id" => self.identity,
119
- "application_id" => self.applications.first.id,
120
- }
121
-
122
- self.connection.requests.new(self.connection.restart_environment_app_servers(params).body["request"])
123
- end
124
-
125
- def download_recipes
126
- tempfile = Tempfile.new("cookbooks-#{self.name}.tar.gz")
127
- File.open(tempfile, 'wb') { |f| f.write self.connection.request(url: self.custom_recipes).body }
128
- tempfile
129
- end
130
-
131
- def boot(options={})
132
- options = Cistern::Hash.stringify_keys(options)
133
- connection.requests.new(self.connection.boot_environment(boot_params(options)).body["request"])
134
- end
135
-
136
- def unassign!
137
- requires :id
138
- merge_attributes(self.connection.unassign_environment("id" => self.id).body["environment"])
139
- end
140
-
141
- def save!
142
- if new_record?
143
- requires :application_id, :account_id, :region
144
-
145
- params = {
146
- "url" => self.collection.url,
147
- "account" => self.account_id,
148
- "environment" => {
149
- "name" => self.name,
150
- "application_id" => self.application_id,
151
- "region" => self.region,
152
- "stack_name" => self.stack_name,
153
- "database_stack" => self.database_stack,
154
- "release_label" => self.release_label,
155
- "language" => self.language,
156
- "database_backup_limit" => self.database_backup_limit,
157
- "encrypted_ebs_for_everything" => self.encrypted_ebs_for_everything,
158
- },
159
- }
160
-
161
- params["environment"].merge!("database_service" => self.database_service.id) if self.database_service
162
-
163
- merge_attributes(self.connection.create_environment(params).body["environment"])
164
- else
165
- requires :identity
166
- attributes = Cistern::Hash.slice(Cistern::Hash.stringify_keys(self.attributes), "nane", "release_label")
167
- connection.update_environment(
168
- "id" => self.identity,
169
- "environment" => attributes,
170
- )
171
- end
172
- end
173
-
174
- private
175
-
176
- def boot_params(options)
177
- params = {
178
- "cluster_configuration" => {}
179
- }
180
-
181
- if options["blueprint_id"]
182
- params = {
183
- "cluster_configuration" => {
184
- "blueprint_id" => options["blueprint_id"],
185
- "configuration" => {}
186
- }
187
- }
188
- if ip_id = options["ip_id"]
189
- params["cluster_configuration"]["configuration"]["ip_id"] = ip_id
190
- end
191
- else
192
- raise "configuration is a required key" unless options["configuration"]
193
- raise "configuration['type'] is required" unless options["configuration"]["type"]
194
- end
195
-
196
- if options['configuration']
197
- missing_keys = []
198
-
199
- configuration = options["configuration"]
200
- required_keys = %w(flavor volume_size mnt_volume_size)
201
-
202
- if self.database_service
203
- raise "application_id is a required key" unless options["application_id"]
204
-
205
- configuration["logical_database"] = "#{self.name}_#{self.application.name}"
206
- end
207
-
208
- if configuration["type"] == 'custom'
209
- apps = configuration["apps"] ||= {}
210
- db_master = configuration["db_master"] ||= {}
211
- db_slaves = configuration["db_slaves"] ||= []
212
- utils = configuration["utils"] ||= []
213
-
214
- missing_keys << "apps" unless apps.any?
215
- (required_keys + ["count"]).each do |required|
216
- missing_keys << "apps[#{required}]" unless apps[required]
217
- end
218
-
219
- unless configuration["database_service_id"]
220
- missing_keys << "db_master" unless db_master.any?
221
-
222
- required_keys.each do |key|
223
- missing_keys << "db_master[#{key}]" unless db_master[key]
224
- end
225
- end
226
-
227
- db_slaves.each_with_index do |slave, i|
228
- (required_keys - ["volume_size", "mnt_volume_size"]).each do |key|
229
- missing_keys << "db_slaves[#{i}][#{key}]" unless slave[key]
230
- end
231
- end
232
-
233
- utils.each_with_index do |util, i|
234
- required_keys.each do |key|
235
- missing_keys << "utils[#{i}][#{key}]" unless util[key]
236
- end
237
- end
238
- end
239
-
240
- if missing_keys.any?
241
- raise "Invalid configuration - The following keys are missing from the configuration:\n#{missing_keys.join(",\n")}"
242
- end
243
-
244
- params["cluster_configuration"]["configuration"] = configuration
245
- end
246
- params.merge("id" => self.id)
247
- end
248
- end
1
+ class Ey::Core::Client::Environment < Ey::Core::Model
2
+ extend Ey::Core::Associations
3
+
4
+ identity :id
5
+
6
+ attribute :classic, type: :boolean
7
+ attribute :created_at, type: :time
8
+ attribute :custom_recipes
9
+ attribute :database_stack
10
+ attribute :deleted_at, type: :time
11
+ attribute :deploy_method
12
+ attribute :framework_env
13
+ attribute :language
14
+ attribute :monitor_url
15
+ attribute :name
16
+ attribute :region
17
+ attribute :release_label
18
+ attribute :stack_name
19
+ attribute :username
20
+ attribute :service_level
21
+ attribute :database_backup_limit
22
+ attribute :encrypted_ebs_for_everything
23
+
24
+ has_one :account
25
+ has_one :database_service
26
+ has_one :firewall
27
+ has_one :auto_scaling_group
28
+ has_one :assignee, assoc_name: :user, resource: :user
29
+
30
+ has_many :costs
31
+ has_many :keypairs
32
+ has_many :servers
33
+ has_many :applications
34
+ has_many :logical_databases
35
+ has_many :deployments
36
+ has_many :environment_variables
37
+
38
+ attr_accessor :application_id
39
+
40
+ def latest_deploy(app)
41
+ deployments = connection.deployments.all(environment_id: self.id, application_id: app.id)
42
+ deployments.first
43
+ end
44
+
45
+ # @param application [Ey::Core::Client::Application]
46
+ # @option opts [Ey::Core::Client::ApplicationArchive] :archive
47
+ def deploy(application, opts={})
48
+ raise "Environment does not contain an app deployment for this application" unless self.applications.get(application.id)
49
+ raise ":ref is a required key" unless opts[:ref]
50
+ connection.requests.new(connection.deploy_environment_application({"deploy" => opts}.merge("id" => self.id, "application_id" => application.id)).body["request"])
51
+ end
52
+
53
+ # @param application [Ey::Core::Client::Application]
54
+ # @param action [String]
55
+ # @option opts [Ey::Core::Client::ApplicationArchive] :archive
56
+ def run_action(application, action, task={})
57
+ requires :id
58
+
59
+ response = self.connection.run_environment_application_action(
60
+ "environment" => self.id,
61
+ "application" => application.id,
62
+ "task" => task,
63
+ "action" => action,
64
+ )
65
+ connection.requests.new(response.body["request"])
66
+ end
67
+
68
+ def apply(type="main", data={})
69
+ connection.requests.new(self.connection.apply_environment_updates("id" => self.id, "type" => type, "data" => data).body["request"])
70
+ end
71
+
72
+ def deprovision
73
+ connection.requests.new(self.connection.deprovision_environment("id" => self.id).body["request"])
74
+ end
75
+
76
+ def destroy!
77
+ connection.requests.new(self.connection.destroy_environment("id" => self.id).body["request"])
78
+ end
79
+
80
+ def application
81
+ if self.application_id
82
+ connection.applications.get(self.application_id)
83
+ end
84
+ end
85
+
86
+ def blueprints
87
+ requires :id
88
+ self.connection.blueprints.all(environment: self.identity)
89
+ end
90
+
91
+ def save_blueprint(options={})
92
+ requires :id
93
+ raise "name is a required key" unless options["name"]
94
+ self.connection.blueprints.new(self.connection.blueprint_environment("id" => self.id, "name" => options["name"]).body["blueprint"])
95
+ end
96
+
97
+ def upload_recipes(file)
98
+ # file should be a StringIO
99
+ self.connection.upload_recipes_for_environment("file" => file, "id" => self.identity)
100
+ end
101
+
102
+ def maintenance(application, action)
103
+ requires :identity
104
+
105
+ params = {
106
+ "id" => self.identity,
107
+ "application_id" => application.id,
108
+ "maintenance" => {
109
+ "action" => action
110
+ }
111
+ }
112
+
113
+ self.connection.requests.new(self.connection.change_environment_maintenance(params).body["request"])
114
+ end
115
+
116
+ def restart_app_servers
117
+ params = {
118
+ "id" => self.identity,
119
+ "application_id" => self.applications.first.id,
120
+ }
121
+
122
+ self.connection.requests.new(self.connection.restart_environment_app_servers(params).body["request"])
123
+ end
124
+
125
+ def download_recipes
126
+ tempfile = Tempfile.new("cookbooks-#{self.name}.tar.gz")
127
+ File.open(tempfile, 'wb') { |f| f.write self.connection.request(url: self.custom_recipes).body }
128
+ tempfile
129
+ end
130
+
131
+ def boot(options={})
132
+ options = Cistern::Hash.stringify_keys(options)
133
+ connection.requests.new(self.connection.boot_environment(boot_params(options)).body["request"])
134
+ end
135
+
136
+ def unassign!
137
+ requires :id
138
+ merge_attributes(self.connection.unassign_environment("id" => self.id).body["environment"])
139
+ end
140
+
141
+ def save!
142
+ if new_record?
143
+ requires :application_id, :account_id, :region
144
+
145
+ params = {
146
+ "url" => self.collection.url,
147
+ "account" => self.account_id,
148
+ "environment" => {
149
+ "name" => self.name,
150
+ "application_id" => self.application_id,
151
+ "region" => self.region,
152
+ "stack_name" => self.stack_name,
153
+ "database_stack" => self.database_stack,
154
+ "release_label" => self.release_label,
155
+ "language" => self.language,
156
+ "database_backup_limit" => self.database_backup_limit,
157
+ "encrypted_ebs_for_everything" => self.encrypted_ebs_for_everything,
158
+ },
159
+ }
160
+
161
+ params["environment"].merge!("database_service" => self.database_service.id) if self.database_service
162
+
163
+ merge_attributes(self.connection.create_environment(params).body["environment"])
164
+ else
165
+ requires :identity
166
+ attributes = Cistern::Hash.slice(Cistern::Hash.stringify_keys(self.attributes), "nane", "release_label")
167
+ connection.update_environment(
168
+ "id" => self.identity,
169
+ "environment" => attributes,
170
+ )
171
+ end
172
+ end
173
+
174
+ private
175
+
176
+ def boot_params(options)
177
+ params = {
178
+ "cluster_configuration" => {}
179
+ }
180
+
181
+ if options["blueprint_id"]
182
+ params = {
183
+ "cluster_configuration" => {
184
+ "blueprint_id" => options["blueprint_id"],
185
+ "configuration" => {}
186
+ }
187
+ }
188
+ if ip_id = options["ip_id"]
189
+ params["cluster_configuration"]["configuration"]["ip_id"] = ip_id
190
+ end
191
+ else
192
+ raise "configuration is a required key" unless options["configuration"]
193
+ raise "configuration['type'] is required" unless options["configuration"]["type"]
194
+ end
195
+
196
+ if options['configuration']
197
+ missing_keys = []
198
+
199
+ configuration = options["configuration"]
200
+ required_keys = %w(flavor volume_size mnt_volume_size)
201
+
202
+ if self.database_service
203
+ raise "application_id is a required key" unless options["application_id"]
204
+
205
+ configuration["logical_database"] = "#{self.name}_#{self.application.name}"
206
+ end
207
+
208
+ if configuration["type"] == 'custom'
209
+ apps = configuration["apps"] ||= {}
210
+ db_master = configuration["db_master"] ||= {}
211
+ db_slaves = configuration["db_slaves"] ||= []
212
+ utils = configuration["utils"] ||= []
213
+
214
+ missing_keys << "apps" unless apps.any?
215
+ (required_keys + ["count"]).each do |required|
216
+ missing_keys << "apps[#{required}]" unless apps[required]
217
+ end
218
+
219
+ unless configuration["database_service_id"]
220
+ missing_keys << "db_master" unless db_master.any?
221
+
222
+ required_keys.each do |key|
223
+ missing_keys << "db_master[#{key}]" unless db_master[key]
224
+ end
225
+ end
226
+
227
+ db_slaves.each_with_index do |slave, i|
228
+ (required_keys - ["volume_size", "mnt_volume_size"]).each do |key|
229
+ missing_keys << "db_slaves[#{i}][#{key}]" unless slave[key]
230
+ end
231
+ end
232
+
233
+ utils.each_with_index do |util, i|
234
+ required_keys.each do |key|
235
+ missing_keys << "utils[#{i}][#{key}]" unless util[key]
236
+ end
237
+ end
238
+ end
239
+
240
+ if missing_keys.any?
241
+ raise "Invalid configuration - The following keys are missing from the configuration:\n#{missing_keys.join(",\n")}"
242
+ end
243
+
244
+ params["cluster_configuration"]["configuration"] = configuration
245
+ end
246
+ params.merge("id" => self.id)
247
+ end
248
+ end