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.
- checksums.yaml +5 -5
- data/.ruby-version +1 -1
- data/.travis.yml +1 -0
- data/CHANGELOG.md +27 -5
- data/Gemfile +1 -2
- data/README.md +65 -8
- data/ey-core.gemspec +6 -5
- data/features/docker_registry_credentials.feature +21 -0
- data/features/environment_variables.feature +54 -0
- data/features/step_definitions/accounts_steps.rb +14 -0
- data/features/step_definitions/applications_steps.rb +7 -14
- data/features/step_definitions/docker_registry_credentials_steps.rb +3 -0
- data/features/step_definitions/environment_variables_steps.rb +51 -0
- data/features/step_definitions/environments_steps.rb +15 -0
- data/features/support/environment_variable_helpers.rb +20 -0
- data/features/support/mock_api.rb +0 -1
- data/features/support/resource_helpers.rb +12 -0
- data/lib/ey-core/cli/deploy.rb +14 -11
- data/lib/ey-core/cli/docker_registry_login.rb +29 -0
- data/lib/ey-core/cli/environment_variables.rb +71 -0
- data/lib/ey-core/cli/helpers/chef.rb +1 -1
- data/lib/ey-core/cli/helpers/core.rb +32 -3
- data/lib/ey-core/cli/helpers/server_sieve.rb +7 -0
- data/lib/ey-core/cli/main.rb +5 -4
- data/lib/ey-core/cli/servers.rb +35 -17
- data/lib/ey-core/cli/ssh.rb +7 -1
- data/lib/ey-core/client/mock.rb +5 -0
- data/lib/ey-core/client.rb +35 -0
- data/lib/ey-core/collections/auto_scaling_alarms.rb +8 -0
- data/lib/ey-core/collections/auto_scaling_groups.rb +8 -0
- data/lib/ey-core/collections/auto_scaling_policies.rb +33 -0
- data/lib/ey-core/collections/container_clusters.rb +9 -0
- data/lib/ey-core/collections/container_service_deployments.rb +17 -0
- data/lib/ey-core/collections/environment_variables.rb +8 -0
- data/lib/ey-core/collections/servers.rb +4 -0
- data/lib/ey-core/models/account.rb +10 -0
- data/lib/ey-core/models/address.rb +2 -0
- data/lib/ey-core/models/application.rb +1 -0
- data/lib/ey-core/models/auto_scaling_alarm.rb +54 -0
- data/lib/ey-core/models/auto_scaling_group.rb +75 -0
- data/lib/ey-core/models/base_auto_scaling_policy.rb +61 -0
- data/lib/ey-core/models/container_service_deployment.rb +17 -0
- data/lib/ey-core/models/deployment.rb +1 -0
- data/lib/ey-core/models/environment.rb +57 -45
- data/lib/ey-core/models/environment_variable.rb +29 -0
- data/lib/ey-core/models/request.rb +6 -0
- data/lib/ey-core/models/server.rb +2 -0
- data/lib/ey-core/models/simple_auto_scaling_policy.rb +24 -0
- data/lib/ey-core/models/step_auto_scaling_policy.rb +24 -0
- data/lib/ey-core/models/target_auto_scaling_policy.rb +24 -0
- data/lib/ey-core/requests/create_account.rb +5 -0
- data/lib/ey-core/requests/create_address.rb +1 -0
- data/lib/ey-core/requests/create_application.rb +8 -7
- data/lib/ey-core/requests/create_auto_scaling_alarm.rb +69 -0
- data/lib/ey-core/requests/create_auto_scaling_group.rb +62 -0
- data/lib/ey-core/requests/create_auto_scaling_policy.rb +68 -0
- data/lib/ey-core/requests/create_environment.rb +2 -0
- data/lib/ey-core/requests/create_environment_variable.rb +39 -0
- data/lib/ey-core/requests/create_user.rb +8 -6
- data/lib/ey-core/requests/deploy_environment_application.rb +1 -0
- data/lib/ey-core/requests/destroy_auto_scaling_alarm.rb +49 -0
- data/lib/ey-core/requests/destroy_auto_scaling_group.rb +44 -0
- data/lib/ey-core/requests/destroy_auto_scaling_policy.rb +49 -0
- data/lib/ey-core/requests/discover_container_service_deployments.rb +71 -0
- data/lib/ey-core/requests/discover_server.rb +60 -0
- data/lib/ey-core/requests/get_applications.rb +1 -1
- data/lib/ey-core/requests/get_auto_scaling_alarm.rb +27 -0
- data/lib/ey-core/requests/get_auto_scaling_alarms.rb +34 -0
- data/lib/ey-core/requests/get_auto_scaling_group.rb +21 -0
- data/lib/ey-core/requests/get_auto_scaling_groups.rb +29 -0
- data/lib/ey-core/requests/get_auto_scaling_policies.rb +46 -0
- data/lib/ey-core/requests/get_auto_scaling_policy.rb +27 -0
- data/lib/ey-core/requests/get_deployments.rb +1 -1
- data/lib/ey-core/requests/get_environment_variable.rb +19 -0
- data/lib/ey-core/requests/get_environment_variables.rb +29 -0
- data/lib/ey-core/requests/get_environments.rb +1 -1
- data/lib/ey-core/requests/get_ssl_certificate.rb +1 -1
- data/lib/ey-core/requests/retrieve_docker_registry_credentials.rb +24 -0
- data/lib/ey-core/requests/update_auto_scaling_alarm.rb +45 -0
- data/lib/ey-core/requests/update_auto_scaling_group.rb +45 -0
- data/lib/ey-core/requests/update_auto_scaling_policy.rb +46 -0
- data/lib/ey-core/requests/update_environment_variable.rb +25 -0
- data/lib/ey-core/test_helpers/auto_scaling_helpers.rb +35 -0
- data/lib/ey-core/test_helpers.rb +2 -0
- data/lib/ey-core/version.rb +1 -1
- data/spec/addresses_spec.rb +2 -1
- data/spec/auto_scaling_alarms_spec.rb +40 -0
- data/spec/auto_scaling_groups_spec.rb +28 -0
- data/spec/auto_scaling_policies_spec.rb +94 -0
- data/spec/docker_registry_credentials_spec.rb +16 -0
- data/spec/environments_spec.rb +18 -0
- data/spec/servers_spec.rb +8 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/support/core.rb +0 -2
- 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
|
@@ -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,
|
@@ -40,13 +40,14 @@ class Ey::Core::Client
|
|
40
40
|
end
|
41
41
|
|
42
42
|
resource.merge!(
|
43
|
-
"account"
|
44
|
-
"archives"
|
45
|
-
"keypairs"
|
46
|
-
"language"
|
47
|
-
"created_at"
|
48
|
-
"updated_at"
|
49
|
-
"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
|