ey-core 3.0.3 → 3.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 211941aaeeb4aa4287a63a54d47cabc37637e69f
4
- data.tar.gz: bc49c5e7785bc9ce59b86ae8bd61d4870ae097a6
3
+ metadata.gz: 1fc43dd7e0537390e4176ab2bba75430348f3f54
4
+ data.tar.gz: ff4cb06ebced47b4838dc04fc0cb3da8c23fc02b
5
5
  SHA512:
6
- metadata.gz: 0af79f96731322e573b6a543cccfd65bb0ff3c5815cea46eadc698f5b7e8554408003f1eeb49d83abf0d0eb36039c979a980bb2532ceafc9ae2bc29292a8cf58
7
- data.tar.gz: d67529719c20a554a4ed226ca2dfc8d5f1fc2061734de03b8d9647e552a47971d4de01b20590216e6c4965621ce4987d825b66c58b9c98744c82b7ad62737e8e
6
+ metadata.gz: 70165d9bd64ae03255a4c12c6e75f683649ab68a66657d3d8e894c1decf7c9d974c60c8b2e5fc81a16abf6015dea88af9ef0791398960cfac3261e9077d88561
7
+ data.tar.gz: e3f26187c8549e810afa942983754af7adcf00e380b7436594012db0bfbc427656f615b2fde33572e10953e1a09cfdbffe516f17bc5b7eadb185df617675ce13
@@ -1 +1 @@
1
- 2.2
1
+ 2.3
@@ -13,8 +13,7 @@ language: ruby
13
13
  cache: bundler
14
14
 
15
15
  rvm:
16
- - 1.9.3
17
- - 2.1.5
16
+ - 2.3.1
18
17
 
19
18
  env:
20
19
  - COVERAGE=true
@@ -15,6 +15,7 @@ class Ey::Core::Client < Cistern::Service
15
15
  collection :application_deployments
16
16
  collection :applications
17
17
  collection :backup_files
18
+ collection :blueprints
18
19
  collection :components
19
20
  collection :contacts
20
21
  collection :costs
@@ -70,6 +71,7 @@ class Ey::Core::Client < Cistern::Service
70
71
  model :application_deployment
71
72
  model :backup_file
72
73
  model :billing
74
+ model :blueprint
73
75
  model :component
74
76
  model :contact
75
77
  model :cost
@@ -118,6 +120,7 @@ class Ey::Core::Client < Cistern::Service
118
120
  request :apply_server_updates
119
121
  request :attach_address
120
122
  request :authorized_channel
123
+ request :blueprint_environment
121
124
  request :boot_environment
122
125
  request :bootstrap_logical_database
123
126
  request :cancel_account
@@ -155,6 +158,7 @@ class Ey::Core::Client < Cistern::Service
155
158
  request :deploy_environment_application
156
159
  request :deprovision_environment
157
160
  request :destroy_addon
161
+ request :destroy_blueprint
158
162
  request :destroy_database_server
159
163
  request :destroy_database_server_snapshot
160
164
  request :destroy_database_service
@@ -198,6 +202,8 @@ class Ey::Core::Client < Cistern::Service
198
202
  request :get_backup_file
199
203
  request :get_backup_files
200
204
  request :get_billing
205
+ request :get_blueprint
206
+ request :get_blueprints
201
207
  request :get_component
202
208
  request :get_components
203
209
  request :get_contacts
@@ -285,6 +291,7 @@ class Ey::Core::Client < Cistern::Service
285
291
  request :update_alert
286
292
  request :update_application_archive
287
293
  request :update_billing
294
+ request :update_blueprint
288
295
  request :update_membership
289
296
  request :update_server
290
297
  request :update_ssl_certificate
@@ -118,6 +118,7 @@ class Ey::Core::Client::Mock
118
118
  :backup_files => {},
119
119
  :backups => {},
120
120
  :billing => {},
121
+ :blueprints => {},
121
122
  :cluster_firewalls => [],
122
123
  :components => components,
123
124
  :contact_assignments => [],
@@ -0,0 +1,9 @@
1
+ class Ey::Core::Client::Blueprints < Ey::Core::Collection
2
+
3
+ model Ey::Core::Client::Blueprint
4
+
5
+ self.model_root = "blueprint"
6
+ self.model_request = :get_blueprint
7
+ self.collection_root = "blueprints"
8
+ self.collection_request = :get_blueprints
9
+ end
@@ -0,0 +1,30 @@
1
+ class Ey::Core::Client::Blueprint < Ey::Core::Model
2
+ extend Ey::Core::Associations
3
+
4
+ identity :id
5
+
6
+ attribute :data, type: :hash
7
+ attribute :name
8
+ attribute :created_at, type: :time
9
+ attribute :updated_at, type: :time
10
+
11
+ has_one :account
12
+ has_one :environment
13
+
14
+ def save!
15
+ requires :id
16
+
17
+ params = {
18
+ "id" => self.id,
19
+ "blueprint" => {
20
+ "name" => self.name
21
+ }
22
+ }
23
+
24
+ merge_attributes(self.connection.update_blueprint(params).body["blueprint"])
25
+ end
26
+
27
+ def destroy
28
+ self.connection.destroy_blueprint("id" => self.identity)
29
+ end
30
+ end
@@ -69,65 +69,86 @@ class Ey::Core::Client::Environment < Ey::Core::Model
69
69
  end
70
70
  end
71
71
 
72
+ def blueprints
73
+ requires :id
74
+ self.connection.blueprints.all(environment: self.identity)
75
+ end
76
+
77
+ def save_blueprint(options={})
78
+ requires :id
79
+ raise "name is a required key" unless options["name"]
80
+ self.connection.blueprints.new(self.connection.blueprint_environment("id" => self.id, "name" => options["name"]).body["blueprint"])
81
+ end
82
+
72
83
  def boot(options={})
73
84
  options = Cistern::Hash.stringify_keys(options)
74
- raise "configuration is a required key" unless options["configuration"]
75
- raise "configuration['type'] is required" unless options["configuration"]["type"]
85
+ if options["blueprint_id"]
86
+ params = {
87
+ "cluster_configuration" => {
88
+ "blueprint_id" => options["blueprint_id"]
89
+ }
90
+ }
76
91
 
77
- missing_keys = []
92
+ self.connection.requests.new(self.connection.boot_environment(params.merge("id" => self.id)).body["request"])
93
+ else
94
+ raise "configuration is a required key" unless options["configuration"]
95
+ raise "configuration['type'] is required" unless options["configuration"]["type"]
78
96
 
79
- configuration = options["configuration"]
80
- required_keys = %w(flavor volume_size mnt_volume_size)
97
+ missing_keys = []
81
98
 
82
- if self.database_service
83
- raise "application_id is a required key" unless options["application_id"]
99
+ configuration = options["configuration"]
100
+ required_keys = %w(flavor volume_size mnt_volume_size)
84
101
 
85
- configuration["logical_database"] = "#{self.name}_#{self.application.name}"
86
- end
102
+ if self.database_service
103
+ raise "application_id is a required key" unless options["application_id"]
87
104
 
88
- if configuration["type"] == 'custom'
89
- apps = configuration["apps"] ||= {}
90
- db_master = configuration["db_master"] ||= {}
91
- db_slaves = configuration["db_slaves"] ||= []
92
- utils = configuration["utils"] ||= []
93
-
94
- missing_keys << "apps" unless apps.any?
95
- (required_keys + ["count"]).each do |required|
96
- missing_keys << "apps[#{required}]" unless apps[required]
105
+ configuration["logical_database"] = "#{self.name}_#{self.application.name}"
97
106
  end
98
107
 
99
- unless configuration["database_service_id"]
100
- missing_keys << "db_master" unless db_master.any?
108
+ if configuration["type"] == 'custom'
109
+ apps = configuration["apps"] ||= {}
110
+ db_master = configuration["db_master"] ||= {}
111
+ db_slaves = configuration["db_slaves"] ||= []
112
+ utils = configuration["utils"] ||= []
101
113
 
102
- required_keys.each do |key|
103
- missing_keys << "db_master[#{key}]" unless db_master[key]
114
+ missing_keys << "apps" unless apps.any?
115
+ (required_keys + ["count"]).each do |required|
116
+ missing_keys << "apps[#{required}]" unless apps[required]
104
117
  end
105
- end
106
118
 
107
- db_slaves.each_with_index do |slave, i|
108
- (required_keys - ["volume_size", "mnt_volume_size"]).each do |key|
109
- missing_keys << "db_slaves[#{i}][#{key}]" unless slave[key]
119
+ unless configuration["database_service_id"]
120
+ missing_keys << "db_master" unless db_master.any?
121
+
122
+ required_keys.each do |key|
123
+ missing_keys << "db_master[#{key}]" unless db_master[key]
124
+ end
110
125
  end
111
- end
112
126
 
113
- utils.each_with_index do |util, i|
114
- required_keys.each do |key|
115
- missing_keys << "utils[#{i}][#{key}]" unless util[key]
127
+ db_slaves.each_with_index do |slave, i|
128
+ (required_keys - ["volume_size", "mnt_volume_size"]).each do |key|
129
+ missing_keys << "db_slaves[#{i}][#{key}]" unless slave[key]
130
+ end
131
+ end
132
+
133
+ utils.each_with_index do |util, i|
134
+ required_keys.each do |key|
135
+ missing_keys << "utils[#{i}][#{key}]" unless util[key]
136
+ end
116
137
  end
117
138
  end
118
- end
119
139
 
120
- if missing_keys.any?
121
- raise "Invalid configuration - The following keys are missing from the configuration:\n#{missing_keys.join(",\n")}"
122
- end
140
+ if missing_keys.any?
141
+ raise "Invalid configuration - The following keys are missing from the configuration:\n#{missing_keys.join(",\n")}"
142
+ end
123
143
 
124
- params = {
125
- "cluster_configuration" => {
126
- "configuration" => configuration
144
+ params = {
145
+ "cluster_configuration" => {
146
+ "configuration" => configuration
147
+ }
127
148
  }
128
- }
129
149
 
130
- connection.requests.new(self.connection.boot_environment(params.merge("id" => self.id)).body["request"])
150
+ connection.requests.new(self.connection.boot_environment(params.merge("id" => self.id)).body["request"])
151
+ end
131
152
  end
132
153
 
133
154
  def save!
@@ -0,0 +1,72 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def blueprint_environment(params={})
4
+ id = params.delete("id")
5
+ url = params.delete("url")
6
+
7
+ request(
8
+ :body => params,
9
+ :method => :post,
10
+ :path => "environments/#{id}/blueprint",
11
+ :url => url,
12
+ )
13
+ end
14
+ end
15
+
16
+ class Mock
17
+ def blueprint_environment(params={})
18
+ params = Cistern::Hash.stringify_keys(params)
19
+ id = params.delete("id")
20
+ environment = find(:environments, id)
21
+ blueprint_id = self.uuid
22
+ servers = self.data[:servers].values.select { |s| s["environment"] == url_for("/environments/#{id}") && s["deleted_at"].nil? }
23
+ volumes = servers.inject({}) do |hash,server|
24
+ hash.merge!(server["id"] => self.data[:volumes].values.select { |v| v["server"] == url_for("/servers/#{server["id"]}") })
25
+ hash
26
+ end
27
+ instances = {}
28
+ instances["apps"] = servers.select { |s| %w(app_master app solo).include?(s["role"]) }
29
+ instances["db_master"] = servers.select { |s| s["role"] == "db_master" }
30
+ instances["db_slaves"] = servers.select { |s| s["role"] == "db_slave" }
31
+ instances["utils"] = servers.select { |s| s["role"] == "util" }
32
+
33
+ %w(apps db_master db_slaves utils).each do |type|
34
+ mapped_types = instances[type].map do |server|
35
+ volume = volumes[server["id"]].first
36
+ mnt_volume = server["devices"].detect { |d| d["mount"] == "/mnt" }
37
+ {
38
+ "encrypted" => volume && volume["encrypted"],
39
+ "flavor" => server["flavor"]["id"],
40
+ "mnt_volume_size" => mnt_volume["size"],
41
+ "name" => server["name"],
42
+ "volume_iops" => volume["iops"],
43
+ "volume_size" => volume["size"]
44
+ }
45
+ end
46
+ instances["blueprint_#{type}"] = mapped_types
47
+ end
48
+
49
+ blueprint = {
50
+ "id" => blueprint_id,
51
+ "account" => environment["account"],
52
+ "environment" => url_for("/environments/#{id}"),
53
+ "created_at" => Time.now,
54
+ "updated_at" => Time.now,
55
+ "name" => params["name"],
56
+ "data" => {
57
+ "app_instances" => instances["blueprint_apps"],
58
+ "db_master" => instances["blueprint_db_master"],
59
+ "db_slaves" => instances["blueprint_db_slaves"],
60
+ "utils" => instances["blueprint_utils"],
61
+ }
62
+ }
63
+
64
+ self.data[:blueprints][blueprint_id] = blueprint
65
+
66
+ response(
67
+ :body => {"blueprint" => blueprint},
68
+ :status => 200,
69
+ )
70
+ end
71
+ end
72
+ end
@@ -13,6 +13,7 @@ class Ey::Core::Client
13
13
 
14
14
  class Mock
15
15
  def boot_environment(params={})
16
+ params = Cistern::Hash.stringify_keys(params)
16
17
  id = params.delete("id")
17
18
  configuration = params["cluster_configuration"]["configuration"]
18
19
  request_id = self.uuid
@@ -20,22 +21,54 @@ class Ey::Core::Client
20
21
 
21
22
  servers = {}
22
23
 
23
- case configuration["type"]
24
- when "solo"
25
- server = server_hash(environment: environment)
26
- servers[server["id"]] = server
27
- when "cluster"
28
- %w(app_master app db_master).each do |role|
29
- server = server_hash(role: role, environment: environment)
30
- servers[server["id"]] = server
24
+ if blueprint_id = params["cluster_configuration"]["blueprint_id"]
25
+ blueprint = find(:blueprints, blueprint_id)
26
+
27
+ %w(app_instances db_master db_slaves utils).each do |type|
28
+ blueprint_data = blueprint["data"][type]
29
+ role = case type
30
+ when "app_instances" then "app"
31
+ when "db_master" then "db_master"
32
+ when "db_slaves" then "db_slave"
33
+ when "utils" then "util"
34
+ end
35
+ blueprint_data.each_with_index do |server_data,index|
36
+ role = "app_master" if type == 'app_instances' && index == 0
37
+ server = server_hash(role: role, environment: environment, flavor: server_data["flavor"]["id"], name: server_data["name"])
38
+ create_volume(server: server, size: server_data["volume_size"], iops: server_data["volume_iops"])
39
+ servers[server["id"]] = server
40
+ end
31
41
  end
32
- when "production"
33
- %w(app_master app app db_master db_slave).each do |role|
34
- server = server_hash(role: role, environment: environment)
42
+ else
43
+ case configuration["type"]
44
+ when "solo"
45
+ server = server_hash(environment: environment)
35
46
  servers[server["id"]] = server
47
+ when "cluster"
48
+ %w(app_master app db_master).each do |role|
49
+ server = server_hash(role: role, environment: environment)
50
+ servers[server["id"]] = server
51
+ volume_size, iops = if %w(app_master app).include?(role)
52
+ [configuration["apps"] ? configuration["apps"]["volume_size"] : 25, nil]
53
+ elsif %w(db_master db_slave).include?(role)
54
+ [configuration["db_master"] ? configuration["db_master"]["volume_size"] : 25, configuration["db_master"] ? configuration["db_master"]["iops"] : nil]
55
+ end
56
+ create_volume(server: server, volume_size: volume_size, iops: iops)
57
+ end
58
+ when "production-cluster"
59
+ %w(app_master app app db_master db_slave).each do |role|
60
+ server = server_hash(role: role, environment: environment)
61
+ servers[server["id"]] = server
62
+ volume_size, iops = if %w(app_master app).include?(role)
63
+ [configuration["apps"] ? configuration["apps"]["volume_size"] : 25, nil]
64
+ elsif %w(db_master db_slave).include?(role)
65
+ [configuration["db_master"] ? configuration["db_master"]["volume_size"] : 25, configuration["db_master"] ? configuration["db_master"]["iops"] : nil]
66
+ end
67
+ create_volume(server: server, size: volume_size, iops: iops)
68
+ end
69
+ when "custom"
70
+ raise "not implemented"
36
71
  end
37
- when "custom"
38
- raise "not implemented"
39
72
  end
40
73
 
41
74
  self.data[:servers].merge!(servers)
@@ -65,7 +98,7 @@ class Ey::Core::Client
65
98
 
66
99
  def server_hash(options={})
67
100
  id = self.serial_id
68
- flavor = options.delete(:flavor)
101
+ flavor = options.delete(:flavor) || "m3_medium"
69
102
  role = options.delete(:role)
70
103
  name = options.delete(:name)
71
104
  environment = options.delete(:environment)
@@ -128,5 +161,19 @@ class Ey::Core::Client
128
161
  { "device" => "/dev/sdb", "name" => "ephemeral0", },
129
162
  ]
130
163
  end
164
+
165
+ def create_volume(params={})
166
+ server = params[:server]
167
+ volume_size = params[:size]
168
+ volume_iops = params[:iops]
169
+ volume_id = self.serial_id
170
+
171
+ self.data[:volumes][volume_id] = {
172
+ "id" => volume_id,
173
+ "size" => volume_size,
174
+ "iops" => volume_iops,
175
+ "server" => url_for("/servers/#{server["id"]}")
176
+ }
177
+ end
131
178
  end
132
179
  end
@@ -0,0 +1,22 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def destroy_blueprint(params={})
4
+ id = params.delete("id")
5
+
6
+ request(
7
+ :path => "blueprints/#{id}",
8
+ :method => :delete
9
+ )
10
+ end
11
+ end
12
+
13
+ class Mock
14
+ def destroy_blueprint(params={})
15
+ blueprint = find(:blueprints, params["id"])
16
+
17
+ self.data[:blueprints].delete(blueprint["id"])
18
+
19
+ response(status: 204)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def get_blueprint(params={})
4
+ id = params.delete("id")
5
+ url = params.delete("url")
6
+
7
+ request(
8
+ :path => "blueprints/#{id}",
9
+ :url => url,
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def get_blueprint(params={})
16
+ response(
17
+ :body => {"blueprint" => self.find(:blueprints, resource_identity(params))}
18
+ )
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def get_blueprints(params={})
4
+ query = Ey::Core.paging_parameters(params)
5
+ url = params.delete("url")
6
+
7
+ request(
8
+ :path => "/blueprints",
9
+ :params => params,
10
+ :query => query,
11
+ :url => url,
12
+ )
13
+ end
14
+ end
15
+
16
+ class Mock
17
+ def get_blueprints(params={})
18
+ extract_url_params!(params)
19
+
20
+ headers, blueprints_page = search_and_page(params, :blueprints, search_keys: %w[account environment environment_id name])
21
+
22
+ response(
23
+ :body => {"blueprints" => blueprints_page},
24
+ :status => 200,
25
+ :headers => headers,
26
+ )
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ class Ey::Core::Client
2
+ class Real
3
+ def update_blueprint(params={})
4
+ id = params.delete("id")
5
+
6
+ request(
7
+ :path => "blueprints/#{id}",
8
+ :body => params,
9
+ :method => :put
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def update_blueprint(params={})
16
+ params = Cistern::Hash.stringify_keys(params)
17
+ blueprint_params = params["blueprint"]
18
+ blueprint = find(:blueprints, params["id"])
19
+
20
+ blueprint["name"] = blueprint_params["name"]
21
+ self.data[:blueprints][blueprint["id"]] = blueprint
22
+
23
+ response(
24
+ :body => {"blueprint" => blueprint},
25
+ :status => 200,
26
+ )
27
+ end
28
+ end
29
+ end
@@ -1,5 +1,5 @@
1
1
  module Ey
2
2
  module Core
3
- VERSION = "3.0.3"
3
+ VERSION = "3.0.4"
4
4
  end
5
5
  end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'as a user' do
4
+ let!(:client) { create_client }
5
+
6
+ context "with a blueprint" do
7
+ let!(:account) { create_account(client: client) }
8
+ let!(:provider) { create_provider(account: account) }
9
+ let!(:app) { create_application(account: account, client: client) }
10
+ let!(:environment) { create_environment(account: account, app: app, environment: { name: SecureRandom.hex(3)}, configuration: { type: "production"}) }
11
+ let!(:blueprint) { environment.save_blueprint("name" => SecureRandom.hex(3)) }
12
+
13
+ it "changes the name" do
14
+ name = SecureRandom.hex(4)
15
+ expect {
16
+ blueprint.update(name: name)
17
+ }.to change { blueprint.reload.name }.to(name)
18
+ end
19
+
20
+ it "deletes the blueprint" do
21
+ expect {
22
+ blueprint.destroy
23
+ }.to change { blueprint.reload }.to(nil)
24
+ end
25
+
26
+ it "boots an environment from a blueprint" do
27
+ new_environment = create_environment(account: account, app: app, environment: {name: SecureRandom.hex(5)}, boot: false)
28
+
29
+ expect {
30
+ new_environment.boot("blueprint_id" => blueprint.id)
31
+ }.to change { new_environment.servers.count }.to(5)
32
+ end
33
+ end
34
+ end
@@ -68,7 +68,22 @@ describe 'as a user' do
68
68
 
69
69
  context "with an environment" do
70
70
  let!(:name) { Faker::Name.first_name }
71
- let!(:environment) { create_environment(account: account, application: app, environment: {name: name}) }
71
+ let!(:environment) { create_environment(account: account, application: app, environment: {name: name}, configuration: {type: "production"}) }
72
+
73
+ it "has the right number of servers" do
74
+ expect(environment.servers.count).to eq(5)
75
+ end
76
+
77
+ it "creates a blueprint" do
78
+ blueprint = nil
79
+ expect {
80
+ blueprint = environment.save_blueprint("name" => SecureRandom.hex(3))
81
+ }.to change { environment.blueprints.count }.by(1)
82
+
83
+ expect(blueprint.data["app_instances"].count).to eq(3)
84
+ expect(blueprint.data["db_master"].count).to eq(1)
85
+ expect(blueprint.data["db_slaves"].count).to eq(1)
86
+ end
72
87
 
73
88
  it "applies main" do
74
89
  expect(environment.apply.ready!).to be_successful
@@ -111,6 +111,7 @@ module ResourceHelper
111
111
  application = options[:application] || create_application(account: account)
112
112
  database_service = options[:database_service]
113
113
  configuration = Cistern::Hash.stringify_keys(options[:configuration] || {})
114
+ configuration["type"] = "production-cluster" if configuration["type"] == "production"
114
115
  configuration["type"] ||= "solo"
115
116
  environment[:name] ||= options.fetch(:name, SecureRandom.hex(3))
116
117
  environment[:region] ||= "us-west-2"
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.3
4
+ version: 3.0.4
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-03-10 00:00:00.000000000 Z
11
+ date: 2016-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -145,6 +145,7 @@ files:
145
145
  - lib/ey-core/collections/application_deployments.rb
146
146
  - lib/ey-core/collections/applications.rb
147
147
  - lib/ey-core/collections/backup_files.rb
148
+ - lib/ey-core/collections/blueprints.rb
148
149
  - lib/ey-core/collections/components.rb
149
150
  - lib/ey-core/collections/contacts.rb
150
151
  - lib/ey-core/collections/costs.rb
@@ -207,6 +208,7 @@ files:
207
208
  - lib/ey-core/models/application_deployment.rb
208
209
  - lib/ey-core/models/backup_file.rb
209
210
  - lib/ey-core/models/billing.rb
211
+ - lib/ey-core/models/blueprint.rb
210
212
  - lib/ey-core/models/component.rb
211
213
  - lib/ey-core/models/contact.rb
212
214
  - lib/ey-core/models/cost.rb
@@ -256,6 +258,7 @@ files:
256
258
  - lib/ey-core/requests/apply_server_updates.rb
257
259
  - lib/ey-core/requests/attach_address.rb
258
260
  - lib/ey-core/requests/authorized_channel.rb
261
+ - lib/ey-core/requests/blueprint_environment.rb
259
262
  - lib/ey-core/requests/boot_environment.rb
260
263
  - lib/ey-core/requests/bootstrap_logical_database.rb
261
264
  - lib/ey-core/requests/cancel_account.rb
@@ -293,6 +296,7 @@ files:
293
296
  - lib/ey-core/requests/deploy_environment_application.rb
294
297
  - lib/ey-core/requests/deprovision_environment.rb
295
298
  - lib/ey-core/requests/destroy_addon.rb
299
+ - lib/ey-core/requests/destroy_blueprint.rb
296
300
  - lib/ey-core/requests/destroy_database_server.rb
297
301
  - lib/ey-core/requests/destroy_database_server_snapshot.rb
298
302
  - lib/ey-core/requests/destroy_database_service.rb
@@ -336,6 +340,8 @@ files:
336
340
  - lib/ey-core/requests/get_backup_file.rb
337
341
  - lib/ey-core/requests/get_backup_files.rb
338
342
  - lib/ey-core/requests/get_billing.rb
343
+ - lib/ey-core/requests/get_blueprint.rb
344
+ - lib/ey-core/requests/get_blueprints.rb
339
345
  - lib/ey-core/requests/get_component.rb
340
346
  - lib/ey-core/requests/get_components.rb
341
347
  - lib/ey-core/requests/get_contacts.rb
@@ -427,6 +433,7 @@ files:
427
433
  - lib/ey-core/requests/update_alert.rb
428
434
  - lib/ey-core/requests/update_application_archive.rb
429
435
  - lib/ey-core/requests/update_billing.rb
436
+ - lib/ey-core/requests/update_blueprint.rb
430
437
  - lib/ey-core/requests/update_connector.rb
431
438
  - lib/ey-core/requests/update_membership.rb
432
439
  - lib/ey-core/requests/update_server.rb
@@ -447,6 +454,7 @@ files:
447
454
  - spec/application_archives_spec.rb
448
455
  - spec/applications_spec.rb
449
456
  - spec/billing_spec.rb
457
+ - spec/blueprints_spec.rb
450
458
  - spec/client_spec.rb
451
459
  - spec/collection_spec.rb
452
460
  - spec/costs_spec.rb
@@ -514,7 +522,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
514
522
  version: '0'
515
523
  requirements: []
516
524
  rubyforge_project:
517
- rubygems_version: 2.4.5
525
+ rubygems_version: 2.5.1
518
526
  signing_key:
519
527
  specification_version: 4
520
528
  summary: Client library providing real and mock functionality for accessing Engine
@@ -529,6 +537,7 @@ test_files:
529
537
  - spec/application_archives_spec.rb
530
538
  - spec/applications_spec.rb
531
539
  - spec/billing_spec.rb
540
+ - spec/blueprints_spec.rb
532
541
  - spec/client_spec.rb
533
542
  - spec/collection_spec.rb
534
543
  - spec/costs_spec.rb