ey-core 3.4.2 → 3.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) 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 +1 -2
  6. data/README.md +65 -8
  7. data/ey-core.gemspec +6 -5
  8. data/features/docker_registry_credentials.feature +21 -0
  9. data/features/environment_variables.feature +54 -0
  10. data/features/step_definitions/accounts_steps.rb +14 -0
  11. data/features/step_definitions/applications_steps.rb +7 -14
  12. data/features/step_definitions/docker_registry_credentials_steps.rb +3 -0
  13. data/features/step_definitions/environment_variables_steps.rb +51 -0
  14. data/features/step_definitions/environments_steps.rb +15 -0
  15. data/features/support/environment_variable_helpers.rb +20 -0
  16. data/features/support/mock_api.rb +0 -1
  17. data/features/support/resource_helpers.rb +12 -0
  18. data/lib/ey-core/cli/deploy.rb +14 -11
  19. data/lib/ey-core/cli/docker_registry_login.rb +29 -0
  20. data/lib/ey-core/cli/environment_variables.rb +71 -0
  21. data/lib/ey-core/cli/helpers/chef.rb +1 -1
  22. data/lib/ey-core/cli/helpers/core.rb +32 -3
  23. data/lib/ey-core/cli/helpers/server_sieve.rb +7 -0
  24. data/lib/ey-core/cli/main.rb +5 -4
  25. data/lib/ey-core/cli/servers.rb +35 -17
  26. data/lib/ey-core/cli/ssh.rb +7 -1
  27. data/lib/ey-core/client/mock.rb +5 -0
  28. data/lib/ey-core/client.rb +35 -0
  29. data/lib/ey-core/collections/auto_scaling_alarms.rb +8 -0
  30. data/lib/ey-core/collections/auto_scaling_groups.rb +8 -0
  31. data/lib/ey-core/collections/auto_scaling_policies.rb +33 -0
  32. data/lib/ey-core/collections/container_clusters.rb +9 -0
  33. data/lib/ey-core/collections/container_service_deployments.rb +17 -0
  34. data/lib/ey-core/collections/environment_variables.rb +8 -0
  35. data/lib/ey-core/collections/servers.rb +4 -0
  36. data/lib/ey-core/models/account.rb +10 -0
  37. data/lib/ey-core/models/address.rb +2 -0
  38. data/lib/ey-core/models/application.rb +1 -0
  39. data/lib/ey-core/models/auto_scaling_alarm.rb +54 -0
  40. data/lib/ey-core/models/auto_scaling_group.rb +75 -0
  41. data/lib/ey-core/models/base_auto_scaling_policy.rb +61 -0
  42. data/lib/ey-core/models/container_service_deployment.rb +17 -0
  43. data/lib/ey-core/models/deployment.rb +1 -0
  44. data/lib/ey-core/models/environment.rb +57 -45
  45. data/lib/ey-core/models/environment_variable.rb +29 -0
  46. data/lib/ey-core/models/request.rb +6 -0
  47. data/lib/ey-core/models/server.rb +2 -0
  48. data/lib/ey-core/models/simple_auto_scaling_policy.rb +24 -0
  49. data/lib/ey-core/models/step_auto_scaling_policy.rb +24 -0
  50. data/lib/ey-core/models/target_auto_scaling_policy.rb +24 -0
  51. data/lib/ey-core/requests/create_account.rb +5 -0
  52. data/lib/ey-core/requests/create_address.rb +1 -0
  53. data/lib/ey-core/requests/create_application.rb +8 -7
  54. data/lib/ey-core/requests/create_auto_scaling_alarm.rb +69 -0
  55. data/lib/ey-core/requests/create_auto_scaling_group.rb +62 -0
  56. data/lib/ey-core/requests/create_auto_scaling_policy.rb +68 -0
  57. data/lib/ey-core/requests/create_environment.rb +2 -0
  58. data/lib/ey-core/requests/create_environment_variable.rb +39 -0
  59. data/lib/ey-core/requests/create_user.rb +8 -6
  60. data/lib/ey-core/requests/deploy_environment_application.rb +1 -0
  61. data/lib/ey-core/requests/destroy_auto_scaling_alarm.rb +49 -0
  62. data/lib/ey-core/requests/destroy_auto_scaling_group.rb +44 -0
  63. data/lib/ey-core/requests/destroy_auto_scaling_policy.rb +49 -0
  64. data/lib/ey-core/requests/discover_container_service_deployments.rb +71 -0
  65. data/lib/ey-core/requests/discover_server.rb +60 -0
  66. data/lib/ey-core/requests/get_applications.rb +1 -1
  67. data/lib/ey-core/requests/get_auto_scaling_alarm.rb +27 -0
  68. data/lib/ey-core/requests/get_auto_scaling_alarms.rb +34 -0
  69. data/lib/ey-core/requests/get_auto_scaling_group.rb +21 -0
  70. data/lib/ey-core/requests/get_auto_scaling_groups.rb +29 -0
  71. data/lib/ey-core/requests/get_auto_scaling_policies.rb +46 -0
  72. data/lib/ey-core/requests/get_auto_scaling_policy.rb +27 -0
  73. data/lib/ey-core/requests/get_deployments.rb +1 -1
  74. data/lib/ey-core/requests/get_environment_variable.rb +19 -0
  75. data/lib/ey-core/requests/get_environment_variables.rb +29 -0
  76. data/lib/ey-core/requests/get_environments.rb +1 -1
  77. data/lib/ey-core/requests/get_ssl_certificate.rb +1 -1
  78. data/lib/ey-core/requests/retrieve_docker_registry_credentials.rb +24 -0
  79. data/lib/ey-core/requests/update_auto_scaling_alarm.rb +45 -0
  80. data/lib/ey-core/requests/update_auto_scaling_group.rb +45 -0
  81. data/lib/ey-core/requests/update_auto_scaling_policy.rb +46 -0
  82. data/lib/ey-core/requests/update_environment_variable.rb +25 -0
  83. data/lib/ey-core/test_helpers/auto_scaling_helpers.rb +35 -0
  84. data/lib/ey-core/test_helpers.rb +2 -0
  85. data/lib/ey-core/version.rb +1 -1
  86. data/spec/addresses_spec.rb +2 -1
  87. data/spec/auto_scaling_alarms_spec.rb +40 -0
  88. data/spec/auto_scaling_groups_spec.rb +28 -0
  89. data/spec/auto_scaling_policies_spec.rb +94 -0
  90. data/spec/docker_registry_credentials_spec.rb +16 -0
  91. data/spec/environments_spec.rb +18 -0
  92. data/spec/servers_spec.rb +8 -0
  93. data/spec/spec_helper.rb +7 -0
  94. data/spec/support/core.rb +0 -2
  95. metadata +88 -18
@@ -0,0 +1,75 @@
1
+ class Ey::Core::Client::AutoScalingGroup < Ey::Core::Model
2
+ extend Ey::Core::Associations
3
+
4
+ identity :id
5
+
6
+ attribute :created_at, type: :time
7
+ attribute :deleted_at, type: :time
8
+ attribute :location_id
9
+ attribute :provisioned_id
10
+ attribute :minimum_size
11
+ attribute :maximum_size
12
+ attribute :desired_capacity
13
+ attribute :default_cooldown
14
+ attribute :grace_period
15
+
16
+ has_one :environment
17
+
18
+ def destroy
19
+ connection.requests.new(connection.destroy_auto_scaling_group("id" => self.identity).body["request"])
20
+ end
21
+
22
+ def save!
23
+ if new_record?
24
+ requires :maximum_size, :minimum_size, :environment
25
+
26
+ params = {
27
+ "url" => self.collection.url,
28
+ "environment" => self.environment_id,
29
+ "auto_scaling_group" => {
30
+ "maximum_size" => self.maximum_size,
31
+ "minimum_size" => self.minimum_size,
32
+ }
33
+ }
34
+
35
+ connection.requests.new(connection.create_auto_scaling_group(params).body["request"])
36
+ else
37
+ requires :identity
38
+
39
+ params = {
40
+ "id" => self.identity,
41
+ "auto_scaling_group" => {
42
+ "maximum_size" => self.maximum_size,
43
+ "minimum_size" => self.minimum_size,
44
+ "desired_capacity" => self.desired_capacity
45
+ }
46
+ }
47
+
48
+ connection.requests.new(connection.update_auto_scaling_group(params).body["request"])
49
+ end
50
+ end
51
+
52
+ def simple_auto_scaling_policies
53
+ auto_scaling_policies("simple")
54
+ end
55
+
56
+ def step_auto_scaling_policies
57
+ auto_scaling_policies("step")
58
+ end
59
+
60
+ def target_auto_scaling_policies
61
+ auto_scaling_policies("target")
62
+ end
63
+
64
+ private
65
+
66
+ def auto_scaling_policies(types = nil)
67
+ requires :identity
68
+ data = connection.get_auto_scaling_policies(
69
+ "auto_scaling_group" => identity,
70
+ "types" => [*types]
71
+ ).body["auto_scaling_policies"]
72
+
73
+ connection.auto_scaling_policies.load(data)
74
+ end
75
+ end
@@ -0,0 +1,61 @@
1
+ class Ey::Core::Client::BaseAutoScalingPolicy < Ey::Core::Model
2
+ extend Ey::Core::Associations
3
+
4
+ identity :id, type: :integer
5
+
6
+ attribute :provisioned_id
7
+ attribute :provisioner_id
8
+ attribute :type
9
+ attribute :name
10
+ attribute :configuration
11
+ attribute :auto_scaling_group_id
12
+
13
+ has_one :auto_scaling_group
14
+
15
+ def save!
16
+ requires :auto_scaling_group_id, :type
17
+ params = {
18
+ "url" => self.collection.url,
19
+ "auto_scaling_policy" => {
20
+ "name" => self.name
21
+ }.merge(policy_params),
22
+ "auto_scaling_group_id" => self.auto_scaling_group_id
23
+ }
24
+
25
+ if new_record?
26
+ policy_requires
27
+ requires :name
28
+ connection.requests.new(connection.create_auto_scaling_policy(params).body["request"])
29
+ else
30
+ requires :identity
31
+ params.merge("id" => identity)
32
+ connection.requests.new(connection.update_auto_scaling_policy(params).body["request"])
33
+ end
34
+ end
35
+
36
+ def destroy!
37
+ connection.requests.new(
38
+ self.connection.destroy_auto_scaling_policy("id" => self.id).body["request"]
39
+ )
40
+ end
41
+
42
+ def alarm
43
+ requires :identity
44
+
45
+ data = self.connection.get_auto_scaling_alarms(
46
+ "auto_scaling_policy_id" => identity
47
+ ).body["auto_scaling_alarms"]
48
+
49
+ self.connection.auto_scaling_alarms.load(data).first
50
+ end
51
+
52
+ private
53
+
54
+ def policy_params
55
+ raise NotImplementedError
56
+ end
57
+
58
+ def policy_requires
59
+ raise NotImplementedError
60
+ end
61
+ end
@@ -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
@@ -17,10 +17,14 @@ class Ey::Core::Client::Environment < Ey::Core::Model
17
17
  attribute :release_label
18
18
  attribute :stack_name
19
19
  attribute :username
20
+ attribute :service_level
21
+ attribute :database_backup_limit
22
+ attribute :encrypted_ebs_for_everything
20
23
 
21
24
  has_one :account
22
25
  has_one :database_service
23
26
  has_one :firewall
27
+ has_one :auto_scaling_group
24
28
  has_one :assignee, assoc_name: :user, resource: :user
25
29
 
26
30
  has_many :costs
@@ -29,6 +33,7 @@ class Ey::Core::Client::Environment < Ey::Core::Model
29
33
  has_many :applications
30
34
  has_many :logical_databases
31
35
  has_many :deployments
36
+ has_many :environment_variables
32
37
 
33
38
  attr_accessor :application_id
34
39
 
@@ -125,6 +130,54 @@ class Ey::Core::Client::Environment < Ey::Core::Model
125
130
 
126
131
  def boot(options={})
127
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
+
128
181
  if options["blueprint_id"]
129
182
  params = {
130
183
  "cluster_configuration" => {
@@ -135,12 +188,12 @@ class Ey::Core::Client::Environment < Ey::Core::Model
135
188
  if ip_id = options["ip_id"]
136
189
  params["cluster_configuration"]["configuration"]["ip_id"] = ip_id
137
190
  end
138
-
139
- self.connection.requests.new(self.connection.boot_environment(params.merge("id" => self.id)).body["request"])
140
191
  else
141
192
  raise "configuration is a required key" unless options["configuration"]
142
193
  raise "configuration['type'] is required" unless options["configuration"]["type"]
194
+ end
143
195
 
196
+ if options['configuration']
144
197
  missing_keys = []
145
198
 
146
199
  configuration = options["configuration"]
@@ -188,49 +241,8 @@ class Ey::Core::Client::Environment < Ey::Core::Model
188
241
  raise "Invalid configuration - The following keys are missing from the configuration:\n#{missing_keys.join(",\n")}"
189
242
  end
190
243
 
191
- params = {
192
- "cluster_configuration" => {
193
- "configuration" => configuration
194
- }
195
- }
196
-
197
- connection.requests.new(self.connection.boot_environment(params.merge("id" => self.id)).body["request"])
198
- end
199
- end
200
-
201
- def unassign!
202
- requires :id
203
- merge_attributes(self.connection.unassign_environment("id" => self.id).body["environment"])
204
- end
205
-
206
- def save!
207
- if new_record?
208
- requires :application_id, :account_id, :region
209
-
210
- params = {
211
- "url" => self.collection.url,
212
- "account" => self.account_id,
213
- "environment" => {
214
- "name" => self.name,
215
- "application_id" => self.application_id,
216
- "region" => self.region,
217
- "stack_name" => self.stack_name,
218
- "database_stack" => self.database_stack,
219
- "release_label" => self.release_label,
220
- "language" => self.language,
221
- },
222
- }
223
-
224
- params["environment"].merge!("database_service" => self.database_service.id) if self.database_service
225
-
226
- merge_attributes(self.connection.create_environment(params).body["environment"])
227
- else
228
- requires :identity
229
- attributes = Cistern::Hash.slice(Cistern::Hash.stringify_keys(self.attributes), "nane", "release_label")
230
- connection.update_environment(
231
- "id" => self.identity,
232
- "environment" => attributes,
233
- )
244
+ params["cluster_configuration"]["configuration"] = configuration
234
245
  end
246
+ params.merge("id" => self.id)
235
247
  end
236
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
@@ -53,6 +53,12 @@ class Ey::Core::Client::Request < Ey::Core::Model
53
53
  case type
54
54
  when /address/
55
55
  self.connection.addresses.get!(resource_id)
56
+ when /auto_scaling_group/
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)
56
62
  when /cluster_update/
57
63
  self.connection.cluster_updates.get!(resource_id)
58
64
  when /database_server_snapshot/
@@ -26,6 +26,7 @@ class Ey::Core::Client::Server < Ey::Core::Model
26
26
  attribute :updated_at, type: :time
27
27
  attribute :wait_for_chef, type: :boolean
28
28
  attribute :release_label
29
+ attribute :ip_id
29
30
 
30
31
  has_one :account
31
32
  has_one :address, collection: "addresses"
@@ -117,6 +118,7 @@ class Ey::Core::Client::Server < Ey::Core::Model
117
118
  "release_label" => self.release_label,
118
119
  "role" => self.role,
119
120
  "volume_size" => self.volume_size,
121
+ "ip_id" => self.ip_id
120
122
  }
121
123
  }
122
124
  connection.requests.new(connection.create_server(server_attributes).body["request"])
@@ -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,62 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def create_auto_scaling_group(options={})
4
+ url = options.delete("url")
5
+
6
+ request(
7
+ :method => :post,
8
+ :url => url,
9
+ :path => "/auto_scaling_groups",
10
+ :body => options
11
+ )
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def create_auto_scaling_group(options={})
17
+ url = options.delete("url")
18
+
19
+ environment_id = options.delete("environment")
20
+ environment = find(:environments, environment_id)
21
+ resource_id = self.uuid
22
+ resource = options["auto_scaling_group"].dup
23
+
24
+ now = Time.now
25
+
26
+ resource.merge!(
27
+ "created_at" => now,
28
+ "environment" => url_for("/environments/#{environment_id}"),
29
+ "id" => resource_id,
30
+ "location_id" => environment["region"],
31
+ "provisioned_id" => "#{environment["name"]}#{SecureRandom.uuid}",
32
+ "desired_capacity" => 1,
33
+ "resource_url" => url_for("/auto_scaling_groups/#{resource_id}"),
34
+ )
35
+
36
+ self.data[:auto_scaling_groups][resource_id] = resource
37
+
38
+ environment.merge!("auto_scaling_group" => url_for("/auto_scaling_groups/#{resource_id}"))
39
+
40
+ request = {
41
+ "created_at" => now - 2,
42
+ "finished_at" => now,
43
+ "id" => self.uuid,
44
+ "message" => nil,
45
+ "read_channel" => nil,
46
+ "resource" => [:auto_scaling_groups, resource_id, resource],
47
+ "resource_url" => url_for("/auto_scaling_groups/#{resource_id}"),
48
+ "started_at" => now - 1,
49
+ "successful" => true,
50
+ "type" => "provision_auto_scaling_group",
51
+ "updated_at" => now,
52
+ }
53
+
54
+ self.data[:requests][request["id"]] = request
55
+
56
+ response(
57
+ :body => {"request" => request},
58
+ :status => 200
59
+ )
60
+ end
61
+ end
62
+ end