ey-core 3.4.0 → 3.6.1

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 (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