ey-core 3.4.0 → 3.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +5 -5
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +1 -0
  4. data/CHANGELOG.md +27 -5
  5. data/Gemfile +0 -1
  6. data/README.md +65 -8
  7. data/Rakefile +4 -1
  8. data/ey-core.gemspec +9 -5
  9. data/features/accounts.feature +13 -0
  10. data/features/applications.feature +29 -0
  11. data/features/current_user.feature +14 -0
  12. data/features/docker_registry_credentials.feature +21 -0
  13. data/features/environment_variables.feature +54 -0
  14. data/features/environments.feature +30 -0
  15. data/features/init.feature +6 -0
  16. data/features/login.feature +6 -0
  17. data/features/scp.feature +6 -0
  18. data/features/step_definitions/accounts_steps.rb +37 -0
  19. data/features/step_definitions/applications_steps.rb +39 -0
  20. data/features/step_definitions/current_user_steps.rb +11 -0
  21. data/features/step_definitions/deprecated_command_steps.rb +3 -0
  22. data/features/step_definitions/docker_registry_credentials_steps.rb +3 -0
  23. data/features/step_definitions/environment_variables_steps.rb +51 -0
  24. data/features/step_definitions/environments_steps.rb +52 -0
  25. data/features/step_definitions/version_steps.rb +3 -0
  26. data/features/support/account_helpers.rb +89 -0
  27. data/features/support/app_helpers.rb +19 -0
  28. data/features/support/aruba.rb +1 -0
  29. data/features/support/boilerplate.rb +1 -0
  30. data/features/support/client_helpers.rb +36 -0
  31. data/features/support/config_file_helpers.rb +42 -0
  32. data/features/support/core.rb +19 -0
  33. data/features/support/deployment_helpers.rb +19 -0
  34. data/features/support/env.rb +40 -0
  35. data/features/support/environment_helpers.rb +23 -0
  36. data/features/support/environment_variable_helpers.rb +20 -0
  37. data/features/support/fake_kernel.rb +23 -0
  38. data/features/support/io.rb +5 -0
  39. data/features/support/mock_api.rb +20 -0
  40. data/features/support/output_helpers.rb +7 -0
  41. data/features/support/resource_helpers.rb +201 -0
  42. data/features/support/server_helpers.rb +27 -0
  43. data/features/version.feature +8 -0
  44. data/features/whoami.feature +14 -0
  45. data/lib/ey-core/cli/deploy.rb +4 -4
  46. data/lib/ey-core/cli/docker_registry_login.rb +29 -0
  47. data/lib/ey-core/cli/environment_variables.rb +71 -0
  48. data/lib/ey-core/cli/helpers/core.rb +29 -0
  49. data/lib/ey-core/cli/main.rb +5 -4
  50. data/lib/ey-core/cli/servers.rb +35 -17
  51. data/lib/ey-core/cli/ssh.rb +1 -1
  52. data/lib/ey-core/client.rb +35 -0
  53. data/lib/ey-core/client/mock.rb +5 -0
  54. data/lib/ey-core/collections/auto_scaling_alarms.rb +8 -0
  55. data/lib/ey-core/collections/auto_scaling_groups.rb +8 -0
  56. data/lib/ey-core/collections/auto_scaling_policies.rb +33 -0
  57. data/lib/ey-core/collections/container_clusters.rb +9 -0
  58. data/lib/ey-core/collections/container_service_deployments.rb +17 -0
  59. data/lib/ey-core/collections/environment_variables.rb +8 -0
  60. data/lib/ey-core/collections/servers.rb +4 -0
  61. data/lib/ey-core/models/account.rb +10 -0
  62. data/lib/ey-core/models/address.rb +2 -0
  63. data/lib/ey-core/models/application.rb +1 -0
  64. data/lib/ey-core/models/auto_scaling_alarm.rb +54 -0
  65. data/lib/ey-core/models/auto_scaling_group.rb +75 -0
  66. data/lib/ey-core/models/base_auto_scaling_policy.rb +61 -0
  67. data/lib/ey-core/models/container_service_deployment.rb +17 -0
  68. data/lib/ey-core/models/environment.rb +60 -47
  69. data/lib/ey-core/models/environment_variable.rb +29 -0
  70. data/lib/ey-core/models/request.rb +6 -0
  71. data/lib/ey-core/models/server.rb +2 -0
  72. data/lib/ey-core/models/simple_auto_scaling_policy.rb +24 -0
  73. data/lib/ey-core/models/step_auto_scaling_policy.rb +24 -0
  74. data/lib/ey-core/models/target_auto_scaling_policy.rb +24 -0
  75. data/lib/ey-core/requests/boot_environment.rb +1 -1
  76. data/lib/ey-core/requests/create_account.rb +5 -0
  77. data/lib/ey-core/requests/create_address.rb +1 -0
  78. data/lib/ey-core/requests/create_application.rb +8 -7
  79. data/lib/ey-core/requests/create_auto_scaling_alarm.rb +69 -0
  80. data/lib/ey-core/requests/create_auto_scaling_group.rb +62 -0
  81. data/lib/ey-core/requests/create_auto_scaling_policy.rb +68 -0
  82. data/lib/ey-core/requests/create_environment.rb +2 -0
  83. data/lib/ey-core/requests/create_environment_variable.rb +39 -0
  84. data/lib/ey-core/requests/create_user.rb +8 -6
  85. data/lib/ey-core/requests/destroy_auto_scaling_alarm.rb +49 -0
  86. data/lib/ey-core/requests/destroy_auto_scaling_group.rb +44 -0
  87. data/lib/ey-core/requests/destroy_auto_scaling_policy.rb +49 -0
  88. data/lib/ey-core/requests/discover_container_service_deployments.rb +71 -0
  89. data/lib/ey-core/requests/discover_server.rb +60 -0
  90. data/lib/ey-core/requests/get_applications.rb +1 -1
  91. data/lib/ey-core/requests/get_auto_scaling_alarm.rb +27 -0
  92. data/lib/ey-core/requests/get_auto_scaling_alarms.rb +34 -0
  93. data/lib/ey-core/requests/get_auto_scaling_group.rb +21 -0
  94. data/lib/ey-core/requests/get_auto_scaling_groups.rb +29 -0
  95. data/lib/ey-core/requests/get_auto_scaling_policies.rb +46 -0
  96. data/lib/ey-core/requests/get_auto_scaling_policy.rb +27 -0
  97. data/lib/ey-core/requests/get_deployments.rb +1 -1
  98. data/lib/ey-core/requests/get_environment_variable.rb +19 -0
  99. data/lib/ey-core/requests/get_environment_variables.rb +29 -0
  100. data/lib/ey-core/requests/get_environments.rb +1 -1
  101. data/lib/ey-core/requests/get_ssl_certificate.rb +1 -1
  102. data/lib/ey-core/requests/retrieve_docker_registry_credentials.rb +24 -0
  103. data/lib/ey-core/requests/update_auto_scaling_alarm.rb +45 -0
  104. data/lib/ey-core/requests/update_auto_scaling_group.rb +45 -0
  105. data/lib/ey-core/requests/update_auto_scaling_policy.rb +46 -0
  106. data/lib/ey-core/requests/update_environment_variable.rb +25 -0
  107. data/lib/ey-core/test_helpers.rb +2 -0
  108. data/lib/ey-core/test_helpers/auto_scaling_helpers.rb +35 -0
  109. data/lib/ey-core/version.rb +1 -1
  110. data/spec/addresses_spec.rb +2 -1
  111. data/spec/auto_scaling_alarms_spec.rb +40 -0
  112. data/spec/auto_scaling_groups_spec.rb +28 -0
  113. data/spec/auto_scaling_policies_spec.rb +94 -0
  114. data/spec/docker_registry_credentials_spec.rb +16 -0
  115. data/spec/environments_spec.rb +18 -0
  116. data/spec/servers_spec.rb +8 -0
  117. data/spec/spec_helper.rb +7 -0
  118. data/spec/support/core.rb +0 -2
  119. metadata +192 -18
@@ -0,0 +1,49 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def destroy_auto_scaling_policy(params = {})
4
+ id = params["id"]
5
+ url = params["url"]
6
+
7
+ request(
8
+ :method => :delete,
9
+ :url => url,
10
+ :path => "/auto_scaling_policies/#{id}",
11
+ )
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def destroy_auto_scaling_policy(params = {})
17
+ request_id = self.uuid
18
+ url = params.delete("url")
19
+
20
+ auto_scaling_policy_id = params["id"] || url && url.split('/').last
21
+
22
+ auto_scaling_policy = self.data[:auto_scaling_policies][auto_scaling_policy_id]
23
+ auto_scaling_policy.merge!(
24
+ "deleted_at" => Time.now,
25
+ "resource_url" => url_for("/auto_scaling_policies/#{auto_scaling_policy_id}")
26
+ )
27
+
28
+ auto_scaling_group = find(
29
+ :auto_scaling_groups,
30
+ resource_identity(auto_scaling_policy["auto_scaling_group"])
31
+ )
32
+ auto_scaling_group.delete("auto_scaling_policy")
33
+
34
+ self.data[:requests][request_id] = {
35
+ "id" => request_id,
36
+ "finished_at" => nil,
37
+ "successful" => "true",
38
+ "started_at" => Time.now,
39
+ "resource" => [:auto_scaling_policies, auto_scaling_policy_id, auto_scaling_policy],
40
+ "type" => "deprovision_auto_scaling_policy",
41
+ }
42
+
43
+ response(
44
+ body: { "request" => self.data[:requests][request_id] },
45
+ status: 201
46
+ )
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,71 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def discover_container_service_deployments(params={})
4
+ url = params.delete("url")
5
+
6
+ request(
7
+ :method => :get,
8
+ :url => url,
9
+ :params => params,
10
+ :path => "/container_service_deployments/discover",
11
+ )
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def discover_container_service_deployments(params={})
17
+ extract_url_params!(params)
18
+
19
+ callback_url = params.delete("callback_url")
20
+ deployment_id = self.uuid
21
+ resource_id = self.uuid
22
+
23
+ existing_deploymens = self.data[:container_service_deployments].values.select do |deployment|
24
+ deployment["container_service_id"] == container_service["id"]
25
+ end
26
+ existing_deploymens = nil if existing_deploymens.empty?
27
+
28
+ resources = existing_deploymens || [{
29
+ "id" => deployment_id,
30
+ "container_service_id" => params["container_service_id"],
31
+ "public_ip_address" => "123.456.789.123",
32
+ "private_ip_address" => "10.0.1.2",
33
+ "container_instance_id" => SecureRandom.uuid,
34
+ "port_mappings" => [{
35
+ "container_port" => "80",
36
+ "host_port" => "80",
37
+ "protocol" => "tcp"
38
+ }],
39
+ "provisioned_id" => resource_id,
40
+ "health_status" => "HEALTHY",
41
+ "task_arn" => SecureRandom.uuid,
42
+ "container_health_status" => [{
43
+ "container_arn" => SecureRandom.uuid,
44
+ "health_status" => SecureRandom.uuid
45
+ }]
46
+ }]
47
+
48
+ request = {
49
+ "id" => request_id,
50
+ "type" => "discover_container_service_deployments",
51
+ "successful" => true,
52
+ "started_at" => Time.now,
53
+ "finished_at" => nil,
54
+ "resource" => [:container_service_deployments, resource_id, resources, "/container_service_deployments"]
55
+ }
56
+
57
+ self.data[:container_service_deployments][deployment_id] = request
58
+
59
+ response_hash = request.dup
60
+ response_hash.delete("resource")
61
+
62
+ response(
63
+ :body => {"request" => response_hash},
64
+ :status => 200,
65
+ :headers => {
66
+ "Content-Type" => "application/json; charset=utf8"
67
+ }
68
+ )
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,60 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def discover_server(options={})
4
+ provider_id = options.delete("provider")
5
+
6
+ request(
7
+ :method => :post,
8
+ :path => "/providers/#{provider_id}/servers/discover",
9
+ :body => options
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def discover_server(options={})
16
+ options = Cistern::Hash.stringify_keys(options)
17
+
18
+ provider_id = options.delete("provider")
19
+ request_id = self.uuid
20
+
21
+ options["server"]["role"] ||= "app"
22
+ options["server"]["flavor"] ||= "m4.large"
23
+
24
+ server = self.data[:servers].values.detect do |s|
25
+ !s["deleted_at"] && s["provider"] == url_for("/providers/#{provider_id}") && s["provisioned_id"] == options["server"]["provisioned_id"]
26
+ end
27
+
28
+ resource = if server
29
+ server
30
+ else
31
+ if auto_scaling_group_id = options["auto_scaling_group"]
32
+ find(:auto_scaling_groups, auto_scaling_group_id)
33
+ end
34
+
35
+ s = self.requests.new(create_server(options).body["request"]).resource! # cheating
36
+ self.data[:servers][s.id]
37
+ end
38
+
39
+ request = {
40
+ "id" => request_id,
41
+ "type" => "discover_server",
42
+ "successful" => true,
43
+ "started_at" => Time.now,
44
+ "finished_at" => nil,
45
+ "resource_url" => url_for("/servers/#{resource["id"]}"),
46
+ "resource" => [:servers, resource["id"], resource],
47
+ }
48
+
49
+ self.data[:requests][request_id] = request
50
+
51
+ response_hash = request.dup
52
+ response_hash.delete("resource")
53
+
54
+ response(
55
+ :body => {"request" => response_hash},
56
+ :status => 201,
57
+ )
58
+ end
59
+ end
60
+ end
@@ -17,7 +17,7 @@ class Ey::Core::Client
17
17
  def get_applications(params={})
18
18
  extract_url_params!(params)
19
19
 
20
- headers, applications_page = search_and_page(params, :applications, search_keys: %w[type repository account name environment])
20
+ headers, applications_page = search_and_page(params, :applications, search_keys: %w[id type repository account name environment])
21
21
 
22
22
  response(
23
23
  :body => {"applications" => applications_page},
@@ -0,0 +1,27 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def get_auto_scaling_alarm(params = {})
4
+ id = params["id"]
5
+ url = params["url"]
6
+
7
+ request(
8
+ :method => :get,
9
+ :path => "auto_scaling_alarms/#{id}",
10
+ :url => url
11
+ )
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def get_auto_scaling_alarm(params = {})
17
+ response(
18
+ :body => {
19
+ "auto_scaling_alarm" => self.find(
20
+ :auto_scaling_alarms,
21
+ resource_identity(params)
22
+ )
23
+ },
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,34 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def get_auto_scaling_alarms(params = {})
4
+ query = Ey::Core.paging_parameters(params)
5
+ url = params.delete("url")
6
+
7
+ request(
8
+ :params => params,
9
+ :path => "/auto_scaling_alarms",
10
+ :query => params,
11
+ :url => url,
12
+ )
13
+ end
14
+ end
15
+
16
+ class Mock
17
+ def get_auto_scaling_alarms(params = {})
18
+ extract_url_params!(params)
19
+
20
+ headers, auto_scaling_alarms_page = search_and_page(
21
+ params,
22
+ :auto_scaling_alarms,
23
+ search_keys: %w{ id auto_scaling_policy },
24
+ resources: data[:auto_scaling_alarms]
25
+ )
26
+
27
+ response(
28
+ :body => { "auto_scaling_alarms" => auto_scaling_alarms_page },
29
+ :status => 200,
30
+ :headers => headers
31
+ )
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def get_auto_scaling_group(params={})
4
+ id = params["id"]
5
+ url = params["url"]
6
+
7
+ request(
8
+ :path => "auto_scaling_groups/#{id}",
9
+ :url => url,
10
+ )
11
+ end
12
+ end # Real
13
+
14
+ class Mock
15
+ def get_auto_scaling_group(params={})
16
+ response(
17
+ :body => {"auto_scaling_group" => self.find(:auto_scaling_groups, resource_identity(params))},
18
+ )
19
+ end
20
+ end # Mock
21
+ end # Ey::Core::Client
@@ -0,0 +1,29 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def get_auto_scaling_groups(options={})
4
+ query = Ey::Core.paging_parameters(options)
5
+ url = options.delete("url")
6
+
7
+ request(
8
+ :params => options,
9
+ :query => query,
10
+ :path => "/auto_scaling_groups",
11
+ :url => url,
12
+ )
13
+ end
14
+ end
15
+
16
+ class Mock
17
+ def get_auto_scaling_groups(options={})
18
+ extract_url_params!(options)
19
+
20
+ headers, auto_scaling_groups_page = search_and_page(options, :auto_scaling_groups, search_keys: %w[environment environment_id account account_id provider provider_id provisioned_id])
21
+
22
+ response(
23
+ :body => {"auto_scaling_groups" => auto_scaling_groups_page},
24
+ :status => 200,
25
+ :headers => headers
26
+ )
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,46 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def get_auto_scaling_policies(params = {})
4
+ query = Ey::Core.paging_parameters(params)
5
+ url = params.delete("url")
6
+
7
+ request(
8
+ :params => params,
9
+ :path => "/auto_scaling_policies",
10
+ :query => params,
11
+ :url => url,
12
+ )
13
+ end
14
+ end
15
+
16
+ class Mock
17
+ def get_auto_scaling_policies(params = {})
18
+ extract_url_params!(params)
19
+
20
+ resources = data[:auto_scaling_policies].select { |_key, policy| filter_policy(params, policy) }
21
+ params.delete("types")
22
+
23
+ headers, auto_scaling_policies_page = search_and_page(
24
+ params,
25
+ :auto_scaling_policies,
26
+ search_keys: %w{ id auto_scaling_group },
27
+ resources: resources
28
+ )
29
+
30
+ response(
31
+ :body => { "auto_scaling_policies" => auto_scaling_policies_page },
32
+ :status => 200,
33
+ :headers => headers
34
+ )
35
+ end
36
+
37
+ private
38
+
39
+ def filter_policy(params, item)
40
+ return false if params["auto_scaling_group"] != item["auto_scaling_group"]
41
+
42
+ types = params["types"]
43
+ types.is_a?(::Array) && types.include?(item["type"])
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,27 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def get_auto_scaling_policy(params = {})
4
+ id = params["id"]
5
+ url = params["url"]
6
+
7
+ request(
8
+ :method => :get,
9
+ :path => "auto_scaling_policies/#{id}",
10
+ :url => url
11
+ )
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def get_auto_scaling_policy(params = {})
17
+ response(
18
+ :body => {
19
+ "auto_scaling_policy" => self.find(
20
+ :auto_scaling_policies,
21
+ resource_identity(params)
22
+ )
23
+ },
24
+ )
25
+ end
26
+ end
27
+ end
@@ -7,7 +7,7 @@ class Ey::Core::Client
7
7
  request(
8
8
  :params => params,
9
9
  :path => "/deployments",
10
- :query => params,
10
+ :query => query,
11
11
  :url => url,
12
12
  )
13
13
  end
@@ -0,0 +1,19 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def get_environment_variable(params={})
4
+ id = params.delete("id")
5
+ url = params.delete("url")
6
+
7
+ request(
8
+ :path => "environment_variables/#{id}",
9
+ :url => url,
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def get_environment_variable(params={})
16
+ response(body: {"environment_variable" => find(:environment_variables, resource_identity(params))})
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,29 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def get_environment_variables(params={})
4
+ query = Ey::Core.paging_parameters(params)
5
+ url = params.delete("url")
6
+
7
+ request(
8
+ :params => params,
9
+ :path => "/environment_variables",
10
+ :query => params,
11
+ :url => url,
12
+ )
13
+ end
14
+ end
15
+
16
+ class Mock
17
+ def get_environment_variables(params={})
18
+ extract_url_params!(params)
19
+
20
+ headers, environment_variables_page = search_and_page(params, :environment_variables, search_keys: %w(environment application))
21
+
22
+ response(
23
+ :body => {"environment_variables" => environment_variables_page},
24
+ :status => 200,
25
+ :headers => headers
26
+ )
27
+ end
28
+ end
29
+ end