ey-core 3.4.4 → 3.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -3
- data/bin/ey-core +8 -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/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/resource_helpers.rb +12 -0
- data/lib/ey-core/cli/environment_variables.rb +71 -0
- data/lib/ey-core/cli/helpers/core.rb +29 -0
- data/lib/ey-core/cli/main.rb +2 -0
- data/lib/ey-core/cli/servers.rb +34 -17
- data/lib/ey-core/client.rb +23 -0
- data/lib/ey-core/client/mock.rb +3 -0
- data/lib/ey-core/collections/auto_scaling_alarms.rb +8 -0
- data/lib/ey-core/collections/auto_scaling_policies.rb +33 -0
- data/lib/ey-core/collections/environment_variables.rb +8 -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 +26 -0
- data/lib/ey-core/models/base_auto_scaling_policy.rb +61 -0
- data/lib/ey-core/models/environment.rb +53 -47
- data/lib/ey-core/models/environment_variable.rb +29 -0
- data/lib/ey-core/models/request.rb +4 -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_policy.rb +68 -0
- data/lib/ey-core/requests/create_environment.rb +2 -1
- 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/destroy_auto_scaling_alarm.rb +49 -0
- data/lib/ey-core/requests/destroy_auto_scaling_policy.rb +49 -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_policies.rb +46 -0
- data/lib/ey-core/requests/get_auto_scaling_policy.rb +27 -0
- 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/update_auto_scaling_alarm.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.rb +2 -0
- data/lib/ey-core/test_helpers/auto_scaling_helpers.rb +35 -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_policies_spec.rb +94 -0
- data/spec/spec_helper.rb +7 -0
- metadata +37 -2
@@ -17,7 +17,7 @@ class Ey::Core::Client
|
|
17
17
|
def get_applications(params={})
|
18
18
|
extract_url_params!(params)
|
19
19
|
|
20
|
-
headers, applications_page = search_and_page(params, :applications, search_keys: %w[type repository account name environment])
|
20
|
+
headers, applications_page = search_and_page(params, :applications, search_keys: %w[id type repository account name environment])
|
21
21
|
|
22
22
|
response(
|
23
23
|
:body => {"applications" => applications_page},
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def get_auto_scaling_alarm(params = {})
|
4
|
+
id = params["id"]
|
5
|
+
url = params["url"]
|
6
|
+
|
7
|
+
request(
|
8
|
+
:method => :get,
|
9
|
+
:path => "auto_scaling_alarms/#{id}",
|
10
|
+
:url => url
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Mock
|
16
|
+
def get_auto_scaling_alarm(params = {})
|
17
|
+
response(
|
18
|
+
:body => {
|
19
|
+
"auto_scaling_alarm" => self.find(
|
20
|
+
:auto_scaling_alarms,
|
21
|
+
resource_identity(params)
|
22
|
+
)
|
23
|
+
},
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def get_auto_scaling_alarms(params = {})
|
4
|
+
query = Ey::Core.paging_parameters(params)
|
5
|
+
url = params.delete("url")
|
6
|
+
|
7
|
+
request(
|
8
|
+
:params => params,
|
9
|
+
:path => "/auto_scaling_alarms",
|
10
|
+
:query => params,
|
11
|
+
:url => url,
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Mock
|
17
|
+
def get_auto_scaling_alarms(params = {})
|
18
|
+
extract_url_params!(params)
|
19
|
+
|
20
|
+
headers, auto_scaling_alarms_page = search_and_page(
|
21
|
+
params,
|
22
|
+
:auto_scaling_alarms,
|
23
|
+
search_keys: %w{ id auto_scaling_policy },
|
24
|
+
resources: data[:auto_scaling_alarms]
|
25
|
+
)
|
26
|
+
|
27
|
+
response(
|
28
|
+
:body => { "auto_scaling_alarms" => auto_scaling_alarms_page },
|
29
|
+
:status => 200,
|
30
|
+
:headers => headers
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def get_auto_scaling_policies(params = {})
|
4
|
+
query = Ey::Core.paging_parameters(params)
|
5
|
+
url = params.delete("url")
|
6
|
+
|
7
|
+
request(
|
8
|
+
:params => params,
|
9
|
+
:path => "/auto_scaling_policies",
|
10
|
+
:query => params,
|
11
|
+
:url => url,
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Mock
|
17
|
+
def get_auto_scaling_policies(params = {})
|
18
|
+
extract_url_params!(params)
|
19
|
+
|
20
|
+
resources = data[:auto_scaling_policies].select { |_key, policy| filter_policy(params, policy) }
|
21
|
+
params.delete("types")
|
22
|
+
|
23
|
+
headers, auto_scaling_policies_page = search_and_page(
|
24
|
+
params,
|
25
|
+
:auto_scaling_policies,
|
26
|
+
search_keys: %w{ id auto_scaling_group },
|
27
|
+
resources: resources
|
28
|
+
)
|
29
|
+
|
30
|
+
response(
|
31
|
+
:body => { "auto_scaling_policies" => auto_scaling_policies_page },
|
32
|
+
:status => 200,
|
33
|
+
:headers => headers
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def filter_policy(params, item)
|
40
|
+
return false if params["auto_scaling_group"] != item["auto_scaling_group"]
|
41
|
+
|
42
|
+
types = params["types"]
|
43
|
+
types.is_a?(::Array) && types.include?(item["type"])
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def get_auto_scaling_policy(params = {})
|
4
|
+
id = params["id"]
|
5
|
+
url = params["url"]
|
6
|
+
|
7
|
+
request(
|
8
|
+
:method => :get,
|
9
|
+
:path => "auto_scaling_policies/#{id}",
|
10
|
+
:url => url
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Mock
|
16
|
+
def get_auto_scaling_policy(params = {})
|
17
|
+
response(
|
18
|
+
:body => {
|
19
|
+
"auto_scaling_policy" => self.find(
|
20
|
+
:auto_scaling_policies,
|
21
|
+
resource_identity(params)
|
22
|
+
)
|
23
|
+
},
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def get_environment_variable(params={})
|
4
|
+
id = params.delete("id")
|
5
|
+
url = params.delete("url")
|
6
|
+
|
7
|
+
request(
|
8
|
+
:path => "environment_variables/#{id}",
|
9
|
+
:url => url,
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
def get_environment_variable(params={})
|
16
|
+
response(body: {"environment_variable" => find(:environment_variables, resource_identity(params))})
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def get_environment_variables(params={})
|
4
|
+
query = Ey::Core.paging_parameters(params)
|
5
|
+
url = params.delete("url")
|
6
|
+
|
7
|
+
request(
|
8
|
+
:params => params,
|
9
|
+
:path => "/environment_variables",
|
10
|
+
:query => params,
|
11
|
+
:url => url,
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Mock
|
17
|
+
def get_environment_variables(params={})
|
18
|
+
extract_url_params!(params)
|
19
|
+
|
20
|
+
headers, environment_variables_page = search_and_page(params, :environment_variables, search_keys: %w(environment application))
|
21
|
+
|
22
|
+
response(
|
23
|
+
:body => {"environment_variables" => environment_variables_page},
|
24
|
+
:status => 200,
|
25
|
+
:headers => headers
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -17,7 +17,7 @@ class Ey::Core::Client
|
|
17
17
|
def get_environments(params={})
|
18
18
|
extract_url_params!(params)
|
19
19
|
|
20
|
-
headers, environments_page = search_and_page(params, :environments, search_keys: %w[account name])
|
20
|
+
headers, environments_page = search_and_page(params, :environments, search_keys: %w[id account name])
|
21
21
|
|
22
22
|
response(
|
23
23
|
:body => {"environments" => environments_page},
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def update_auto_scaling_alarm(params = {})
|
4
|
+
id = params.delete("id")
|
5
|
+
|
6
|
+
request(
|
7
|
+
:method => :put,
|
8
|
+
:path => "/auto_scaling_alarms/#{id}",
|
9
|
+
:body => { "auto_scaling_alarm" => params.fetch("auto_scaling_alarm") },
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
def update_auto_scaling_alarm(params = {})
|
16
|
+
resource_id = params.delete("id")
|
17
|
+
now = Time.now
|
18
|
+
resource = find(:auto_scaling_alarms, resource_id)
|
19
|
+
.merge(params["auto_scaling_alarm"])
|
20
|
+
.merge("updated_at" => now)
|
21
|
+
resource.merge!(params)
|
22
|
+
|
23
|
+
request = {
|
24
|
+
"id" => self.uuid,
|
25
|
+
"type" => "update_auto_scaling_alarm",
|
26
|
+
"successful" => true,
|
27
|
+
"created_at" => now - 5,
|
28
|
+
"started_at" => now - 3,
|
29
|
+
"finished_at" => now,
|
30
|
+
"updated_at" => now,
|
31
|
+
"message" => nil,
|
32
|
+
"read_channel" => nil,
|
33
|
+
"resource" => [:auto_scaling_alarms, resource_id, resource],
|
34
|
+
"resource_url" => url_for("/auto_scaling_alarms/#{resource_id}")
|
35
|
+
}
|
36
|
+
|
37
|
+
self.data[:requests][request["id"]] = request
|
38
|
+
|
39
|
+
response(
|
40
|
+
body: { "request" => request },
|
41
|
+
status: 200
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def update_auto_scaling_policy(params = {})
|
4
|
+
id = params.delete("id")
|
5
|
+
|
6
|
+
request(
|
7
|
+
:method => :put,
|
8
|
+
:path => "/auto_scaling_policies/#{id}",
|
9
|
+
:body => { "auto_scaling_policy" => params.fetch("auto_scaling_policy") },
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
def update_auto_scaling_policy(params = {})
|
16
|
+
resource_id = params.delete("id")
|
17
|
+
now = Time.now
|
18
|
+
|
19
|
+
resource = find(:auto_scaling_policies, resource_id)
|
20
|
+
.merge(params["auto_scaling_policy"])
|
21
|
+
.merge("updated_at" => now)
|
22
|
+
resource.merge!(params)
|
23
|
+
|
24
|
+
request = {
|
25
|
+
"id" => self.uuid,
|
26
|
+
"type" => "update_auto_scaling_policy",
|
27
|
+
"successful" => true,
|
28
|
+
"created_at" => now - 5,
|
29
|
+
"updated_at" => now,
|
30
|
+
"started_at" => now - 3,
|
31
|
+
"finished_at" => now,
|
32
|
+
"message" => nil,
|
33
|
+
"read_channel" => nil,
|
34
|
+
"resource" => [:auto_scaling_policies, resource_id, resource],
|
35
|
+
"resource_url" => url_for("/auto_scaling_policies/#{resource_id}")
|
36
|
+
}
|
37
|
+
|
38
|
+
self.data[:requests][request["id"]] = request
|
39
|
+
|
40
|
+
response(
|
41
|
+
body: { "request" => request },
|
42
|
+
status: 200
|
43
|
+
)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def update_environment_variable(_params={})
|
4
|
+
params = Cistern::Hash.stringify_keys(_params)
|
5
|
+
id = params.delete("id")
|
6
|
+
body = { environment_variable: params }
|
7
|
+
|
8
|
+
request(
|
9
|
+
:method => :put,
|
10
|
+
:path => "/environment_variables/#{id}",
|
11
|
+
:body => body
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Mock
|
17
|
+
def update_environment_variable(_params={})
|
18
|
+
params = Cistern::Hash.stringify_keys(_params).merge!("updated_at" => Time.now)
|
19
|
+
environment_variable = find(:environment_variables, params.delete("id"))
|
20
|
+
environment_variable.merge!(params)
|
21
|
+
|
22
|
+
response(:body => { "environment_variable" => environment_variable })
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/ey-core/test_helpers.rb
CHANGED
@@ -2,6 +2,7 @@ require 'ey-core/test_helpers/account_helpers'
|
|
2
2
|
require 'ey-core/test_helpers/alert_helpers'
|
3
3
|
require 'ey-core/test_helpers/client_helpers'
|
4
4
|
require 'ey-core/test_helpers/resource_helpers'
|
5
|
+
require 'ey-core/test_helpers/auto_scaling_helpers'
|
5
6
|
|
6
7
|
module Ey
|
7
8
|
module Core
|
@@ -10,6 +11,7 @@ module Ey
|
|
10
11
|
include AlertHelpers
|
11
12
|
include ClientHelpers
|
12
13
|
include ResourceHelpers
|
14
|
+
include AutoScalingHelpers
|
13
15
|
end
|
14
16
|
end
|
15
17
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Ey
|
2
|
+
module Core
|
3
|
+
module TestHelpers
|
4
|
+
module AutoScalingHelpers
|
5
|
+
def create_auto_scaling_group(options = {})
|
6
|
+
environment = options[:environment] || create_environment
|
7
|
+
|
8
|
+
groups = client.auto_scaling_groups
|
9
|
+
|
10
|
+
groups.create!(
|
11
|
+
minimum_size: 2,
|
12
|
+
maximum_size: 6,
|
13
|
+
environment: environment
|
14
|
+
).resource!
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_auto_scaling_policy(options = {})
|
18
|
+
group = options.delete(:auto_scaling_group) || create_auto_scaling_group
|
19
|
+
policies = client.auto_scaling_policies
|
20
|
+
|
21
|
+
policies.create!(
|
22
|
+
{
|
23
|
+
auto_scaling_group_id: group.id,
|
24
|
+
action_value: 2,
|
25
|
+
action_unit: "instances",
|
26
|
+
action_type: "add",
|
27
|
+
name: SecureRandom.hex(16),
|
28
|
+
type: "simple"
|
29
|
+
}.merge(options)
|
30
|
+
).resource!
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/ey-core/version.rb
CHANGED
data/spec/addresses_spec.rb
CHANGED
@@ -6,12 +6,13 @@ describe 'addresses' do
|
|
6
6
|
let!(:provider) { create_provider(account: account) }
|
7
7
|
|
8
8
|
it "creates an address" do
|
9
|
-
request = client.addresses.create!(provider: provider, location: "us-west-2")
|
9
|
+
request = client.addresses.create!(provider: provider, location: "us-west-2", scope: "vpc")
|
10
10
|
address = request.resource!
|
11
11
|
expect(address.id).not_to be_nil
|
12
12
|
expect(address.ip_address).not_to be_nil
|
13
13
|
expect(address.provisioned_id).not_to be_nil
|
14
14
|
expect(address.provider).to eq(provider)
|
15
|
+
expect(address.scope).to eq("vpc")
|
15
16
|
end
|
16
17
|
|
17
18
|
context "with an address" do
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe "Auto scaling alarms" do
|
4
|
+
let!(:client) { create_client }
|
5
|
+
let!(:account) { create_account(client: client) }
|
6
|
+
let(:policy) { create_auto_scaling_policy }
|
7
|
+
|
8
|
+
let(:params) do
|
9
|
+
{
|
10
|
+
"name" => SecureRandom.hex(16),
|
11
|
+
"aggregation_type" => "avg",
|
12
|
+
"metric_type" => "cpu",
|
13
|
+
"operand" => "gt",
|
14
|
+
"trigger_value" => 0.5,
|
15
|
+
"number_of_periods" => 1,
|
16
|
+
"period_length" => 30,
|
17
|
+
"auto_scaling_policy_id" => policy.id
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
let!(:alarm) { client.auto_scaling_alarms.create!(params).resource! }
|
22
|
+
|
23
|
+
it "creates a new alarm for an auto scaling policy" do
|
24
|
+
expect(alarm).not_to be_nil
|
25
|
+
expect(policy.auto_scaling_alarms).not_to be_empty
|
26
|
+
expect(client.auto_scaling_alarms).not_to be_empty
|
27
|
+
end
|
28
|
+
|
29
|
+
it "updates an alarm" do
|
30
|
+
expect do
|
31
|
+
alarm.update("name" => "new name")
|
32
|
+
end.to change { alarm.name }.to("new name")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "destroys auto scalig alarm by it's id" do
|
36
|
+
expect do
|
37
|
+
alarm.destroy!
|
38
|
+
end.to change { policy.reload.auto_scaling_alarms.count }.from(1).to(0)
|
39
|
+
end
|
40
|
+
end
|