ey-core 3.4.2 → 3.6.3

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