engineyard 0.5.5 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/engineyard/cli.rb +7 -4
- data/lib/engineyard/cli/web.rb +8 -4
- data/lib/engineyard/model/instance.rb +7 -33
- data/lib/engineyard/thor.rb +4 -0
- data/lib/engineyard/version.rb +1 -1
- data/spec/ey/deploy_spec.rb +12 -7
- data/spec/ey/rollback_spec.rb +3 -1
- data/spec/ey/web/disable_spec.rb +3 -1
- data/spec/ey/web/enable_spec.rb +3 -1
- data/spec/support/fake_awsm.ru +93 -0
- data/spec/support/shared_behavior.rb +44 -20
- metadata +4 -5
- data/spec/engineyard/model/instance_spec.rb +0 -70
data/lib/engineyard/cli.rb
CHANGED
@@ -41,7 +41,7 @@ module EY
|
|
41
41
|
method_option :app, :type => :string, :aliases => %w(-a),
|
42
42
|
:desc => "Name of the application to deploy"
|
43
43
|
def deploy
|
44
|
-
app =
|
44
|
+
app = fetch_app(options[:app])
|
45
45
|
environment = fetch_environment(options[:environment], app)
|
46
46
|
deploy_ref = if options[:app]
|
47
47
|
environment.resolve_branch(options[:ref], options[:force]) ||
|
@@ -108,11 +108,14 @@ module EY
|
|
108
108
|
Uses code from previous deploy in the "/data/APP_NAME/releases" directory on
|
109
109
|
remote server(s) to restart application servers.
|
110
110
|
DESC
|
111
|
+
|
111
112
|
method_option :environment, :type => :string, :aliases => %w(-e),
|
112
|
-
:desc => "Environment in which to roll back the
|
113
|
+
:desc => "Environment in which to roll back the application"
|
114
|
+
method_option :app, :type => :string, :aliases => %w(-a),
|
115
|
+
:desc => "Name of the application to roll back"
|
113
116
|
def rollback
|
114
|
-
app =
|
115
|
-
env = fetch_environment(options[:environment])
|
117
|
+
app = fetch_app(options[:app])
|
118
|
+
env = fetch_environment(options[:environment], app)
|
116
119
|
|
117
120
|
loudly_check_eysd(env)
|
118
121
|
|
data/lib/engineyard/cli/web.rb
CHANGED
@@ -4,9 +4,11 @@ module EY
|
|
4
4
|
desc "enable [--environment/-e ENVIRONMENT]",
|
5
5
|
"Remove the maintenance page for this application in the given environment."
|
6
6
|
method_option :environment, :type => :string, :aliases => %w(-e),
|
7
|
-
:desc => "Environment on which to
|
7
|
+
:desc => "Environment on which to take down the maintenance page"
|
8
|
+
method_option :app, :type => :string, :aliases => %w(-a),
|
9
|
+
:desc => "Name of the application whose maintenance page will be removed"
|
8
10
|
def enable
|
9
|
-
app =
|
11
|
+
app = fetch_app(options[:app])
|
10
12
|
environment = fetch_environment(options[:environment], app)
|
11
13
|
loudly_check_eysd(environment)
|
12
14
|
EY.ui.info "Taking down maintenance page for #{environment.name}"
|
@@ -27,9 +29,11 @@ module EY
|
|
27
29
|
* public/system/maintenance.html.default
|
28
30
|
DESC
|
29
31
|
method_option :environment, :type => :string, :aliases => %w(-e),
|
30
|
-
:desc => "Environment on which to
|
32
|
+
:desc => "Environment on which to put up the maintenance page"
|
33
|
+
method_option :app, :type => :string, :aliases => %w(-a),
|
34
|
+
:desc => "Name of the application whose maintenance page will be put up"
|
31
35
|
def disable
|
32
|
-
app =
|
36
|
+
app = fetch_app(options[:app])
|
33
37
|
environment = fetch_environment(options[:environment], app)
|
34
38
|
loudly_check_eysd(environment)
|
35
39
|
EY.ui.info "Putting up maintenance page for #{environment.name}"
|
@@ -3,27 +3,11 @@ require 'escape'
|
|
3
3
|
module EY
|
4
4
|
module Model
|
5
5
|
class Instance < ApiStruct.new(:id, :role, :name, :status, :amazon_id, :public_hostname, :environment)
|
6
|
-
EYSD_VERSION = "
|
7
|
-
CHECK_SCRIPT = <<-SCRIPT
|
8
|
-
require "rubygems"
|
9
|
-
requirement = Gem::Requirement.new("#{EYSD_VERSION}")
|
10
|
-
required_version = requirement.requirements.last.last # thanks thanks rubygems rubygems
|
11
|
-
|
12
|
-
# this will be a ["name-version", Gem::Specification] two-element array if present, nil otherwise
|
13
|
-
ey_deploy_geminfo = Gem.source_index.find{ |(name,_)| name =~ /^ey-deploy-\\\d/ }
|
14
|
-
exit(104) unless ey_deploy_geminfo
|
15
|
-
|
16
|
-
current_version = ey_deploy_geminfo.last.version
|
17
|
-
exit(0) if requirement.satisfied_by?(current_version)
|
18
|
-
exit(70) if required_version > current_version
|
19
|
-
exit(17) # required_version < current_version
|
20
|
-
SCRIPT
|
6
|
+
EYSD_VERSION = ENV["EY_DEPLOY_VERSION"] || "0.7.0"
|
21
7
|
EXIT_STATUS = Hash.new { |h,k| raise EY::Error, "ey-deploy version checker exited with unknown status code #{k}" }
|
22
8
|
EXIT_STATUS.merge!({
|
23
9
|
255 => :ssh_failed,
|
24
|
-
|
25
|
-
70 => :too_old,
|
26
|
-
17 => :too_new,
|
10
|
+
1 => :eysd_missing,
|
27
11
|
0 => :ok,
|
28
12
|
})
|
29
13
|
|
@@ -79,11 +63,6 @@ exit(17) # required_version < current_version
|
|
79
63
|
when :eysd_missing
|
80
64
|
yield :installing if block_given?
|
81
65
|
install_ey_deploy
|
82
|
-
when :too_new
|
83
|
-
raise EnvironmentError, "server-side component too new; please upgrade your copy of the engineyard gem."
|
84
|
-
when :too_old
|
85
|
-
yield :upgrading if block_given?
|
86
|
-
upgrade_ey_deploy
|
87
66
|
when :ok
|
88
67
|
# no action needed
|
89
68
|
else
|
@@ -92,12 +71,12 @@ exit(17) # required_version < current_version
|
|
92
71
|
end
|
93
72
|
|
94
73
|
def ey_deploy_check
|
95
|
-
|
96
|
-
|
97
|
-
ssh "#{ruby_path} -r base64 -e \"eval Base64.decode64(ARGV[0])\" #{encoded_script}", false
|
74
|
+
escaped_eysd_version = EYSD_VERSION.gsub(/\./, '\.')
|
75
|
+
|
98
76
|
if ENV["NO_SSH"]
|
99
77
|
:ok
|
100
78
|
else
|
79
|
+
ssh "#{gem_path} list ey-deploy | grep \"ey-deploy \" | egrep -q '#{escaped_eysd_version}[,)]'"
|
101
80
|
EXIT_STATUS[$?.exitstatus]
|
102
81
|
end
|
103
82
|
end
|
@@ -111,12 +90,7 @@ exit(17) # required_version < current_version
|
|
111
90
|
#
|
112
91
|
# rubygems help suggests that --remote will disable this
|
113
92
|
# behavior, but it doesn't.
|
114
|
-
"cd `mktemp -d` && #{gem_path} install ey-deploy --no-rdoc --no-ri -v
|
115
|
-
end
|
116
|
-
|
117
|
-
def upgrade_ey_deploy
|
118
|
-
ssh "sudo #{gem_path} uninstall -a -x ey-deploy"
|
119
|
-
install_ey_deploy
|
93
|
+
"cd `mktemp -d` && #{gem_path} install ey-deploy --no-rdoc --no-ri -v #{EYSD_VERSION}"]))
|
120
94
|
end
|
121
95
|
|
122
96
|
private
|
@@ -135,7 +109,7 @@ exit(17) # required_version < current_version
|
|
135
109
|
end
|
136
110
|
|
137
111
|
def invoke_eysd_deploy(deploy_args)
|
138
|
-
start = [eysd_path, 'deploy']
|
112
|
+
start = [eysd_path, "_#{EYSD_VERSION}_", 'deploy']
|
139
113
|
instance_args = environment.instances.inject(['--instances']) do |command, inst|
|
140
114
|
instance_tuple = [inst.public_hostname, inst.role]
|
141
115
|
instance_tuple << inst.name if inst.name
|
data/lib/engineyard/thor.rb
CHANGED
data/lib/engineyard/version.rb
CHANGED
data/spec/ey/deploy_spec.rb
CHANGED
@@ -28,17 +28,20 @@ describe "ey deploy" do
|
|
28
28
|
|
29
29
|
def command_to_run(options)
|
30
30
|
cmd = "deploy"
|
31
|
-
cmd << "
|
31
|
+
cmd << " --environment #{options[:env]}" if options[:env]
|
32
|
+
cmd << " --app #{options[:app]}" if options[:app]
|
33
|
+
cmd << " --ref #{options[:ref]}" if options[:ref]
|
32
34
|
cmd
|
33
35
|
end
|
34
36
|
|
35
37
|
def verify_ran(scenario)
|
36
38
|
@out.should match(/Running deploy for '#{scenario[:environment]}'/)
|
37
|
-
@ssh_commands.should have_command_like(/eysd
|
39
|
+
@ssh_commands.should have_command_like(/eysd.*deploy.*--app #{scenario[:application]}/)
|
38
40
|
end
|
39
41
|
|
40
42
|
# common behavior
|
41
43
|
it_should_behave_like "it takes an environment name"
|
44
|
+
it_should_behave_like "it takes an app name"
|
42
45
|
it_should_behave_like "it invokes eysd"
|
43
46
|
end
|
44
47
|
|
@@ -84,13 +87,13 @@ describe "ey deploy" do
|
|
84
87
|
|
85
88
|
it "defaults to 'rake db:migrate'" do
|
86
89
|
ey "deploy"
|
87
|
-
@ssh_commands.last.should =~ /eysd
|
90
|
+
@ssh_commands.last.should =~ /eysd.*deploy/
|
88
91
|
@ssh_commands.last.should =~ /--migrate 'rake db:migrate'/
|
89
92
|
end
|
90
93
|
|
91
94
|
it "can be disabled with --no-migrate" do
|
92
95
|
ey "deploy --no-migrate"
|
93
|
-
@ssh_commands.last.should =~ /eysd
|
96
|
+
@ssh_commands.last.should =~ /eysd.*deploy/
|
94
97
|
@ssh_commands.last.should_not =~ /--migrate/
|
95
98
|
end
|
96
99
|
end
|
@@ -215,8 +218,10 @@ describe "ey deploy" do
|
|
215
218
|
end
|
216
219
|
|
217
220
|
it "requires that you specify a ref when specifying the application" do
|
218
|
-
|
219
|
-
|
221
|
+
Dir.chdir(File.expand_path("~")) do
|
222
|
+
ey "deploy --app rails232app", :expect_failure => true
|
223
|
+
@err.should match(/you must also specify the ref to deploy/)
|
224
|
+
end
|
220
225
|
end
|
221
226
|
end
|
222
227
|
|
@@ -226,7 +231,7 @@ describe "ey deploy" do
|
|
226
231
|
before(:all) do
|
227
232
|
api_scenario "one app, one environment", "user@git.host:path/to/repo.git"
|
228
233
|
ey "deploy"
|
229
|
-
@deploy_command = @ssh_commands.find {|c| c =~ /eysd
|
234
|
+
@deploy_command = @ssh_commands.find {|c| c =~ /eysd.*deploy/ }
|
230
235
|
end
|
231
236
|
|
232
237
|
it "passes along the repository URL to eysd" do
|
data/spec/ey/rollback_spec.rb
CHANGED
@@ -6,16 +6,18 @@ describe "ey rollback" do
|
|
6
6
|
def command_to_run(opts)
|
7
7
|
cmd = "rollback"
|
8
8
|
cmd << " -e #{opts[:env]}" if opts[:env]
|
9
|
+
cmd << " -a #{opts[:app]}" if opts[:app]
|
9
10
|
cmd
|
10
11
|
end
|
11
12
|
|
12
13
|
def verify_ran(scenario)
|
13
14
|
@out.should match(/Rolling back #{scenario[:environment]}/)
|
14
15
|
@err.should be_empty
|
15
|
-
@ssh_commands.last.should match(/eysd
|
16
|
+
@ssh_commands.last.should match(/eysd.*deploy rollback.*--app #{scenario[:application]}/)
|
16
17
|
end
|
17
18
|
|
18
19
|
it_should_behave_like "it takes an environment name"
|
20
|
+
it_should_behave_like "it takes an app name"
|
19
21
|
it_should_behave_like "it invokes eysd"
|
20
22
|
|
21
23
|
it "passes along the web server stack to eysd" do
|
data/spec/ey/web/disable_spec.rb
CHANGED
@@ -6,13 +6,15 @@ describe "ey web disable" do
|
|
6
6
|
def command_to_run(opts)
|
7
7
|
cmd = "web disable"
|
8
8
|
cmd << " -e #{opts[:env]}" if opts[:env]
|
9
|
+
cmd << " -a #{opts[:app]}" if opts[:app]
|
9
10
|
cmd
|
10
11
|
end
|
11
12
|
|
12
13
|
def verify_ran(scenario)
|
13
|
-
@ssh_commands.should have_command_like(/eysd
|
14
|
+
@ssh_commands.should have_command_like(/eysd.*deploy enable_maintenance_page.*--app #{scenario[:application]}/)
|
14
15
|
end
|
15
16
|
|
16
17
|
it_should_behave_like "it takes an environment name"
|
18
|
+
it_should_behave_like "it takes an app name"
|
17
19
|
it_should_behave_like "it invokes eysd"
|
18
20
|
end
|
data/spec/ey/web/enable_spec.rb
CHANGED
@@ -6,13 +6,15 @@ describe "ey web enable" do
|
|
6
6
|
def command_to_run(opts)
|
7
7
|
cmd = "web enable"
|
8
8
|
cmd << " -e #{opts[:env]}" if opts[:env]
|
9
|
+
cmd << " -a #{opts[:app]}" if opts[:app]
|
9
10
|
cmd
|
10
11
|
end
|
11
12
|
|
12
13
|
def verify_ran(scenario)
|
13
|
-
@ssh_commands.should have_command_like(/eysd
|
14
|
+
@ssh_commands.should have_command_like(/eysd.*deploy disable_maintenance_page.*--app #{scenario[:application]}/)
|
14
15
|
end
|
15
16
|
|
16
17
|
it_should_behave_like "it takes an environment name"
|
18
|
+
it_should_behave_like "it takes an app name"
|
17
19
|
it_should_behave_like "it invokes eysd"
|
18
20
|
end
|
data/spec/support/fake_awsm.ru
CHANGED
@@ -26,6 +26,8 @@ class FakeAwsm < Sinatra::Base
|
|
26
26
|
Scenario::Empty
|
27
27
|
when "one app, one environment, not linked"
|
28
28
|
Scenario::UnlinkedApp
|
29
|
+
when "two apps"
|
30
|
+
Scenario::TwoApps
|
29
31
|
when "one app, one environment"
|
30
32
|
Scenario::LinkedApp
|
31
33
|
when "one app, one environment, app master red"
|
@@ -194,6 +196,7 @@ private
|
|
194
196
|
"public_hostname" => "ec2-184-73-116-228.compute-1.amazonaws.com",
|
195
197
|
}]
|
196
198
|
end
|
199
|
+
private :_instances
|
197
200
|
|
198
201
|
def apps
|
199
202
|
[{"name" => "rails232app",
|
@@ -326,6 +329,96 @@ private
|
|
326
329
|
end
|
327
330
|
end # OneAppTwoEnvs
|
328
331
|
|
332
|
+
class TwoApps < Empty
|
333
|
+
def railsapp_master
|
334
|
+
{
|
335
|
+
"status" => "running",
|
336
|
+
"name" => nil,
|
337
|
+
"role" => "solo",
|
338
|
+
"public_hostname" => "ec2-174-129-7-113.compute-1.amazonaws.com",
|
339
|
+
"id" => 35707,
|
340
|
+
"amazon_id" => "i-0911f063",
|
341
|
+
}
|
342
|
+
end
|
343
|
+
private :railsapp_master
|
344
|
+
|
345
|
+
def keycollector_master
|
346
|
+
{
|
347
|
+
"status" => "running",
|
348
|
+
"name" => nil,
|
349
|
+
"role" => "solo",
|
350
|
+
"public_hostname" => "ec2-174-129-198-124.compute-1.amazonaws.com",
|
351
|
+
"id" => 75428,
|
352
|
+
"amazon_id" => "i-051195b9",
|
353
|
+
}
|
354
|
+
end
|
355
|
+
private :keycollector_master
|
356
|
+
|
357
|
+
def apps
|
358
|
+
[{
|
359
|
+
"id" => 3202,
|
360
|
+
"name" => "keycollector",
|
361
|
+
"repository_uri" => "git@github.com:smerritt/keycollector.git",
|
362
|
+
"instances_count" => 0,
|
363
|
+
"ssh_username" => "deploy",
|
364
|
+
"environments" => [{
|
365
|
+
"apps" => [{
|
366
|
+
"name" => "keycollector",
|
367
|
+
"repository_uri" => "git@github.com:smerritt/keycollector.git",
|
368
|
+
"id" => 3202}],
|
369
|
+
"name" => "keycollector_production",
|
370
|
+
"app_master" => keycollector_master,
|
371
|
+
"instances" => [keycollector_master],
|
372
|
+
"id" => 4359,
|
373
|
+
"stack_name" => "nginx_mongrel"}],
|
374
|
+
}, {
|
375
|
+
"name" => "rails232app",
|
376
|
+
"repository_uri" => "git://github.com/smerritt/rails232app.git",
|
377
|
+
"id" => 6125,
|
378
|
+
"environments" => [{
|
379
|
+
"apps" => [{
|
380
|
+
"name" => "rails232app",
|
381
|
+
"repository_uri" => "git://github.com/smerritt/rails232app.git",
|
382
|
+
"id" => 6125}],
|
383
|
+
"instances_count" => 1,
|
384
|
+
"ssh_username" => "turkey",
|
385
|
+
"name" => "giblets",
|
386
|
+
"app_master" => railsapp_master,
|
387
|
+
"instances" => [railsapp_master],
|
388
|
+
"id" => 200,
|
389
|
+
"stack_name" => "nginx_unicorn"}],
|
390
|
+
}]
|
391
|
+
end
|
392
|
+
|
393
|
+
def environments
|
394
|
+
[{
|
395
|
+
"id" => 200,
|
396
|
+
"name" => "giblets",
|
397
|
+
"ssh_username" => "turkey",
|
398
|
+
"instances_count" => 1,
|
399
|
+
"instances" => [railsapp_master],
|
400
|
+
"app_master" => railsapp_master,
|
401
|
+
"stack_name" => "nginx_unicorn",
|
402
|
+
"apps" => [{
|
403
|
+
"name" => "rails232app",
|
404
|
+
"repository_uri" => "git://github.com/smerritt/rails232app.git",
|
405
|
+
"id" => 6125}],
|
406
|
+
}, {
|
407
|
+
"id" => 4359,
|
408
|
+
"name" => "keycollector_production",
|
409
|
+
"ssh_username" => "deploy",
|
410
|
+
"stack_name" => "nginx_mongrel",
|
411
|
+
"instances_count" => 1,
|
412
|
+
"instances" => [keycollector_master],
|
413
|
+
"app_master" => keycollector_master,
|
414
|
+
"apps" => [{
|
415
|
+
"name" => "keycollector",
|
416
|
+
"repository_uri" => "git@github.com:smerritt/keycollector.git",
|
417
|
+
"id" => 3202}],
|
418
|
+
}]
|
419
|
+
end
|
420
|
+
end # TwoApps
|
421
|
+
|
329
422
|
class OneAppManySimilarlyNamedEnvs < Empty
|
330
423
|
def apps
|
331
424
|
apps = [{
|
@@ -72,6 +72,44 @@ shared_examples_for "it takes an environment name" do
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
+
shared_examples_for "it takes an app name" do
|
76
|
+
include Spec::Helpers::SharedIntegrationTestUtils
|
77
|
+
|
78
|
+
it "allows you to specify a valid app" do
|
79
|
+
api_scenario "one app, one environment"
|
80
|
+
Dir.chdir(Dir.tmpdir) do
|
81
|
+
run_ey({:env => 'giblets', :app => 'rails232app', :ref => 'master'}, {})
|
82
|
+
verify_ran(make_scenario({
|
83
|
+
:environment => 'giblets',
|
84
|
+
:application => 'rails232app',
|
85
|
+
:master_hostname => 'ec2-174-129-198-124.compute-1.amazonaws.com',
|
86
|
+
:ssh_username => 'turkey',
|
87
|
+
}))
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
it "can guess the environment from the app" do
|
92
|
+
api_scenario "two apps"
|
93
|
+
Dir.chdir(Dir.tmpdir) do
|
94
|
+
run_ey({:app => 'rails232app', :ref => 'master'}, {})
|
95
|
+
verify_ran(make_scenario({
|
96
|
+
:environment => 'giblets',
|
97
|
+
:application => 'rails232app',
|
98
|
+
:master_hostname => 'ec2-174-129-198-124.compute-1.amazonaws.com',
|
99
|
+
:ssh_username => 'turkey',
|
100
|
+
}))
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
it "complains when you specify a nonexistant app" do
|
105
|
+
api_scenario "one app, one environment"
|
106
|
+
run_ey({:env => 'giblets', :app => 'P-time-SAT-solver', :ref => 'master'},
|
107
|
+
{:expect_failure => true})
|
108
|
+
@err.should =~ /no app.*P-time-SAT-solver/i
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
75
113
|
shared_examples_for "it invokes eysd" do
|
76
114
|
include Spec::Helpers::SharedIntegrationTestUtils
|
77
115
|
|
@@ -95,7 +133,7 @@ shared_examples_for "it invokes eysd" do
|
|
95
133
|
@ssh_commands.last.should match(/--instances (#{instance_args.join('|')})/)
|
96
134
|
end
|
97
135
|
|
98
|
-
context "eysd
|
136
|
+
context "eysd installation" do
|
99
137
|
before(:all) do
|
100
138
|
api_scenario "one app, one environment"
|
101
139
|
end
|
@@ -109,7 +147,7 @@ shared_examples_for "it invokes eysd" do
|
|
109
147
|
end
|
110
148
|
|
111
149
|
def exiting_ssh(exit_code)
|
112
|
-
"#!/usr/bin/env ruby\n exit!(#{exit_code}) if ARGV.to_s =~ /
|
150
|
+
"#!/usr/bin/env ruby\n exit!(#{exit_code}) if ARGV.to_s =~ /gem list ey-deploy/"
|
113
151
|
end
|
114
152
|
|
115
153
|
it "raises an error if SSH fails" do
|
@@ -119,7 +157,7 @@ shared_examples_for "it invokes eysd" do
|
|
119
157
|
end
|
120
158
|
|
121
159
|
it "installs ey-deploy if it's missing" do
|
122
|
-
run_ey({:env => 'giblets'}, {:prepend_to_path => {'ssh' => exiting_ssh(
|
160
|
+
run_ey({:env => 'giblets'}, {:prepend_to_path => {'ssh' => exiting_ssh(1)}})
|
123
161
|
|
124
162
|
gem_install_command = @ssh_commands.find do |command|
|
125
163
|
command =~ /gem install ey-deploy/
|
@@ -128,25 +166,11 @@ shared_examples_for "it invokes eysd" do
|
|
128
166
|
gem_install_command.should =~ %r{/usr/local/ey_resin/ruby/bin/gem install.*ey-deploy}
|
129
167
|
end
|
130
168
|
|
131
|
-
it "
|
132
|
-
run_ey({:env => 'giblets'}, {:prepend_to_path => {'ssh' => exiting_ssh(70)}})
|
133
|
-
@ssh_commands.should have_command_like(/gem uninstall -a -x ey-deploy/)
|
134
|
-
@ssh_commands.should have_command_like(/gem install ey-deploy/)
|
135
|
-
end
|
136
|
-
|
137
|
-
it "raises an error if ey-deploy is too new" do
|
138
|
-
run_ey({:env => 'giblets'},
|
139
|
-
{:prepend_to_path => {'ssh' => exiting_ssh(17)}, :expect_failure => true})
|
140
|
-
@ssh_commands.should_not have_command_like(/gem install ey-deploy/)
|
141
|
-
@ssh_commands.should_not have_command_like(/eysd deploy/)
|
142
|
-
@err.should match(/too new/i)
|
143
|
-
end
|
144
|
-
|
145
|
-
it "does not change ey-deploy if its version is satisfactory" do
|
169
|
+
it "does not try to install ey-deploy if it's already there" do
|
146
170
|
run_ey({:env => 'giblets'}, {:prepend_to_path => {'ssh' => exiting_ssh(0)}})
|
147
171
|
@ssh_commands.should_not have_command_like(/gem install ey-deploy/)
|
148
|
-
|
149
|
-
@ssh_commands.should have_command_like(/eysd deploy/)
|
172
|
+
ver = Regexp.quote(EY::Model::Instance::EYSD_VERSION)
|
173
|
+
@ssh_commands.should have_command_like(/eysd _#{ver}_ deploy/)
|
150
174
|
end
|
151
175
|
end
|
152
176
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 7
|
8
|
+
- 0
|
9
|
+
version: 0.7.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- EY Cloud Team
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-06-
|
17
|
+
date: 2010-06-25 00:00:00 -07:00
|
18
18
|
default_executable: ey
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -196,7 +196,6 @@ test_files:
|
|
196
196
|
- spec/engineyard/config_spec.rb
|
197
197
|
- spec/engineyard/model/api_struct_spec.rb
|
198
198
|
- spec/engineyard/model/environment_spec.rb
|
199
|
-
- spec/engineyard/model/instance_spec.rb
|
200
199
|
- spec/engineyard/repo_spec.rb
|
201
200
|
- spec/engineyard_spec.rb
|
202
201
|
- spec/ey/deploy_spec.rb
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "EY::Model::Instance's script for checking ey-deploy's version" do
|
4
|
-
|
5
|
-
def fake_out_no_ey_deploy
|
6
|
-
Gem.should_receive(:source_index).and_return(Gem::SourceIndex.new)
|
7
|
-
end
|
8
|
-
|
9
|
-
def fake_out_installed_ey_deploy_version(version)
|
10
|
-
net_sftp_gem = Gem::Specification.new do |s|
|
11
|
-
s.authors = ["Jamis Buck"]
|
12
|
-
s.autorequire = "net/sftp"
|
13
|
-
s.date = Time.utc(2008, 2, 24)
|
14
|
-
s.email = "jamis@jamisbuck.org"
|
15
|
-
s.files = ["doc/faq",
|
16
|
-
# snip
|
17
|
-
"test/protocol/tc_driver.rb"]
|
18
|
-
s.homepage = "http://net-ssh.rubyforge.org/sftp"
|
19
|
-
s.name = "net-sftp"
|
20
|
-
s.require_paths = ["lib"]
|
21
|
-
s.rubygems_version = "1.3.5"
|
22
|
-
s.specification_version = 2
|
23
|
-
s.summary = "Net::SFTP is a pure-Ruby implementation of the SFTP client protocol."
|
24
|
-
s.test_files = ["test/ALL-TESTS.rb"]
|
25
|
-
s.version = Gem::Version.new("1.1.1")
|
26
|
-
end
|
27
|
-
|
28
|
-
ey_deploy_gem = Gem::Specification.new do |s|
|
29
|
-
s.name = 'ey-deploy'
|
30
|
-
s.authors = ["EY Cloud Team"]
|
31
|
-
s.date = Time.utc(2010, 1, 2)
|
32
|
-
s.files = ['lib/engineyard/ey-deploy.rb'] # or something
|
33
|
-
s.specification_version = 2
|
34
|
-
s.version = Gem::Version.new(version)
|
35
|
-
end
|
36
|
-
|
37
|
-
fake_source_index = Gem::SourceIndex.new(
|
38
|
-
'net-sftp-1.1.1' => net_sftp_gem,
|
39
|
-
"ey-deploy-#{version}" => ey_deploy_gem
|
40
|
-
)
|
41
|
-
Gem.should_receive(:source_index).and_return(fake_source_index)
|
42
|
-
end
|
43
|
-
|
44
|
-
def script_exit_status
|
45
|
-
eval EY::Model::Instance::CHECK_SCRIPT
|
46
|
-
rescue SystemExit => e
|
47
|
-
return e.status
|
48
|
-
end
|
49
|
-
|
50
|
-
it "exits 104 if the ey-deploy gem is not installed" do
|
51
|
-
fake_out_no_ey_deploy
|
52
|
-
script_exit_status.should == 104
|
53
|
-
end
|
54
|
-
|
55
|
-
it "exits 70 if the installed ey-deploy is too old" do
|
56
|
-
fake_out_installed_ey_deploy_version('0.0.1')
|
57
|
-
script_exit_status.should == 70
|
58
|
-
end
|
59
|
-
|
60
|
-
it "exits 17 if the installed ey-deploy is too new" do
|
61
|
-
fake_out_installed_ey_deploy_version('1000.0.0')
|
62
|
-
script_exit_status.should == 17
|
63
|
-
end
|
64
|
-
|
65
|
-
it "exits 0 if the version number is correct" do
|
66
|
-
correct_version = EY::Model::Instance::EYSD_VERSION.gsub(/[^\d\.]/, '')
|
67
|
-
fake_out_installed_ey_deploy_version(correct_version)
|
68
|
-
script_exit_status.should == 0
|
69
|
-
end
|
70
|
-
end
|