ey-core 3.0.2 → 3.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -5
- data/lib/ey-core/client.rb +4 -0
- data/lib/ey-core/client/mock.rb +2 -0
- data/lib/ey-core/collections/tokens.rb +2 -1
- data/lib/ey-core/models/environment.rb +4 -0
- data/lib/ey-core/models/server.rb +10 -0
- data/lib/ey-core/models/token.rb +5 -1
- data/lib/ey-core/models/user.rb +1 -0
- data/lib/ey-core/requests/apply_environment_updates.rb +54 -0
- data/lib/ey-core/requests/apply_server_updates.rb +52 -0
- data/lib/ey-core/requests/create_user.rb +10 -2
- data/lib/ey-core/requests/get_token.rb +21 -0
- data/lib/ey-core/requests/get_tokens.rb +32 -0
- data/lib/ey-core/version.rb +1 -1
- data/spec/environments_spec.rb +18 -0
- data/spec/servers_spec.rb +8 -0
- data/spec/tokens_spec.rb +20 -2
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 211941aaeeb4aa4287a63a54d47cabc37637e69f
|
4
|
+
data.tar.gz: bc49c5e7785bc9ce59b86ae8bd61d4870ae097a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0af79f96731322e573b6a543cccfd65bb0ff3c5815cea46eadc698f5b7e8554408003f1eeb49d83abf0d0eb36039c979a980bb2532ceafc9ae2bc29292a8cf58
|
7
|
+
data.tar.gz: d67529719c20a554a4ed226ca2dfc8d5f1fc2061734de03b8d9647e552a47971d4de01b20590216e6c4965621ce4987d825b66c58b9c98744c82b7ad62737e8e
|
data/README.md
CHANGED
@@ -18,7 +18,7 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
Uses [cistern](https://github.com/lanej/cistern) to wrap RESTful resources nicely.
|
21
|
+
Uses [cistern](https://github.com/lanej/cistern) to wrap RESTful resources nicely.
|
22
22
|
|
23
23
|
```ruby
|
24
24
|
client.users.current # =>
|
@@ -68,10 +68,6 @@ Ey::Core::Client.reset!
|
|
68
68
|
|
69
69
|
By default, specs are run against the core mock. In order to run them against awsm mocked mode instead, run `MOCK_CORE=false bundle exec rspec`
|
70
70
|
|
71
|
-
## Releasing
|
72
|
-
|
73
|
-
$ gem install gem-release
|
74
|
-
$ gem bump -trv (major|minor|patch) --host https://geminst:XXX@nextgem.engineyard.com/
|
75
71
|
|
76
72
|
## Contributing
|
77
73
|
|
data/lib/ey-core/client.rb
CHANGED
@@ -114,6 +114,8 @@ class Ey::Core::Client < Cistern::Service
|
|
114
114
|
model :user
|
115
115
|
model :volume
|
116
116
|
|
117
|
+
request :apply_environment_updates
|
118
|
+
request :apply_server_updates
|
117
119
|
request :attach_address
|
118
120
|
request :authorized_channel
|
119
121
|
request :boot_environment
|
@@ -265,6 +267,8 @@ class Ey::Core::Client < Cistern::Service
|
|
265
267
|
request :get_support_trial
|
266
268
|
request :get_task
|
267
269
|
request :get_tasks
|
270
|
+
request :get_token
|
271
|
+
request :get_tokens
|
268
272
|
request :get_untracked_server
|
269
273
|
request :get_untracked_servers
|
270
274
|
request :get_user
|
data/lib/ey-core/client/mock.rb
CHANGED
@@ -136,6 +136,7 @@ class Ey::Core::Client::Mock
|
|
136
136
|
:features => {},
|
137
137
|
:firewall_rules => {},
|
138
138
|
:firewalls => {},
|
139
|
+
:instance_updates => {},
|
139
140
|
:keypair_deployments => {},
|
140
141
|
:keypairs => {},
|
141
142
|
:legacy_alerts => {},
|
@@ -160,6 +161,7 @@ class Ey::Core::Client::Mock
|
|
160
161
|
:support_trials => {},
|
161
162
|
:tasks => {},
|
162
163
|
:temp_files => {},
|
164
|
+
:tokens => {},
|
163
165
|
:untracked_servers => {},
|
164
166
|
:users => {},
|
165
167
|
:volumes => {},
|
@@ -51,6 +51,10 @@ class Ey::Core::Client::Environment < Ey::Core::Model
|
|
51
51
|
connection.requests.new(response.body["request"])
|
52
52
|
end
|
53
53
|
|
54
|
+
def apply(type="main")
|
55
|
+
connection.requests.new(self.connection.apply_environment_updates("id" => self.id, "type" => type).body["request"])
|
56
|
+
end
|
57
|
+
|
54
58
|
def deprovision
|
55
59
|
connection.requests.new(self.connection.deprovision_environment("id" => self.id).body["request"])
|
56
60
|
end
|
@@ -21,6 +21,8 @@ class Ey::Core::Client::Server < Ey::Core::Model
|
|
21
21
|
attribute :ssh_port, type: :integer
|
22
22
|
attribute :state
|
23
23
|
attribute :updated_at, type: :time
|
24
|
+
attribute :wait_for_chef, type: :boolean
|
25
|
+
attribute :release_label
|
24
26
|
|
25
27
|
has_one :account
|
26
28
|
has_one :address, collection: "addresses"
|
@@ -34,6 +36,12 @@ class Ey::Core::Client::Server < Ey::Core::Model
|
|
34
36
|
|
35
37
|
attr_accessor :mnt_volume_size, :volume_size, :iops, :snapshot_id
|
36
38
|
|
39
|
+
def apply(type="main")
|
40
|
+
requires :identity
|
41
|
+
|
42
|
+
connection.requests.new(self.connection.apply_server_updates("id" => self.identity, "type" => type).body["request"])
|
43
|
+
end
|
44
|
+
|
37
45
|
def reboot
|
38
46
|
requires :identity
|
39
47
|
|
@@ -48,6 +56,7 @@ class Ey::Core::Client::Server < Ey::Core::Model
|
|
48
56
|
|
49
57
|
server_attributes = {
|
50
58
|
"environment" => environment.id,
|
59
|
+
"wait_for_chef" => self.wait_for_chef,
|
51
60
|
"snapshot" => self.snapshot_id,
|
52
61
|
"server" => {
|
53
62
|
"flavor" => self.flavor_id,
|
@@ -57,6 +66,7 @@ class Ey::Core::Client::Server < Ey::Core::Model
|
|
57
66
|
"name" => self.name,
|
58
67
|
"role" => self.role,
|
59
68
|
"volume_size" => self.volume_size,
|
69
|
+
"release_label" => self.release_label,
|
60
70
|
}
|
61
71
|
}
|
62
72
|
connection.requests.new(connection.create_server(server_attributes).body["request"])
|
data/lib/ey-core/models/token.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
class Ey::Core::Client::Token < Ey::Core::Model
|
2
2
|
|
3
|
-
identity :
|
3
|
+
identity :id
|
4
4
|
|
5
|
+
attribute :auth_id
|
5
6
|
attribute :on_behalf_of
|
7
|
+
attribute :last_seen_at, type: :time
|
8
|
+
attribute :expires_at, type: :time
|
9
|
+
attribute :revoked_at, type: :time
|
6
10
|
|
7
11
|
def save!
|
8
12
|
params = {
|
data/lib/ey-core/models/user.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def apply_environment_updates(options={})
|
4
|
+
id = options.delete("id")
|
5
|
+
url = options.delete("url")
|
6
|
+
|
7
|
+
request(
|
8
|
+
:path => "environments/#{id}/apply",
|
9
|
+
:method => :post,
|
10
|
+
:url => url,
|
11
|
+
:body => options,
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Mock
|
17
|
+
def apply_environment_updates(options={})
|
18
|
+
id = options.delete("id")
|
19
|
+
servers = get_servers("environment" => id).body["servers"]
|
20
|
+
request_id = self.uuid
|
21
|
+
|
22
|
+
servers.each do |server|
|
23
|
+
update_id = self.uuid
|
24
|
+
self.data[:instance_updates][update_id] = {
|
25
|
+
"id" => update_id,
|
26
|
+
"instance_id" => server["id"],
|
27
|
+
"data" => {
|
28
|
+
"type" => options["type"] || "main",
|
29
|
+
}
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
request = {
|
34
|
+
"id" => request_id,
|
35
|
+
"type" => "configure_environment",
|
36
|
+
"successful" => true,
|
37
|
+
"started_at" => Time.now,
|
38
|
+
"finished_at" => Time.now,
|
39
|
+
"resource_url" => nil,
|
40
|
+
"resource" => nil,
|
41
|
+
}
|
42
|
+
|
43
|
+
self.data[:requests][request_id] = request
|
44
|
+
|
45
|
+
response_hash = request.dup
|
46
|
+
response_hash.delete("resource")
|
47
|
+
|
48
|
+
response(
|
49
|
+
:body => {"request" => response_hash},
|
50
|
+
:status => 201,
|
51
|
+
)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def apply_server_updates(options={})
|
4
|
+
id = options.delete("id")
|
5
|
+
url = options.delete("url")
|
6
|
+
|
7
|
+
request(
|
8
|
+
:path => "servers/#{id}/apply",
|
9
|
+
:method => :post,
|
10
|
+
:url => url,
|
11
|
+
:body => options,
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Mock
|
17
|
+
def apply_server_updates(options={})
|
18
|
+
id = options.delete("id")
|
19
|
+
server = self.data[:servers][id]
|
20
|
+
request_id = self.uuid
|
21
|
+
update_id = self.uuid
|
22
|
+
|
23
|
+
self.data[:instance_updates][update_id] = {
|
24
|
+
"id" => update_id,
|
25
|
+
"instance_id" => server["id"],
|
26
|
+
"data" => {
|
27
|
+
"type" => options["type"] || "main",
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
request = {
|
32
|
+
"id" => request_id,
|
33
|
+
"type" => "instance_update",
|
34
|
+
"successful" => true,
|
35
|
+
"started_at" => Time.now,
|
36
|
+
"finished_at" => Time.now,
|
37
|
+
"resource_url" => nil,
|
38
|
+
"resource" => nil,
|
39
|
+
}
|
40
|
+
|
41
|
+
self.data[:requests][request_id] = request
|
42
|
+
|
43
|
+
response_hash = request.dup
|
44
|
+
response_hash.delete("resource")
|
45
|
+
|
46
|
+
response(
|
47
|
+
:body => {"request" => response_hash},
|
48
|
+
:status => 201,
|
49
|
+
)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -20,18 +20,26 @@ class Ey::Core::Client
|
|
20
20
|
)
|
21
21
|
end
|
22
22
|
|
23
|
-
resource_id
|
23
|
+
resource_id = self.uuid
|
24
|
+
token_id = self.uuid
|
25
|
+
token_auth_id = self.uuid
|
24
26
|
|
25
27
|
resource = params["user"].dup
|
26
|
-
resource["token"] = SecureRandom.hex(20)
|
27
28
|
|
28
29
|
resource.merge!({
|
29
30
|
"id" => resource_id,
|
30
31
|
"accounts" => url_for("/users/#{resource_id}/accounts"),
|
31
32
|
"memberships" => url_for("/users/#{resource_id}/memberships"),
|
32
33
|
"keypairs" => url_for("/users/#{resource_id}/keypairs"),
|
34
|
+
"tokens" => url_for("/users/#{resource_id}/tokens"),
|
33
35
|
})
|
34
36
|
|
37
|
+
self.data[:tokens][token_id] = {
|
38
|
+
"id" => token_id,
|
39
|
+
"auth_id" => token_auth_id,
|
40
|
+
"on_behalf_of" => url_for("/users/#{resource_id}"),
|
41
|
+
}
|
42
|
+
|
35
43
|
self.data[:users][resource_id] = resource
|
36
44
|
|
37
45
|
response(
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def get_token(options={})
|
4
|
+
id = options.delete("id")
|
5
|
+
url = options.delete("url")
|
6
|
+
|
7
|
+
request(
|
8
|
+
:path => "tokens/#{id}",
|
9
|
+
:url => url,
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
def get_token(options={})
|
16
|
+
response(
|
17
|
+
:body => {"token" => self.find(:tokens, resource_identity(options))},
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class Ey::Core::Client
|
2
|
+
class Real
|
3
|
+
def get_tokens(params={})
|
4
|
+
query = Ey::Core.paging_parameters(params)
|
5
|
+
url = params.delete("url")
|
6
|
+
|
7
|
+
request(
|
8
|
+
:params => params,
|
9
|
+
:query => query,
|
10
|
+
:path => "/tokens",
|
11
|
+
:url => url,
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Mock
|
17
|
+
def get_tokens(params={})
|
18
|
+
extract_url_params!(params)
|
19
|
+
find(:users, resource_identity(params["user"]))
|
20
|
+
|
21
|
+
params["on_behalf_of"] = params.delete("user")
|
22
|
+
|
23
|
+
headers, tokens_page = search_and_page(params, :tokens, search_keys: %w(on_behalf_of))
|
24
|
+
|
25
|
+
response(
|
26
|
+
:body => {"tokens" => tokens_page},
|
27
|
+
:status => 200,
|
28
|
+
:headers => headers,
|
29
|
+
)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/ey-core/version.rb
CHANGED
data/spec/environments_spec.rb
CHANGED
@@ -70,6 +70,24 @@ describe 'as a user' do
|
|
70
70
|
let!(:name) { Faker::Name.first_name }
|
71
71
|
let!(:environment) { create_environment(account: account, application: app, environment: {name: name}) }
|
72
72
|
|
73
|
+
it "applies main" do
|
74
|
+
expect(environment.apply.ready!).to be_successful
|
75
|
+
|
76
|
+
if Ey::Core::Client.mocking?
|
77
|
+
expect(client.data[:instance_updates].count).to eq(environment.servers.count)
|
78
|
+
expect(client.data[:instance_updates].values.map { |iu| iu["data"]["type"] }).to eq(["main"] * environment.servers.count)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
it "applies custom" do
|
83
|
+
expect(environment.apply("custom").ready!).to be_successful
|
84
|
+
|
85
|
+
if Ey::Core::Client.mocking?
|
86
|
+
expect(client.data[:instance_updates].count).to eq(environment.servers.count)
|
87
|
+
expect(client.data[:instance_updates].values.map { |iu| iu["data"]["type"] }).to eq(["custom"] * environment.servers.count)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
73
91
|
it "destroys an environment" do
|
74
92
|
expect {
|
75
93
|
environment.destroy.ready!
|
data/spec/servers_spec.rb
CHANGED
@@ -19,6 +19,14 @@ describe 'servers' do
|
|
19
19
|
expect(reboot_request.successful).to be true
|
20
20
|
end
|
21
21
|
|
22
|
+
it "applies" do
|
23
|
+
expect(server.apply.ready!).to be_successful
|
24
|
+
|
25
|
+
if Ey::Core::Client.mocking?
|
26
|
+
expect(client.data[:instance_updates].count).to eq(1)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
22
30
|
it "does not destroy" do
|
23
31
|
expect {
|
24
32
|
server.destroy
|
data/spec/tokens_spec.rb
CHANGED
@@ -7,13 +7,31 @@ describe 'tokens' do
|
|
7
7
|
context "with a user" do
|
8
8
|
let!(:user) { client.users.create!(name: Faker::Name.name, email: Faker::Internet.email) }
|
9
9
|
|
10
|
-
it "
|
10
|
+
it "generates a token" do
|
11
11
|
token = client.tokens.create!(on_behalf_of: user)
|
12
12
|
expect(token.auth_id).not_to be_nil
|
13
13
|
end
|
14
14
|
|
15
|
-
|
15
|
+
it "lists tokens" do
|
16
|
+
tokens = user.tokens.all
|
17
|
+
expect(tokens).not_to be_empty
|
18
|
+
end
|
19
|
+
|
20
|
+
it "gets a token" do
|
21
|
+
token = user.tokens.first
|
22
|
+
expect(token.reload).to be
|
23
|
+
end
|
16
24
|
|
25
|
+
context "with multiple users" do
|
26
|
+
let!(:other_user) { client.users.create(name: Faker::Name.name, email: Faker::Internet.email) }
|
27
|
+
|
28
|
+
it "only shows the correct tokens" do
|
29
|
+
expect(user.tokens.all.count).to eq(1)
|
30
|
+
expect(other_user.tokens.all.count).to eq(1)
|
31
|
+
expect(user.tokens.first.on_behalf_of).to eq(client.url_for("/users/#{user.identity}"))
|
32
|
+
expect(other_user.tokens.first.on_behalf_of).to eq(client.url_for("/users/#{other_user.identity}"))
|
33
|
+
end
|
34
|
+
end
|
17
35
|
end
|
18
36
|
end
|
19
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ey-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Lane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -252,6 +252,8 @@ files:
|
|
252
252
|
- lib/ey-core/models/volume.rb
|
253
253
|
- lib/ey-core/request.rb
|
254
254
|
- lib/ey-core/request_failure.rb
|
255
|
+
- lib/ey-core/requests/apply_environment_updates.rb
|
256
|
+
- lib/ey-core/requests/apply_server_updates.rb
|
255
257
|
- lib/ey-core/requests/attach_address.rb
|
256
258
|
- lib/ey-core/requests/authorized_channel.rb
|
257
259
|
- lib/ey-core/requests/boot_environment.rb
|
@@ -406,6 +408,8 @@ files:
|
|
406
408
|
- lib/ey-core/requests/get_support_trial.rb
|
407
409
|
- lib/ey-core/requests/get_task.rb
|
408
410
|
- lib/ey-core/requests/get_tasks.rb
|
411
|
+
- lib/ey-core/requests/get_token.rb
|
412
|
+
- lib/ey-core/requests/get_tokens.rb
|
409
413
|
- lib/ey-core/requests/get_untracked_server.rb
|
410
414
|
- lib/ey-core/requests/get_untracked_servers.rb
|
411
415
|
- lib/ey-core/requests/get_user.rb
|