ey-core 3.1.1 → 3.1.2

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: 1d7bcd4cab04e3baa4a9d4f97d007a8bcd62d6c5
4
- data.tar.gz: f897fde6a12166f73c6a2c0100531c8649736b23
3
+ metadata.gz: 919ebc8c77b103ddfd55db2ba29a66639dfddf34
4
+ data.tar.gz: 3ebcb90ae295acb131ef4412e4f44b91b87542b0
5
5
  SHA512:
6
- metadata.gz: 021ac450b91dc03a331ab9115c774c3d8573dc5a81cec1e98af8c1980928b33b7b54b81108a23876164803b2efbb18808003dbb25113b9393da1f4a9484fecfe
7
- data.tar.gz: 194bb3a534230d94ed4be5afec22c8bc80a9341410da7bf56892d6824b3831d77237e9ab70876f7f0bb7a8f6c36ed2b48ec5eb3e53a3842aa394c2cb201de221
6
+ metadata.gz: 698694cdad540b7c271401dfb3917d93a7bdad374affd8bdd05da34690566de0331c13894fd8b57c4e438038664b6107385e4e6ae1ca2ca48b9f3567c478f3a5
7
+ data.tar.gz: 2b3c997104b8e9e8925ef60848bcbe88da61f21ebda4ed19dd6e27f950378d046ef7137f0dc276477bd4c76444a4f4026571467b10a9fc9d3d61c664a85479f1
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ core-client-rb-upstream
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3
1
+ 2.3.0
data/bin/ey-core CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- require File.expand_path('../../lib/ey-core/cli', __FILE__)
2
+ require File.expand_path('../../lib/ey-core/cli/main', __FILE__)
3
3
 
4
- Ey::Core::Cli.new(ARGV).execute!
4
+ Ey::Core::Cli::Main.new(ARGV).execute!
data/ey-core.gemspec CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |gem|
28
28
  gem.add_dependency "faraday", "~> 0.9"
29
29
  gem.add_dependency "faraday_middleware", "~> 0.9"
30
30
  gem.add_dependency "faye"
31
+ gem.add_dependency "highline"
31
32
  gem.add_dependency "mime-types", "~> 2.99" #maintain ruby 1.9 compatibility
32
33
  gem.add_dependency "oj"
33
34
  gem.add_dependency "oj_mimic_json"
data/lib/ey-core/cli.rb CHANGED
@@ -1,24 +1,8 @@
1
- require 'optparse'
2
- require 'ostruct'
3
- require 'ey-core'
4
- require 'awesome_print'
5
- require 'pry'
6
- require 'belafonte'
7
- require 'table_print'
8
- require 'rubygems/package'
9
- require 'escape'
1
+ module Ey
2
+ module Core
10
3
 
11
- Cistern.formatter = Cistern::Formatter::AwesomePrint
12
-
13
-
14
- class Ey::Core::Cli < Belafonte::App
15
- title "Engineyard CLI"
16
- summary "Successor to the engineyard gem"
17
-
18
- require_relative "cli/subcommand"
19
- Dir[File.dirname(__FILE__) + '/cli/*.rb'].each {|file| load file }
20
-
21
- Ey::Core::Cli::Subcommand.descendants.each do |d|
22
- mount d
4
+ # The overall namespace for CLI-related code
5
+ module Cli
6
+ end
23
7
  end
24
8
  end
@@ -0,0 +1,76 @@
1
+ module Ey
2
+ module Core
3
+ module Cli
4
+ module Helpers
5
+ class ServerSieve
6
+ ROLES = [
7
+ :app_servers,
8
+ :db_servers,
9
+ :db_master,
10
+ :utilities
11
+ ]
12
+
13
+ attr_reader :servers_api, :options
14
+
15
+ def self.filter(servers_api, options = {})
16
+ new(servers_api, options).filtered
17
+ end
18
+
19
+ def initialize(servers_api, options = {})
20
+ @servers_api = servers_api
21
+ @options = options
22
+ end
23
+
24
+ def filtered
25
+ return all_servers if requested?(:all)
26
+
27
+ requested_roles.map {|role|
28
+ role == :utilities ? utils_named(option(:utilities)) : send(role)
29
+ }.flatten.uniq
30
+ end
31
+
32
+ private
33
+ def requested_roles
34
+ #self.class::
35
+ ROLES.select {|role| requested?(role)}
36
+ end
37
+
38
+ def option(name)
39
+ options[name]
40
+ end
41
+
42
+ def requested?(name)
43
+ option(name)
44
+ end
45
+
46
+ def all_servers
47
+ servers_api.all.to_a.uniq
48
+ end
49
+
50
+ def app_servers
51
+ ['app_master', 'app', 'solo'].
52
+ map {|role| servers_api.all(role: role).to_a}.
53
+ flatten
54
+ end
55
+
56
+ def db_servers
57
+ db_master + servers_api.all(role: 'db_slave').to_a
58
+ end
59
+
60
+ def db_master
61
+ ['db_master', 'solo'].
62
+ map {|role| servers_api.all(role: role).to_a}.
63
+ flatten
64
+ end
65
+
66
+ def utils_named(name)
67
+ filter = {role: 'util'}
68
+ filter[:name] = name unless name.downcase == 'all'
69
+
70
+ servers_api.all(filter).to_a
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -3,8 +3,8 @@ class Ey::Core::Cli::Login < Ey::Core::Cli::Subcommand
3
3
  summary "Retrieve API token from Engine Yard Cloud"
4
4
 
5
5
  def handle
6
- email = ENV["EMAIL"] || ask("Email:")
7
- password = ENV["PASSWORD"] || ask("Password:", echo: false)
6
+ email = ENV["EMAIL"] || ask("Email: ")
7
+ password = ENV["PASSWORD"] || ask("Password: ") { |q| q.echo = false }
8
8
 
9
9
  token = unauthenticated_core_client.get_api_token(email, password).body["api_token"]
10
10
 
@@ -0,0 +1,28 @@
1
+ require 'optparse'
2
+ require 'ostruct'
3
+ require 'ey-core'
4
+ require 'ey-core/cli'
5
+ require 'awesome_print'
6
+ require 'pry'
7
+ require 'belafonte'
8
+ require 'table_print'
9
+ require 'rubygems/package'
10
+ require 'escape'
11
+ require 'highline/import'
12
+
13
+ Cistern.formatter = Cistern::Formatter::AwesomePrint
14
+
15
+
16
+ class Ey::Core::Cli::Main < Belafonte::App
17
+ title "Engineyard CLI"
18
+ summary "Successor to the engineyard gem"
19
+
20
+ require_relative "subcommand"
21
+ Dir[File.dirname(__FILE__) + '/*.rb'].
22
+ reject {|file| file =~ /.*\/main\.rb$/}.
23
+ each {|file| load file }
24
+
25
+ Ey::Core::Cli::Subcommand.descendants.each do |d|
26
+ mount d
27
+ end
28
+ end
@@ -5,30 +5,52 @@ class Ey::Core::Cli::Recipes::Apply < Ey::Core::Cli::Recipes
5
5
  option :environment, short: "e", long: "environment", description: "Name or id of environment", argument: "environment"
6
6
 
7
7
  switch :main, short: "m", long: "main", description: "Apply main recipes only"
8
- switch :custom, long: "custom", description: "Apply custom recipes only"
8
+ switch :custom, short: "u", long: "custom", description: "Apply custom recipes only"
9
9
  switch :quick, short: "q", long: "quick", description: "Quick chef run"
10
10
  switch :full, short: "f", long: "full", description: "Run main and custom chef"
11
11
 
12
12
  def handle
13
+ validate_run_type_flags
14
+
13
15
  operator, environment = core_operator_and_environment_for(options)
14
16
  raise "Unable to find matching environment" unless environment
15
17
 
16
- run_type = if switch_active?(:main)
17
- "main"
18
- elsif switch_active?(:custom)
19
- "custom"
20
- elsif switch_active?(:quick)
21
- "quick"
22
- elsif switch_active?(:full)
23
- "main"
24
- else
25
- "main"
26
- end
27
-
28
18
  run_chef(run_type, environment)
29
19
 
30
20
  if switch_active?(:full)
31
21
  run_chef("custom", environment)
32
22
  end
33
23
  end
24
+
25
+ private
26
+ def validate_run_type_flags
27
+ if active_run_type_flags.length > 1
28
+ kernel.abort(
29
+ 'Only one of --main, --custom, --quick, and --full may be specified.'
30
+ )
31
+ end
32
+ end
33
+
34
+ def run_type
35
+ secondary_run_types[active_run_type] || default_run_type
36
+ end
37
+
38
+ def active_run_type
39
+ active_run_type_flags.first
40
+ end
41
+
42
+ def active_run_type_flags
43
+ [:main, :custom, :quick, :full].select {|switch| switch_active?(switch)}
44
+ end
45
+
46
+ def secondary_run_types
47
+ {
48
+ custom: 'custom',
49
+ quick: 'quick'
50
+ }
51
+ end
52
+
53
+ def default_run_type
54
+ 'main'
55
+ end
34
56
  end
@@ -1,3 +1,5 @@
1
+ require 'ey-core/cli/helpers/server_sieve'
2
+
1
3
  class Ey::Core::Cli::Ssh < Ey::Core::Cli::Subcommand
2
4
  title "ssh"
3
5
  summary "Open an SSH session to the environment's application master"
@@ -27,8 +29,6 @@ class Ey::Core::Cli::Ssh < Ey::Core::Cli::Subcommand
27
29
  user = environment.username
28
30
  servers = []
29
31
 
30
-
31
-
32
32
  if option(:command)
33
33
  if shell = option(:shell)
34
34
  cmd = Escape.shell_command([shell,'-lc',cmd])
@@ -40,29 +40,14 @@ class Ey::Core::Cli::Ssh < Ey::Core::Cli::Subcommand
40
40
  puts "sudo commands often need a tty to run correctly. Use -t option to spawn a tty.".yellow
41
41
  end
42
42
 
43
- if switch_active?(:all)
44
- servers += environment.servers.all.to_a
45
- end
46
-
47
- if switch_active?(:app_servers)
48
- servers += (environment.servers.all(role: "app_master") + environment.servers.all(role: "app") + environment.servers.all(role: "solo")).to_a
49
- end
50
-
51
- if switch_active?(:db_servers)
52
- servers += (environment.servers.all(role: "db_master") + environment.servers.all(role: "db_slave") + environment.servers.all(role: "solo")).to_a
53
- end
54
-
55
- if switch_active?(:db_master)
56
- servers += (environment.servers.all(role: "db_master") + environment.servers.all(role: "solo")).to_a
57
- end
58
-
59
- if utils = option(:utilities)
60
- if utils == 'all'
61
- servers += environment.servers.all(role: "util").to_a
62
- else
63
- servers += environment.servers.all(role: "util", name: utils).to_a
64
- end
65
- end
43
+ servers += Ey::Core::Cli::Helpers::ServerSieve.filter(
44
+ environment.servers,
45
+ all: switch_active?(:all),
46
+ app_servers: switch_active?(:app_servers),
47
+ db_servers: switch_active?(:db_servers),
48
+ db_master: switch_active?(:db_master),
49
+ utilities: option(:utilities)
50
+ )
66
51
  else
67
52
  if option(:bind_address)
68
53
  ssh_opts += ["-L", option(:bind_address)]
@@ -79,6 +64,8 @@ class Ey::Core::Cli::Ssh < Ey::Core::Cli::Subcommand
79
64
  abort "Unable to find any matching servers. Aborting.".red
80
65
  end
81
66
 
67
+ servers.uniq!
68
+
82
69
  servers.each do |server|
83
70
  host = server.public_hostname
84
71
  name = server.name ? "#{server.role} (#{server.name})" : server.role
@@ -1,5 +1,5 @@
1
1
  module Ey
2
2
  module Core
3
- VERSION = "3.1.1"
3
+ VERSION = "3.1.2"
4
4
  end
5
5
  end
@@ -0,0 +1,226 @@
1
+ require 'spec_helper'
2
+ require 'ey-core/cli/helpers/server_sieve'
3
+
4
+ module Ey
5
+ module Core
6
+ module Cli
7
+ module Helpers
8
+ describe ServerSieve do
9
+ # Set up individual servers
10
+ let(:app_master_server) {Object.new}
11
+ let(:app_slave_server) {Object.new}
12
+ let(:solo_server) {Object.new}
13
+ let(:db_master_server) {Object.new}
14
+ let(:db_slave_server) {Object.new}
15
+ let(:util_frank_server) {Object.new}
16
+ let(:util_johnny_server) {Object.new}
17
+
18
+ # Set up server groups
19
+ let(:all_apps) {[app_master_server, app_slave_server, solo_server]}
20
+ let(:all_db_master) {[db_master_server, solo_server]}
21
+ let(:all_dbs) {[db_master_server, db_slave_server, solo_server]}
22
+ let(:all_utils) {[util_frank_server, util_johnny_server]}
23
+ let(:all_servers) {all_apps + all_dbs + all_utils}
24
+
25
+ # Set up the upstream servers API
26
+ let(:servers_api) {Object.new}
27
+ before(:each) do
28
+ allow(servers_api).
29
+ to receive(:all).
30
+ with(no_args).
31
+ and_return(all_servers)
32
+
33
+ allow(servers_api).
34
+ to receive(:all).
35
+ with(role: 'app_master').
36
+ and_return([app_master_server])
37
+
38
+ allow(servers_api).
39
+ to receive(:all).
40
+ with(role: 'solo').
41
+ and_return([solo_server])
42
+
43
+ allow(servers_api).
44
+ to receive(:all).
45
+ with(role: 'app').
46
+ and_return([app_slave_server])
47
+
48
+ allow(servers_api).
49
+ to receive(:all).
50
+ with(role: 'db_master').
51
+ and_return([db_master_server])
52
+
53
+ allow(servers_api).
54
+ to receive(:all).
55
+ with(role: 'solo').
56
+ and_return([solo_server])
57
+
58
+ allow(servers_api).
59
+ to receive(:all).
60
+ with(role: 'db_slave').
61
+ and_return([db_slave_server])
62
+
63
+ allow(servers_api).
64
+ to receive(:all).
65
+ with(role: 'db_master').
66
+ and_return([db_master_server])
67
+
68
+ allow(servers_api).
69
+ to receive(:all).
70
+ with(role: 'solo').
71
+ and_return([solo_server])
72
+
73
+ allow(servers_api).
74
+ to receive(:all).
75
+ with(role: 'db_slave').
76
+ and_return([db_slave_server])
77
+
78
+ allow(servers_api).
79
+ to receive(:all).
80
+ with(role: 'util').
81
+ and_return(all_utils)
82
+
83
+ allow(servers_api).
84
+ to receive(:all).
85
+ with(role: 'util', name: 'frank').
86
+ and_return([util_frank_server])
87
+
88
+ end
89
+
90
+ describe '.filter' do
91
+ let(:dummy) {Object.new}
92
+ let(:options) {{foo: 'bar'}}
93
+ let(:filtered) {['servers bruh']}
94
+
95
+ it 'is the same as creating a new sieve and filtering it' do
96
+ expect(described_class).
97
+ to receive(:new).
98
+ with(servers_api, options).
99
+ and_return(dummy)
100
+
101
+ expect(dummy).
102
+ to receive(:filtered).
103
+ and_return(filtered)
104
+
105
+ expect(described_class.filter(servers_api, options)).
106
+ to eql(filtered)
107
+ end
108
+ end
109
+
110
+ describe '#filtered' do
111
+ let(:options) {{}}
112
+ let(:sieve) {described_class.new(servers_api, options)}
113
+ let(:filtered_servers) {sieve.filtered}
114
+
115
+ context 'when all servers are requested' do
116
+ let(:options) {{all: true}}
117
+
118
+ it 'is all of the servers known to the server api' do
119
+ all_servers.each do |server|
120
+ expect(filtered_servers).to include(server)
121
+ end
122
+ end
123
+ end
124
+
125
+ context 'when app servers are requested' do
126
+ let(:options) {{app_servers: true}}
127
+
128
+ it 'includes app_master servers' do
129
+ expect(filtered_servers).to include(app_master_server)
130
+ end
131
+
132
+ it 'includes app (slave) servers' do
133
+ expect(filtered_servers).to include(app_slave_server)
134
+ end
135
+
136
+ it 'includes solo servers' do
137
+ expect(filtered_servers).to include(solo_server)
138
+ end
139
+ end
140
+
141
+ context 'when db servers are requested' do
142
+ let(:options) {{db_servers: true}}
143
+
144
+ it 'includes db_master servers' do
145
+ expect(filtered_servers).to include(db_master_server)
146
+ end
147
+
148
+ it 'includes db_slave servers' do
149
+ expect(filtered_servers).to include(db_slave_server)
150
+ end
151
+
152
+ it 'includes solo servers' do
153
+ expect(filtered_servers).to include(solo_server)
154
+ end
155
+ end
156
+
157
+ context 'when db master is requested' do
158
+ let(:options) {{db_master: true}}
159
+
160
+ it 'includes db_master servers' do
161
+ expect(filtered_servers).to include(db_master_server)
162
+ end
163
+
164
+ it 'includes solo servers' do
165
+ expect(filtered_servers).to include(solo_server)
166
+ end
167
+
168
+ it 'excludes db_slave servers' do
169
+ expect(filtered_servers).not_to include(db_slave_server)
170
+ end
171
+ end
172
+
173
+ context 'when all utils are requested' do
174
+ let(:options) {{utilities: 'all'}}
175
+
176
+ it 'includes all utility servers' do
177
+ all_utils.each do |server|
178
+ expect(filtered_servers).to include(server)
179
+ end
180
+ end
181
+ end
182
+
183
+ context 'when a specific util is requested' do
184
+ let(:options) {{utilities: 'frank'}}
185
+
186
+ it 'includes the requested util' do
187
+ expect(filtered_servers).to include(util_frank_server)
188
+ end
189
+
190
+ it 'excludes all other utils' do
191
+ expect(filtered_servers).not_to include(util_johnny_server)
192
+ end
193
+ end
194
+
195
+ context 'when multiple filters are active' do
196
+
197
+ # Release the Kraken!
198
+ let(:options) {
199
+ {
200
+ all: true,
201
+ app_servers: true,
202
+ db_servers: true,
203
+ db_master: true,
204
+ utilities: 'all'
205
+ }
206
+ }
207
+
208
+ it 'contains no duplicates' do
209
+ all_servers.each do |server|
210
+ count = filtered_servers.select {|item| item == server}.length
211
+ expect(count).to eql(1)
212
+ end
213
+ end
214
+ end
215
+
216
+ context 'when no filters are provided' do
217
+ it 'is empty' do
218
+ expect(filtered_servers).to be_empty
219
+ end
220
+ end
221
+ end
222
+ end
223
+ end
224
+ end
225
+ end
226
+ end
@@ -0,0 +1,91 @@
1
+ require 'spec_helper'
2
+ require 'stringio'
3
+ require 'belafonte'
4
+ require 'ey-core/cli'
5
+ require 'ey-core/cli/subcommand'
6
+ require 'ey-core/cli/recipes'
7
+ require 'ey-core/cli/recipes/apply'
8
+
9
+ describe Ey::Core::Cli::Recipes::Apply do
10
+ set_up_cli
11
+
12
+ before(:each) do
13
+ allow_any_instance_of(described_class).
14
+ to receive(:core_operator_and_environment_for).
15
+ with(any_args).
16
+ and_return([operator, environment])
17
+
18
+ allow_any_instance_of(described_class).
19
+ to receive(:run_chef).
20
+ with(any_args).
21
+ and_return(true)
22
+ end
23
+
24
+ context 'ey-core recipes apply --main' do
25
+ let(:argv) {['--main']}
26
+
27
+ it 'performs a main chef run' do
28
+ expect(cli).to receive(:run_chef).with('main', environment)
29
+
30
+ execute
31
+ expect(kernel.exit_status).to eql(0)
32
+ end
33
+ end
34
+
35
+ context 'ey-core recipes apply --custom' do
36
+ let(:argv) {['--custom']}
37
+
38
+ it 'performs a custom chef run' do
39
+ expect(cli).to receive(:run_chef).with('custom', environment)
40
+
41
+ execute
42
+ expect(kernel.exit_status).to eql(0)
43
+ end
44
+ end
45
+
46
+ context 'ey-core recipes apply --quick' do
47
+ let(:argv) {['--quick']}
48
+
49
+ it 'performs a quick chef run' do
50
+ expect(cli).to receive(:run_chef).with('quick', environment)
51
+
52
+ execute
53
+ expect(kernel.exit_status).to eql(0)
54
+ end
55
+ end
56
+
57
+ context 'ey-core recipes apply --full' do
58
+ let(:argv) {['--full']}
59
+
60
+ it 'performs both a main and a custom chef run' do
61
+ expect(cli).to receive(:run_chef).with('main', environment)
62
+ expect(cli).to receive(:run_chef).with('custom', environment)
63
+
64
+ execute
65
+ expect(kernel.exit_status).to eql(0)
66
+ end
67
+ end
68
+
69
+ context 'attempting to use more than one run type flag' do
70
+ let(:run_type_flags) {['--main', '--custom', '--quick', '--full']}
71
+ let(:combinations) {run_type_flags.combination(2).to_a}
72
+
73
+ it 'aborts with advice regarding the run type flags' do
74
+ expect(kernel).
75
+ to receive(:abort).
76
+ with('Only one of --main, --custom, --quick, and --full may be specified.').
77
+ and_call_original.
78
+ exactly(combinations.length).
79
+ times
80
+
81
+ combinations.each do |combination|
82
+ attempt = described_class.new(combination, stdin, stdout, stderr, kernel)
83
+
84
+ expect(attempt.execute!).not_to eql(0)
85
+
86
+
87
+
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,11 @@
1
+ def set_up_cli
2
+ let(:argv) {[]}
3
+ let(:stdout) {StringIO.new}
4
+ let(:stderr) {StringIO.new}
5
+ let(:stdin) {StringIO.new}
6
+ let(:kernel) {FakeKernel.new}
7
+ let(:cli) {described_class.new(argv, stdin, stdout, stderr, kernel)}
8
+ let(:execute) {cli.execute!}
9
+ let(:operator) {Object.new}
10
+ let(:environment) {Object.new}
11
+ end
@@ -0,0 +1,21 @@
1
+ class FakeKernel
2
+ attr_reader :exit_status
3
+
4
+ def system(*args)
5
+ system_commands.push(args.join(' '))
6
+ end
7
+
8
+ def system_commands
9
+ @system_commands ||= []
10
+ end
11
+
12
+ def abort(msg)
13
+ self.exit(false)
14
+ #exit(false)
15
+ end
16
+
17
+ def exit(whatevs)
18
+ whatevs = -1 unless whatevs.is_a?(Integer)
19
+ @exit_status ||= whatevs
20
+ end
21
+ 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.1.1
4
+ version: 3.1.2
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-05-24 00:00:00.000000000 Z
11
+ date: 2016-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: highline
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: mime-types
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -300,6 +314,7 @@ extensions: []
300
314
  extra_rdoc_files: []
301
315
  files:
302
316
  - ".gitignore"
317
+ - ".ruby-gemset"
303
318
  - ".ruby-version"
304
319
  - ".travis.yml"
305
320
  - CHANGELOG.md
@@ -320,10 +335,12 @@ files:
320
335
  - lib/ey-core/cli/deploy.rb
321
336
  - lib/ey-core/cli/environments.rb
322
337
  - lib/ey-core/cli/errors.rb
338
+ - lib/ey-core/cli/helpers/server_sieve.rb
323
339
  - lib/ey-core/cli/init.rb
324
340
  - lib/ey-core/cli/login.rb
325
341
  - lib/ey-core/cli/logout.rb
326
342
  - lib/ey-core/cli/logs.rb
343
+ - lib/ey-core/cli/main.rb
327
344
  - lib/ey-core/cli/recipes.rb
328
345
  - lib/ey-core/cli/recipes/apply.rb
329
346
  - lib/ey-core/cli/recipes/download.rb
@@ -685,6 +702,8 @@ files:
685
702
  - spec/deployments_spec.rb
686
703
  - spec/environment_plan_usage_spec.rb
687
704
  - spec/environments_spec.rb
705
+ - spec/ey-core/cli/helpers/server_sieve_spec.rb
706
+ - spec/ey-core/cli/recipes/apply_spec.rb
688
707
  - spec/features_spec.rb
689
708
  - spec/firewalls_spec.rb
690
709
  - spec/gems_spec.rb
@@ -713,9 +732,11 @@ files:
713
732
  - spec/storages_spec.rb
714
733
  - spec/support/account_helper.rb
715
734
  - spec/support/alert_helper.rb
735
+ - spec/support/cli_helpers.rb
716
736
  - spec/support/client_helper.rb
717
737
  - spec/support/core.rb
718
738
  - spec/support/coverage.rb
739
+ - spec/support/fake_kernel.rb
719
740
  - spec/support/resource_helper.rb
720
741
  - spec/support/timecop.rb
721
742
  - spec/support_trial_spec.rb
@@ -742,7 +763,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
742
763
  version: '0'
743
764
  requirements: []
744
765
  rubyforge_project:
745
- rubygems_version: 2.4.5
766
+ rubygems_version: 2.5.1
746
767
  signing_key:
747
768
  specification_version: 4
748
769
  summary: Client library providing real and mock functionality for accessing Engine
@@ -769,6 +790,8 @@ test_files:
769
790
  - spec/deployments_spec.rb
770
791
  - spec/environment_plan_usage_spec.rb
771
792
  - spec/environments_spec.rb
793
+ - spec/ey-core/cli/helpers/server_sieve_spec.rb
794
+ - spec/ey-core/cli/recipes/apply_spec.rb
772
795
  - spec/features_spec.rb
773
796
  - spec/firewalls_spec.rb
774
797
  - spec/gems_spec.rb
@@ -797,9 +820,11 @@ test_files:
797
820
  - spec/storages_spec.rb
798
821
  - spec/support/account_helper.rb
799
822
  - spec/support/alert_helper.rb
823
+ - spec/support/cli_helpers.rb
800
824
  - spec/support/client_helper.rb
801
825
  - spec/support/core.rb
802
826
  - spec/support/coverage.rb
827
+ - spec/support/fake_kernel.rb
803
828
  - spec/support/resource_helper.rb
804
829
  - spec/support/timecop.rb
805
830
  - spec/support_trial_spec.rb