ey-core 3.4.4 → 3.6.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +5 -5
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +27 -5
  4. data/Gemfile +1 -2
  5. data/README.md +65 -8
  6. data/ey-core.gemspec +6 -5
  7. data/features/docker_registry_credentials.feature +21 -0
  8. data/features/environment_variables.feature +54 -0
  9. data/features/step_definitions/accounts_steps.rb +14 -0
  10. data/features/step_definitions/applications_steps.rb +7 -14
  11. data/features/step_definitions/docker_registry_credentials_steps.rb +3 -0
  12. data/features/step_definitions/environment_variables_steps.rb +51 -0
  13. data/features/step_definitions/environments_steps.rb +15 -0
  14. data/features/support/environment_variable_helpers.rb +20 -0
  15. data/features/support/mock_api.rb +0 -1
  16. data/features/support/resource_helpers.rb +12 -0
  17. data/lib/ey-core/cli/deploy.rb +12 -9
  18. data/lib/ey-core/cli/docker_registry_login.rb +29 -0
  19. data/lib/ey-core/cli/environment_variables.rb +71 -0
  20. data/lib/ey-core/cli/helpers/chef.rb +1 -1
  21. data/lib/ey-core/cli/helpers/core.rb +32 -3
  22. data/lib/ey-core/cli/helpers/server_sieve.rb +7 -0
  23. data/lib/ey-core/cli/main.rb +5 -4
  24. data/lib/ey-core/cli/servers.rb +35 -17
  25. data/lib/ey-core/cli/ssh.rb +6 -0
  26. data/lib/ey-core/client/mock.rb +4 -0
  27. data/lib/ey-core/client.rb +27 -0
  28. data/lib/ey-core/collections/auto_scaling_alarms.rb +8 -0
  29. data/lib/ey-core/collections/auto_scaling_policies.rb +33 -0
  30. data/lib/ey-core/collections/container_clusters.rb +9 -0
  31. data/lib/ey-core/collections/container_service_deployments.rb +17 -0
  32. data/lib/ey-core/collections/environment_variables.rb +8 -0
  33. data/lib/ey-core/models/account.rb +10 -0
  34. data/lib/ey-core/models/address.rb +2 -0
  35. data/lib/ey-core/models/application.rb +1 -0
  36. data/lib/ey-core/models/auto_scaling_alarm.rb +54 -0
  37. data/lib/ey-core/models/auto_scaling_group.rb +26 -0
  38. data/lib/ey-core/models/base_auto_scaling_policy.rb +61 -0
  39. data/lib/ey-core/models/container_service_deployment.rb +17 -0
  40. data/lib/ey-core/models/deployment.rb +1 -0
  41. data/lib/ey-core/models/environment.rb +53 -47
  42. data/lib/ey-core/models/environment_variable.rb +29 -0
  43. data/lib/ey-core/models/request.rb +4 -0
  44. data/lib/ey-core/models/simple_auto_scaling_policy.rb +24 -0
  45. data/lib/ey-core/models/step_auto_scaling_policy.rb +24 -0
  46. data/lib/ey-core/models/target_auto_scaling_policy.rb +24 -0
  47. data/lib/ey-core/requests/create_account.rb +5 -0
  48. data/lib/ey-core/requests/create_address.rb +1 -0
  49. data/lib/ey-core/requests/create_application.rb +8 -7
  50. data/lib/ey-core/requests/create_auto_scaling_alarm.rb +69 -0
  51. data/lib/ey-core/requests/create_auto_scaling_policy.rb +68 -0
  52. data/lib/ey-core/requests/create_environment.rb +2 -1
  53. data/lib/ey-core/requests/create_environment_variable.rb +39 -0
  54. data/lib/ey-core/requests/create_user.rb +8 -6
  55. data/lib/ey-core/requests/deploy_environment_application.rb +1 -0
  56. data/lib/ey-core/requests/destroy_auto_scaling_alarm.rb +49 -0
  57. data/lib/ey-core/requests/destroy_auto_scaling_policy.rb +49 -0
  58. data/lib/ey-core/requests/discover_container_service_deployments.rb +71 -0
  59. data/lib/ey-core/requests/get_applications.rb +1 -1
  60. data/lib/ey-core/requests/get_auto_scaling_alarm.rb +27 -0
  61. data/lib/ey-core/requests/get_auto_scaling_alarms.rb +34 -0
  62. data/lib/ey-core/requests/get_auto_scaling_policies.rb +46 -0
  63. data/lib/ey-core/requests/get_auto_scaling_policy.rb +27 -0
  64. data/lib/ey-core/requests/get_deployments.rb +1 -1
  65. data/lib/ey-core/requests/get_environment_variable.rb +19 -0
  66. data/lib/ey-core/requests/get_environment_variables.rb +29 -0
  67. data/lib/ey-core/requests/get_environments.rb +1 -1
  68. data/lib/ey-core/requests/get_ssl_certificate.rb +1 -1
  69. data/lib/ey-core/requests/retrieve_docker_registry_credentials.rb +24 -0
  70. data/lib/ey-core/requests/update_auto_scaling_alarm.rb +45 -0
  71. data/lib/ey-core/requests/update_auto_scaling_policy.rb +46 -0
  72. data/lib/ey-core/requests/update_environment_variable.rb +25 -0
  73. data/lib/ey-core/test_helpers/auto_scaling_helpers.rb +35 -0
  74. data/lib/ey-core/test_helpers.rb +2 -0
  75. data/lib/ey-core/version.rb +1 -1
  76. data/spec/addresses_spec.rb +2 -1
  77. data/spec/auto_scaling_alarms_spec.rb +40 -0
  78. data/spec/auto_scaling_policies_spec.rb +94 -0
  79. data/spec/docker_registry_credentials_spec.rb +16 -0
  80. data/spec/spec_helper.rb +7 -0
  81. data/spec/support/core.rb +0 -2
  82. metadata +78 -18
@@ -0,0 +1,17 @@
1
+ class Ey::Core::Client::ContainerServiceDeployment < Ey::Core::Model
2
+ extend Ey::Core::Associations
3
+
4
+ identity :id
5
+
6
+ attribute :container_service_id
7
+ attribute :public_ip_address
8
+ attribute :private_ip_address
9
+ attribute :port_mappings
10
+ attribute :health_status
11
+ attribute :container_health_status
12
+ attribute :container_instance_id
13
+ attribute :task_arn
14
+ attribute :created_at, type: :time
15
+ attribute :updated_at, type: :time
16
+ attribute :deleted_at, type: :time
17
+ end
@@ -9,6 +9,7 @@ class Ey::Core::Client::Deployment < Ey::Core::Model
9
9
  attribute :migrate_command
10
10
  attribute :ref
11
11
  attribute :resolved_ref
12
+ attribute :serverside_version
12
13
  attribute :started_at, type: :time
13
14
  attribute :successful, type: :boolean
14
15
  attribute :verbose
@@ -33,6 +33,7 @@ class Ey::Core::Client::Environment < Ey::Core::Model
33
33
  has_many :applications
34
34
  has_many :logical_databases
35
35
  has_many :deployments
36
+ has_many :environment_variables
36
37
 
37
38
  attr_accessor :application_id
38
39
 
@@ -129,6 +130,54 @@ class Ey::Core::Client::Environment < Ey::Core::Model
129
130
 
130
131
  def boot(options={})
131
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
+
132
181
  if options["blueprint_id"]
133
182
  params = {
134
183
  "cluster_configuration" => {
@@ -139,12 +188,12 @@ class Ey::Core::Client::Environment < Ey::Core::Model
139
188
  if ip_id = options["ip_id"]
140
189
  params["cluster_configuration"]["configuration"]["ip_id"] = ip_id
141
190
  end
142
-
143
- self.connection.requests.new(self.connection.boot_environment(params.merge("id" => self.id)).body["request"])
144
191
  else
145
192
  raise "configuration is a required key" unless options["configuration"]
146
193
  raise "configuration['type'] is required" unless options["configuration"]["type"]
194
+ end
147
195
 
196
+ if options['configuration']
148
197
  missing_keys = []
149
198
 
150
199
  configuration = options["configuration"]
@@ -192,51 +241,8 @@ class Ey::Core::Client::Environment < Ey::Core::Model
192
241
  raise "Invalid configuration - The following keys are missing from the configuration:\n#{missing_keys.join(",\n")}"
193
242
  end
194
243
 
195
- params = {
196
- "cluster_configuration" => {
197
- "configuration" => configuration
198
- }
199
- }
200
-
201
- connection.requests.new(self.connection.boot_environment(params.merge("id" => self.id)).body["request"])
202
- end
203
- end
204
-
205
- def unassign!
206
- requires :id
207
- merge_attributes(self.connection.unassign_environment("id" => self.id).body["environment"])
208
- end
209
-
210
- def save!
211
- if new_record?
212
- requires :application_id, :account_id, :region
213
-
214
- params = {
215
- "url" => self.collection.url,
216
- "account" => self.account_id,
217
- "environment" => {
218
- "name" => self.name,
219
- "application_id" => self.application_id,
220
- "region" => self.region,
221
- "stack_name" => self.stack_name,
222
- "database_stack" => self.database_stack,
223
- "release_label" => self.release_label,
224
- "language" => self.language,
225
- "database_backup_limit" => self.database_backup_limit,
226
- "encrypted_ebs_for_everything" => self.encrypted_ebs_for_everything,
227
- },
228
- }
229
-
230
- params["environment"].merge!("database_service" => self.database_service.id) if self.database_service
231
-
232
- merge_attributes(self.connection.create_environment(params).body["environment"])
233
- else
234
- requires :identity
235
- attributes = Cistern::Hash.slice(Cistern::Hash.stringify_keys(self.attributes), "nane", "release_label")
236
- connection.update_environment(
237
- "id" => self.identity,
238
- "environment" => attributes,
239
- )
244
+ params["cluster_configuration"]["configuration"] = configuration
240
245
  end
246
+ params.merge("id" => self.id)
241
247
  end
242
248
  end
@@ -0,0 +1,29 @@
1
+ class Ey::Core::Client::EnvironmentVariable < Ey::Core::Model
2
+ extend Ey::Core::Associations
3
+
4
+ identity :id
5
+
6
+ attribute :application_id
7
+ attribute :application_name
8
+ attribute :environment_id
9
+ attribute :environment_name
10
+ attribute :name
11
+ attribute :value
12
+ attribute :sensitive
13
+
14
+ has_one :environment
15
+ has_one :application
16
+
17
+ def save!
18
+ requires :name, :value
19
+ params = Cistern::Hash.slice(Cistern::Hash.stringify_keys(attributes), "id", "name", "value")
20
+
21
+ if new_record?
22
+ requires :application_id, :environment_id
23
+ params.merge!("application_id" => application_id, "environment_id" => environment_id)
24
+ merge_attributes(self.connection.create_environment_variable(params).body["environment_variable"])
25
+ else
26
+ merge_attributes(self.connection.update_environment_variable(params).body["environment_variable"])
27
+ end
28
+ end
29
+ end
@@ -55,6 +55,10 @@ class Ey::Core::Client::Request < Ey::Core::Model
55
55
  self.connection.addresses.get!(resource_id)
56
56
  when /auto_scaling_group/
57
57
  self.connection.auto_scaling_groups.get!(resource_id)
58
+ when /auto_scaling_policy/
59
+ self.connection.auto_scaling_policies.get(resource_id)
60
+ when /auto_scaling_alarm/
61
+ self.connection.auto_scaling_alarms.get(resource_id)
58
62
  when /cluster_update/
59
63
  self.connection.cluster_updates.get!(resource_id)
60
64
  when /database_server_snapshot/
@@ -0,0 +1,24 @@
1
+ class Ey::Core::Client::SimpleAutoScalingPolicy < Ey::Core::Client::BaseAutoScalingPolicy
2
+ identity :id
3
+ attribute :auto_scaling_group_id, aliases: "auto_scaling_group", squash: ["id"]
4
+ attribute :cooldown, type: :integer
5
+ attribute :action_unit
6
+ attribute :action_type
7
+ attribute :action_value
8
+
9
+ has_many :auto_scaling_alarms
10
+
11
+ def policy_params
12
+ {
13
+ "cooldown" => cooldown,
14
+ "action_unit" => action_unit,
15
+ "action_type" => action_type,
16
+ "action_value" => action_value,
17
+ "type" => type
18
+ }
19
+ end
20
+
21
+ def policy_requires
22
+ requires :action_value, :action_type, :action_unit
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ class Ey::Core::Client::StepAutoScalingPolicy < Ey::Core::Client::BaseAutoScalingPolicy
2
+ identity :id
3
+ attribute :auto_scaling_group_id, aliases: "auto_scaling_group", squash: ["id"]
4
+ attribute :estimated_warmup, type: :integer
5
+ attribute :action_type
6
+ attribute :action_unit
7
+ attribute :steps, type: :array
8
+
9
+ has_many :auto_scaling_alarms
10
+
11
+ def policy_params
12
+ {
13
+ "estimated_warmup" => estimated_warmup,
14
+ "action_type" => action_type,
15
+ "action_unit" => action_unit,
16
+ "steps" => steps,
17
+ "type" => type
18
+ }
19
+ end
20
+
21
+ def policy_requires
22
+ requires :steps, :action_unit, :action_type, :estimated_warmup
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ class Ey::Core::Client::TargetAutoScalingPolicy < Ey::Core::Client::BaseAutoScalingPolicy
2
+ identity :id
3
+ attribute :auto_scaling_group_id, aliases: "auto_scaling_group", squash: ["id"]
4
+ attribute :estimated_warmup, type: :integer
5
+ attribute :target_value, type: :float
6
+ attribute :disable_scale_in, type: :boolean
7
+ attribute :metric_type
8
+
9
+ has_many :auto_scaling_alarms
10
+
11
+ def policy_params
12
+ {
13
+ "estimated_warmup" => estimated_warmup,
14
+ "target_value" => target_value,
15
+ "disable_scale_in" => disable_scale_in,
16
+ "metric_type" => metric_type,
17
+ "type" => type
18
+ }
19
+ end
20
+
21
+ def policy_requires
22
+ requires :target_value, :metric_type, :estimated_warmup
23
+ end
24
+ end
@@ -24,6 +24,11 @@ class Ey::Core::Client
24
24
 
25
25
  self.data[:accounts][resource_id] = resource.merge(:account_users => [owner_id], :account_owners => [owner_id])
26
26
 
27
+ resource.merge!(
28
+ :environments_url => url_for("/accounts/#{resource_id}/environments"),
29
+ :applications_url => url_for("/accounts/#{resource_id}/applications")
30
+ )
31
+
27
32
  response(
28
33
  :body => {"account" => resource},
29
34
  :status => 201,
@@ -14,6 +14,7 @@ class Ey::Core::Client
14
14
  request_id = self.uuid
15
15
  resource_id = self.serial_id
16
16
  provider_id = params["provider"]
17
+ scope = params["scope"] || "standard"
17
18
 
18
19
  self.find(:providers, provider_id)
19
20
 
@@ -40,13 +40,14 @@ class Ey::Core::Client
40
40
  end
41
41
 
42
42
  resource.merge!(
43
- "account" => url_for("/accounts/#{account_id}"),
44
- "archives" => url_for("/applications/#{resource_id}/archives"),
45
- "keypairs" => url_for("/applications/#{resource_id}/keypairs"),
46
- "language" => language,
47
- "created_at" => Time.now,
48
- "updated_at" => Time.now,
49
- "id" => resource_id,
43
+ "account" => url_for("/accounts/#{account_id}"),
44
+ "archives" => url_for("/applications/#{resource_id}/archives"),
45
+ "keypairs" => url_for("/applications/#{resource_id}/keypairs"),
46
+ "language" => language,
47
+ "created_at" => Time.now,
48
+ "updated_at" => Time.now,
49
+ "id" => resource_id,
50
+ "environment_variables" => url_for("/applications/#{resource_id}/environment_variables")
50
51
  )
51
52
 
52
53
  key = mock_ssh_key
@@ -0,0 +1,69 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def create_auto_scaling_alarm(options = {})
4
+ params = Cistern::Hash.stringify_keys(options)
5
+
6
+ url = params.delete("url")
7
+ auto_scaling_policy_id = params["auto_scaling_policy_id"]
8
+
9
+ body = {
10
+ auto_scaling_alarm: params,
11
+ auto_scaling_policy_id: auto_scaling_policy_id
12
+ }
13
+
14
+ request(
15
+ :method => :post,
16
+ :url => url,
17
+ :path => "/auto_scaling_policies/auto_scaling_alarms",
18
+ :body => body
19
+ )
20
+ end
21
+ end
22
+
23
+ class Mock
24
+ def create_auto_scaling_alarm(options = {})
25
+ params = Cistern::Hash.stringify_keys(options)
26
+
27
+ request_id = self.serial_id
28
+ resource_id = self.uuid
29
+
30
+ auto_scaling_policy_id = params.delete("auto_scaling_policy_id")
31
+ auto_scaling_policy = find(:auto_scaling_policies, auto_scaling_policy_id)
32
+
33
+ resource = params["auto_scaling_alarm"].dup
34
+ arn = "arn:aws:cloudwatch:eu-west-1:000000000000:metricAlarm:00000000-0000-0000-0000-000000000000:alarmName/#{resource["name"]}"
35
+
36
+ now = Time.now
37
+
38
+ resource.merge!(
39
+ "id" => resource_id,
40
+ "created_at" => now,
41
+ "auto_scaling_policy" => auto_scaling_policy["id"],
42
+ "provisioned_id" => arn,
43
+ "resource_url" => url_for("/auto_scaling_alarms/#{resource_id}")
44
+ )
45
+
46
+ request = {
47
+ "id" => request_id,
48
+ "created_at" => now - 2,
49
+ "updated_at" => now,
50
+ "started_at" => now - 1,
51
+ "finished_at" => now,
52
+ "message" => nil,
53
+ "read_channel" => nil,
54
+ "resource" => [:auto_scaling_alarms, resource_id, resource],
55
+ "resource_url" => url_for("/auto_scaling_alarms/#{resource_id}"),
56
+ "type" => "provision_auto_scaling_alarm",
57
+ "successful" => true,
58
+ }
59
+
60
+ self.data[:auto_scaling_alarms][resource_id] = resource
61
+ self.data[:requests][request_id] = request
62
+
63
+ response(
64
+ :body => { "request" => request },
65
+ :status => 200
66
+ )
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,68 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def create_auto_scaling_policy(options = {})
4
+ params = Cistern::Hash.stringify_keys(options)
5
+ url = params.delete("url")
6
+ auto_scaling_group_id = params.delete("auto_scaling_group_id")
7
+ body = {
8
+ auto_scaling_policy: params,
9
+ auto_scaling_group_id: auto_scaling_group_id
10
+ }
11
+
12
+ request(
13
+ :method => :post,
14
+ :url => url,
15
+ :path => "/auto_scaling_policies",
16
+ :body => body
17
+ )
18
+ end
19
+ end
20
+
21
+ class Mock
22
+ def create_auto_scaling_policy(options = {})
23
+ params = Cistern::Hash.stringify_keys(options)
24
+
25
+ request_id = self.serial_id
26
+ resource_id = self.uuid
27
+
28
+ auto_scaling_group_id = params.delete("auto_scaling_group_id")
29
+ auto_scaling_group = find(:auto_scaling_groups, auto_scaling_group_id)
30
+
31
+ resource = params["auto_scaling_policy"].dup
32
+ arn = "scalingPolicy:00000000-0000-0000-0000-000000000000:autoScalingGroupName/#{auto_scaling_group["name"]}:policyName/#{resource["name"]}"
33
+
34
+ now = Time.now
35
+
36
+ resource.merge!(
37
+ "id" => resource_id,
38
+ "created_at" => now,
39
+ "auto_scaling_group" => auto_scaling_group["id"],
40
+ "arn" => arn,
41
+ "resource_url" => url_for("/auto_scaling_policies/#{resource_id}"),
42
+ "auto_scaling_alarms" => url_for("/auto_scaling_alarms?auto_scaling_policy=#{resource_id}")
43
+ )
44
+
45
+ request = {
46
+ "id" => request_id,
47
+ "created_at" => now - 2,
48
+ "updated_at" => now,
49
+ "started_at" => now - 1,
50
+ "finished_at" => now,
51
+ "message" => nil,
52
+ "read_channel" => nil,
53
+ "resource" => [:auto_scaling_policies, resource_id, resource],
54
+ "resource_url" => url_for("/auto_scaling_policies/#{resource_id}"),
55
+ "type" => "provision_auto_scaling_policy",
56
+ "successful" => true,
57
+ }
58
+
59
+ self.data[:auto_scaling_policies][resource_id] = resource
60
+ self.data[:requests][request_id] = request
61
+
62
+ response(
63
+ :body => { "request" => request },
64
+ :status => 200
65
+ )
66
+ end
67
+ end
68
+ end
@@ -48,7 +48,8 @@ class Ey::Core::Client
48
48
  "stack_name" => "nginx_passenger4",
49
49
  "updated_at" => Time.now,
50
50
  "username" => "deploy",
51
- "service_level" => "default"
51
+ "service_level" => "default",
52
+ "environment_variables" => url_for("/environments/#{resource_id}/environment_variables")
52
53
  )
53
54
 
54
55
  self.data[:environments][resource_id] = resource
@@ -0,0 +1,39 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def create_environment_variable(_params={})
4
+ params = Cistern::Hash.stringify_keys(_params)
5
+ environment_id = params.delete("environment_id")
6
+ application_id = params.delete("application_id")
7
+ body = { environment_variable: params, environment_id: environment_id, application_id: application_id }
8
+
9
+ request(
10
+ :method => :post,
11
+ :path => "/environment_variables",
12
+ :body => body
13
+ )
14
+ end
15
+ end # Real
16
+
17
+ class Mock
18
+ def create_environment_variable(_params={})
19
+ params = Cistern::Hash.stringify_keys(_params)
20
+
21
+ resource_id = serial_id
22
+ environment = find(:environments, params["environment_id"])
23
+ application = find(:applications, params["application_id"])
24
+
25
+ params["id"] = resource_id
26
+ params["environment_name"] = environment["name"]
27
+ params["environment"] = url_for("/environments/#{environment['id']}")
28
+ params["application_name"] = application["name"]
29
+ params["application"] = url_for("/applications/#{application['id']}")
30
+
31
+ self.data[:environment_variables][resource_id] = params
32
+
33
+ response(
34
+ :body => {"environment_variable" => params},
35
+ :status => 201,
36
+ )
37
+ end
38
+ end # Mock
39
+ end # Ey::Core::Client
@@ -27,12 +27,14 @@ class Ey::Core::Client
27
27
  resource = params["user"].dup
28
28
 
29
29
  resource.merge!({
30
- "id" => resource_id,
31
- "accounts" => url_for("/users/#{resource_id}/accounts"),
32
- "memberships" => url_for("/users/#{resource_id}/memberships"),
33
- "keypairs" => url_for("/users/#{resource_id}/keypairs"),
34
- "tokens" => url_for("/users/#{resource_id}/tokens"),
35
- "api_token" => SecureRandom.hex(16),
30
+ "id" => resource_id,
31
+ "accounts" => url_for("/users/#{resource_id}/accounts"),
32
+ "memberships" => url_for("/users/#{resource_id}/memberships"),
33
+ "keypairs" => url_for("/users/#{resource_id}/keypairs"),
34
+ "tokens" => url_for("/users/#{resource_id}/tokens"),
35
+ "environments" => url_for("/accounts/#{resource_id}/environments"),
36
+ "applications" => url_for("/accounts/#{resource_id}/applications"),
37
+ "api_token" => SecureRandom.hex(16),
36
38
  })
37
39
 
38
40
  self.data[:tokens][token_id] = {
@@ -30,6 +30,7 @@ class Ey::Core::Client
30
30
  "migrate_command" => options["deploy"]["migrate"] ? (options["deploy"]["migrate_command"] || "rake db:migrate") : nil,
31
31
  "migrate" => options["deploy"]["migrate"] || false,
32
32
  "resolved_ref" => options["deploy"]["ref"],
33
+ "serverside_version" => options["deploy"]["serverside_version"],
33
34
  "started_at" => Time.now,
34
35
  "successful" => true
35
36
  }
@@ -0,0 +1,49 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def destroy_auto_scaling_alarm(params = {})
4
+ id = params["id"]
5
+ url = params["url"]
6
+
7
+ request(
8
+ :method => :delete,
9
+ :url => url,
10
+ :path => "/auto_scaling_alarms/#{id}",
11
+ )
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def destroy_auto_scaling_alarm(params = {})
17
+ request_id = self.uuid
18
+ url = params.delete("url")
19
+
20
+ auto_scaling_alarm_id = params["id"] || url && url.split('/').last
21
+
22
+ auto_scaling_alarm = self.data[:auto_scaling_alarms][auto_scaling_alarm_id]
23
+ auto_scaling_alarm.merge!(
24
+ "deleted_at" => Time.now,
25
+ "resource_url" => url_for("/auto_scaling_alarms/#{auto_scaling_alarm_id}")
26
+ )
27
+
28
+ auto_scaling_policy = find(
29
+ :auto_scaling_policies,
30
+ resource_identity(auto_scaling_alarm["auto_scaling_policy"])
31
+ )
32
+ auto_scaling_policy.delete("auto_scaling_alarm")
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_alarms, auto_scaling_alarm_id, auto_scaling_alarm],
40
+ "type" => "deprovision_auto_scaling_alarm",
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,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