engineyard 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -59,7 +59,7 @@ module EY
59
59
 
60
60
  EY.ui.info "Connecting to the server..."
61
61
 
62
- loudly_check_eysd(environment)
62
+ loudly_check_eydeploy(environment)
63
63
 
64
64
  EY.ui.info "Beginning deploy for '#{app.name}' in '#{environment.name}' on server..."
65
65
 
@@ -132,7 +132,7 @@ module EY
132
132
  app = fetch_app(options[:app])
133
133
  env = fetch_environment(options[:environment], app)
134
134
 
135
- loudly_check_eysd(env)
135
+ loudly_check_eydeploy(env)
136
136
 
137
137
  EY.ui.info("Rolling back '#{app.name}' in '#{env.name}'")
138
138
  if env.rollback(app, options[:verbose])
@@ -142,20 +142,45 @@ module EY
142
142
  end
143
143
  end
144
144
 
145
- desc "ssh [--environment ENVIRONMENT]", "Open an ssh session."
145
+ desc "ssh [COMMAND] [--all] [--environment ENVIRONMENT]", "Open an ssh session, or run a command."
146
146
  long_desc <<-DESC
147
- If the environment contains just one server, a session to it will be opened. For
148
- environments with clusters, a session will be opened to the application master.
147
+ If a command is supplied, it will be run, otherwise a session will be
148
+ opened. The application master is used for environments with clusters.
149
+ Option --all requires a command to be supplied and runs it on all servers.
150
+
151
+ Note: this command is a bit picky about its ordering. To run a command with arguments on
152
+ all servers, like "rm -f /some/file", you need to order it like so:
153
+
154
+ $ #{banner_base} ssh "rm -f /some/file" -e my-environment --all
149
155
  DESC
150
156
  method_option :environment, :type => :string, :aliases => %w(-e),
151
157
  :desc => "Environment to ssh into"
152
- def ssh
158
+ method_option :all, :type => :boolean, :aliases => %(-a),
159
+ :desc => "Run command on all servers"
160
+
161
+ def ssh(cmd=nil)
153
162
  env = fetch_environment(options[:environment])
154
163
 
155
- if env.app_master
156
- Kernel.exec "ssh", "#{env.username}@#{env.app_master.public_hostname}"
164
+ if options[:all]
165
+ raise NoCommandError.new unless cmd
166
+
167
+ hosts = env.instances.map do |instance|
168
+ instance.public_hostname
169
+ end
170
+
171
+ if hosts.empty?
172
+ raise NoInstancesError.new(env.name)
173
+ else
174
+ hosts.each do |host|
175
+ system "ssh #{env.username}@#{host} #{cmd}"
176
+ end
177
+ end
157
178
  else
158
- raise NoAppMaster.new(env.name)
179
+ if env.app_master
180
+ system "ssh #{env.username}@#{env.app_master.public_hostname} #{cmd}"
181
+ else
182
+ raise NoAppMasterError.new(env.name)
183
+ end
159
184
  end
160
185
  end
161
186
 
@@ -12,7 +12,7 @@ module EY
12
12
  def enable
13
13
  app = fetch_app(options[:app])
14
14
  environment = fetch_environment(options[:environment], app)
15
- loudly_check_eysd(environment)
15
+ loudly_check_eydeploy(environment)
16
16
  EY.ui.info "Taking down maintenance page for '#{app.name}' in '#{environment.name}'"
17
17
  environment.take_down_maintenance_page(app, options[:verbose])
18
18
  end
@@ -39,7 +39,7 @@ module EY
39
39
  def disable
40
40
  app = fetch_app(options[:app])
41
41
  environment = fetch_environment(options[:environment], app)
42
- loudly_check_eysd(environment)
42
+ loudly_check_eydeploy(environment)
43
43
  EY.ui.info "Putting up maintenance page for '#{app.name}' in '#{environment.name}'"
44
44
  environment.put_up_maintenance_page(app, options[:verbose])
45
45
  end
@@ -2,7 +2,7 @@ module EY
2
2
  module Collection
3
3
  class Apps < Abstract
4
4
  self.invalid_error = InvalidAppError
5
- self.ambiguous_error = AmbiguousAppName
5
+ self.ambiguous_error = AmbiguousAppNameError
6
6
  end
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module EY
2
2
  module Collection
3
3
  class Environments < Abstract
4
4
  self.invalid_error = NoEnvironmentError
5
- self.ambiguous_error = AmbiguousEnvironmentName
5
+ self.ambiguous_error = AmbiguousEnvironmentNameError
6
6
  end
7
7
  end
8
8
  end
@@ -7,6 +7,12 @@ module EY
7
7
  end
8
8
  end
9
9
 
10
+ class NoCommandError < EY::Error
11
+ def initialize
12
+ super "Must specify a command to run via ssh"
13
+ end
14
+ end
15
+
10
16
  class NoRemotesError < EY::Error
11
17
  def initialize(path)
12
18
  super "fatal: No git remotes found in #{path}"
@@ -29,19 +35,25 @@ module EY
29
35
  end
30
36
  end
31
37
 
32
- class AmbiguousAppName < EY::Error
38
+ class AmbiguousAppNameError < EY::Error
33
39
  def initialize(name, matches)
34
40
  super ambiguous("app", name, matches)
35
41
  end
36
42
  end
37
43
 
38
- class NoAppMaster < EY::Error
44
+ class NoAppMasterError < EY::Error
39
45
  def initialize(env_name)
40
46
  super "The environment '#{env_name}' does not have a master instance."
41
47
  end
42
48
  end
43
49
 
44
- class BadAppMasterStatus < EY::Error
50
+ class NoInstancesError < EY::Error
51
+ def initialize(env_name)
52
+ super "The environment '#{env_name}' does not have any instances."
53
+ end
54
+ end
55
+
56
+ class BadAppMasterStatusError < EY::Error
45
57
  def initialize(master_status)
46
58
  super "Application master's status is not \"running\" (green); it is \"#{master_status}\"."
47
59
  end
@@ -50,7 +62,7 @@ module EY
50
62
  class EnvironmentError < EY::Error
51
63
  end
52
64
 
53
- class AmbiguousEnvironmentName < EY::EnvironmentError
65
+ class AmbiguousEnvironmentNameError < EY::EnvironmentError
54
66
  def initialize(name, matches)
55
67
  super ambiguous("environment", name, matches)
56
68
  end
@@ -75,7 +87,7 @@ module EY
75
87
  end
76
88
  end
77
89
 
78
- class BranchMismatch < EY::Error
90
+ class BranchMismatchError < EY::Error
79
91
  def initialize(default_branch, branch)
80
92
  super %|Your deploy branch is set to "#{default_branch}".\n| +
81
93
  %|If you want to deploy branch "#{branch}", use --ignore-default_branch.|
@@ -24,15 +24,15 @@ module EY
24
24
  def app_master!
25
25
  master = app_master
26
26
  if master.nil?
27
- raise NoAppMaster.new(name)
27
+ raise NoAppMasterError.new(name)
28
28
  elsif !ignore_bad_master && master.status != "running"
29
- raise BadAppMasterStatus.new(master.status)
29
+ raise BadAppMasterStatusError.new(master.status)
30
30
  end
31
31
  master
32
32
  end
33
33
 
34
- def ensure_eysd_present(&blk)
35
- app_master!.ensure_eysd_present(&blk)
34
+ def ensure_eydeploy_present(&blk)
35
+ app_master!.ensure_eydeploy_present(&blk)
36
36
  end
37
37
 
38
38
  def deploy(app, ref, migration_command=nil, verbose=false)
@@ -101,7 +101,7 @@ module EY
101
101
 
102
102
  def resolve_branch(branch, allow_non_default_branch=false)
103
103
  if !allow_non_default_branch && branch && default_branch && (branch != default_branch)
104
- raise BranchMismatch.new(default_branch, branch)
104
+ raise BranchMismatchError.new(default_branch, branch)
105
105
  end
106
106
  branch || default_branch
107
107
  end
@@ -3,11 +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 = ENV["EY_DEPLOY_VERSION"] || "0.8.2"
6
+ EYDEPLOY_VERSION = ENV["EY_DEPLOY_VERSION"] || "0.9.1"
7
7
  EXIT_STATUS = Hash.new { |h,k| raise EY::Error, "ey-deploy version checker exited with unknown status code #{k}" }
8
8
  EXIT_STATUS.merge!({
9
9
  255 => :ssh_failed,
10
- 1 => :eysd_missing,
10
+ 1 => :eydeploy_missing,
11
11
  0 => :ok,
12
12
  })
13
13
 
@@ -30,7 +30,7 @@ module EY
30
30
  deploy_args << "--migrate" << migration_command
31
31
  end
32
32
 
33
- invoke_eysd_deploy(deploy_args, verbose)
33
+ invoke_ey_deploy(deploy_args, verbose)
34
34
  end
35
35
 
36
36
  def rollback(app, extra_configuration=nil, verbose=false)
@@ -43,16 +43,16 @@ module EY
43
43
  deploy_args << '--config' << extra_configuration.to_json
44
44
  end
45
45
 
46
- invoke_eysd_deploy(deploy_args, verbose)
46
+ invoke_ey_deploy(deploy_args, verbose)
47
47
  end
48
48
 
49
49
 
50
50
  def put_up_maintenance_page(app, verbose=false)
51
- invoke_eysd_deploy(['enable_maintenance_page', '--app', app.name], verbose)
51
+ invoke_ey_deploy(['enable_maintenance_page', '--app', app.name], verbose)
52
52
  end
53
53
 
54
54
  def take_down_maintenance_page(app, verbose=false)
55
- invoke_eysd_deploy(['disable_maintenance_page', '--app', app.name], verbose)
55
+ invoke_ey_deploy(['disable_maintenance_page', '--app', app.name], verbose)
56
56
  end
57
57
 
58
58
 
@@ -60,27 +60,27 @@ module EY
60
60
  !["db_master", "db_slave"].include?(role.to_s)
61
61
  end
62
62
 
63
- def ensure_eysd_present
64
- case ey_deploy_check
63
+ def ensure_eydeploy_present
64
+ case eydeploy_status = ey_deploy_check
65
65
  when :ssh_failed
66
66
  raise EnvironmentError, "SSH connection to #{hostname} failed"
67
- when :eysd_missing
67
+ when :eydeploy_missing
68
68
  yield :installing if block_given?
69
69
  install_ey_deploy
70
70
  when :ok
71
71
  # no action needed
72
72
  else
73
- raise EY::Error, "Internal error: Unexpected status from Instance#ey_deploy_check; got #{eysd_status.inspect}"
73
+ raise EY::Error, "Internal error: Unexpected status from Instance#ey_deploy_check; got #{eydeploy_status.inspect}"
74
74
  end
75
75
  end
76
76
 
77
77
  def ey_deploy_check
78
- escaped_eysd_version = EYSD_VERSION.gsub(/\./, '\.')
78
+ escaped_eydeploy_version = EYDEPLOY_VERSION.gsub(/\./, '\.')
79
79
 
80
80
  if ENV["NO_SSH"]
81
81
  :ok
82
82
  else
83
- ssh "#{gem_path} list ey-deploy | grep \"ey-deploy \" | egrep -q '#{escaped_eysd_version}[,)]'", false
83
+ ssh "#{gem_path} list ey-deploy | grep \"ey-deploy \" | egrep -q '#{escaped_eydeploy_version}[,)]'", false
84
84
  EXIT_STATUS[$?.exitstatus]
85
85
  end
86
86
  end
@@ -94,7 +94,7 @@ module EY
94
94
  #
95
95
  # rubygems help suggests that --remote will disable this
96
96
  # behavior, but it doesn't.
97
- "cd `mktemp -d` && #{gem_path} install ey-deploy --no-rdoc --no-ri -v #{EYSD_VERSION}"]))
97
+ "cd `mktemp -d` && #{gem_path} install ey-deploy --no-rdoc --no-ri -v #{EYDEPLOY_VERSION}"]))
98
98
  end
99
99
 
100
100
  private
@@ -112,8 +112,8 @@ module EY
112
112
  end
113
113
  end
114
114
 
115
- def invoke_eysd_deploy(deploy_args, verbose=false)
116
- start = [eysd_path, "_#{EYSD_VERSION}_", 'deploy']
115
+ def invoke_ey_deploy(deploy_args, verbose=false)
116
+ start = [eydeploy_path, "_#{EYDEPLOY_VERSION}_", 'deploy']
117
117
  instance_args = environment.instances.find_all do |inst|
118
118
  inst.has_app_code?
119
119
  end.inject(['--instances']) do |command, inst|
@@ -132,8 +132,8 @@ module EY
132
132
  ssh cmd
133
133
  end
134
134
 
135
- def eysd_path
136
- "/usr/local/ey_resin/ruby/bin/eysd"
135
+ def eydeploy_path
136
+ "/usr/local/ey_resin/ruby/bin/ey-deploy"
137
137
  end
138
138
 
139
139
  def gem_path
@@ -77,8 +77,8 @@ module EY
77
77
  @repo ||= EY::Repo.new
78
78
  end
79
79
 
80
- def loudly_check_eysd(environment)
81
- environment.ensure_eysd_present do |action|
80
+ def loudly_check_eydeploy(environment)
81
+ environment.ensure_eydeploy_present do |action|
82
82
  case action
83
83
  when :installing
84
84
  EY.ui.warn "Instance does not have server-side component installed"
@@ -1,3 +1,3 @@
1
1
  module EY
2
- VERSION = '0.9.0'
2
+ VERSION = '0.10.0'
3
3
  end
@@ -13,7 +13,7 @@ describe EY::CLI do
13
13
 
14
14
  it "provides error classes" do
15
15
  EY::EnvironmentError.should be
16
- EY::BranchMismatch.should be
16
+ EY::BranchMismatchError.should be
17
17
  EY::DeployArgumentError.should be
18
18
  end
19
19
 
@@ -112,7 +112,7 @@ describe "EY::Model::Environment#app_master!" do
112
112
  env = make_env_with_master("status" => "error")
113
113
  lambda {
114
114
  env.app_master!
115
- }.should raise_error(EY::BadAppMasterStatus)
115
+ }.should raise_error(EY::BadAppMasterStatusError)
116
116
  end
117
117
 
118
118
  it "returns the app master if told to ignore the app master being in a non-running state" do
@@ -126,7 +126,7 @@ describe "EY::Model::Environment#app_master!" do
126
126
  env = make_env_with_master(nil)
127
127
  lambda {
128
128
  env.app_master!
129
- }.should raise_error(EY::NoAppMaster)
129
+ }.should raise_error(EY::NoAppMasterError)
130
130
  end
131
131
  end
132
132
 
@@ -37,13 +37,13 @@ describe "ey deploy" do
37
37
 
38
38
  def verify_ran(scenario)
39
39
  @out.should match(/Beginning deploy for.*#{scenario[:application]}.*#{scenario[:environment]}/)
40
- @ssh_commands.should have_command_like(/eysd.*deploy.*--app #{scenario[:application]}/)
40
+ @ssh_commands.should have_command_like(/ey-deploy.*deploy.*--app #{scenario[:application]}/)
41
41
  end
42
42
 
43
43
  # common behavior
44
44
  it_should_behave_like "it takes an environment name"
45
45
  it_should_behave_like "it takes an app name"
46
- it_should_behave_like "it invokes eysd"
46
+ it_should_behave_like "it invokes ey-deploy"
47
47
  end
48
48
 
49
49
  describe "ey deploy" do
@@ -81,20 +81,20 @@ describe "ey deploy" do
81
81
  api_scenario "one app, one environment"
82
82
  end
83
83
 
84
- it "finds eysd despite its being buried in the filesystem" do
84
+ it "finds ey-deploy despite its being buried in the filesystem" do
85
85
  ey "deploy"
86
- @ssh_commands.last.should =~ %r{/usr/local/ey_resin/ruby/bin/eysd}
86
+ @ssh_commands.last.should =~ %r{/usr/local/ey_resin/ruby/bin/ey-deploy}
87
87
  end
88
88
 
89
89
  it "defaults to 'rake db:migrate'" do
90
90
  ey "deploy"
91
- @ssh_commands.last.should =~ /eysd.*deploy/
91
+ @ssh_commands.last.should =~ /ey-deploy.*deploy/
92
92
  @ssh_commands.last.should =~ /--migrate 'rake db:migrate'/
93
93
  end
94
94
 
95
95
  it "can be disabled with --no-migrate" do
96
96
  ey "deploy --no-migrate"
97
- @ssh_commands.last.should =~ /eysd.*deploy/
97
+ @ssh_commands.last.should =~ /ey-deploy.*deploy/
98
98
  @ssh_commands.last.should_not =~ /--migrate/
99
99
  end
100
100
  end
@@ -155,7 +155,7 @@ describe "ey deploy" do
155
155
  File.unlink("ey.yml")
156
156
  end
157
157
 
158
- it "gets passed along to eysd" do
158
+ it "gets passed along to ey-deploy" do
159
159
  ey "deploy"
160
160
  @ssh_commands.last.should =~ /--config '\{\"bert\":\"ernie\"\}'/
161
161
  end
@@ -232,14 +232,14 @@ describe "ey deploy" do
232
232
  before(:all) do
233
233
  api_scenario "one app, one environment", "user@git.host:path/to/repo.git"
234
234
  ey "deploy"
235
- @deploy_command = @ssh_commands.find {|c| c =~ /eysd.*deploy/ }
235
+ @deploy_command = @ssh_commands.find {|c| c =~ /ey-deploy.*deploy/ }
236
236
  end
237
237
 
238
- it "passes along the repository URL to eysd" do
238
+ it "passes along the repository URL to ey-deploy" do
239
239
  @deploy_command.should =~ /--repo user@git.host:path\/to\/repo.git/
240
240
  end
241
241
 
242
- it "passes along the web server stack to eysd" do
242
+ it "passes along the web server stack to ey-deploy" do
243
243
  @deploy_command.should =~ /--stack nginx_mongrel/
244
244
  end
245
245
  end
@@ -14,14 +14,14 @@ describe "ey rollback" do
14
14
  def verify_ran(scenario)
15
15
  @out.should match(/Rolling back.*#{scenario[:application]}.*#{scenario[:environment]}/)
16
16
  @err.should be_empty
17
- @ssh_commands.last.should match(/eysd.*deploy rollback.*--app #{scenario[:application]}/)
17
+ @ssh_commands.last.should match(/ey-deploy.*deploy rollback.*--app #{scenario[:application]}/)
18
18
  end
19
19
 
20
20
  it_should_behave_like "it takes an environment name"
21
21
  it_should_behave_like "it takes an app name"
22
- it_should_behave_like "it invokes eysd"
22
+ it_should_behave_like "it invokes ey-deploy"
23
23
 
24
- it "passes along the web server stack to eysd" do
24
+ it "passes along the web server stack to ey-deploy" do
25
25
  api_scenario "one app, one environment"
26
26
  ey "rollback"
27
27
  @ssh_commands.last.should =~ /--stack nginx_mongrel/
data/spec/ey/ssh_spec.rb CHANGED
@@ -2,8 +2,17 @@ require 'spec_helper'
2
2
 
3
3
  print_my_args_ssh = "#!/bin/sh\necho ssh $*"
4
4
 
5
- describe "ey ssh" do
5
+ shared_examples_for "running ey ssh" do
6
6
  given "integration"
7
+ include Spec::Helpers::SharedIntegrationTestUtils
8
+
9
+ def extra_ey_options
10
+ {:prepend_to_path => {'ssh' => "#!/bin/sh\necho ssh $*"}}
11
+ end
12
+ end
13
+
14
+ describe "ey ssh" do
15
+ it_should_behave_like "running ey ssh"
7
16
 
8
17
  before(:all) do
9
18
  api_scenario "one app, many environments"
@@ -16,12 +25,8 @@ describe "ey ssh" do
16
25
 
17
26
  end
18
27
 
19
- describe "ey ssh" do
20
- given "integration"
21
-
22
- def extra_ey_options
23
- {:prepend_to_path => {'ssh' => "#!/bin/sh\necho ssh $*"}}
24
- end
28
+ describe "ey ssh without a command" do
29
+ it_should_behave_like "running ey ssh"
25
30
 
26
31
  def command_to_run(opts)
27
32
  cmd = "ssh"
@@ -36,3 +41,74 @@ describe "ey ssh" do
36
41
 
37
42
  it_should_behave_like "it takes an environment name"
38
43
  end
44
+
45
+ describe "ey ssh with a command" do
46
+ it_should_behave_like "running ey ssh"
47
+
48
+ def command_to_run(opts)
49
+ cmd = "ssh ls"
50
+ cmd << " --environment #{opts[:env]}" if opts[:env]
51
+ cmd
52
+ end
53
+
54
+ def verify_ran(scenario)
55
+ ssh_target = scenario[:ssh_username] + '@' + scenario[:master_hostname]
56
+ @raw_ssh_commands.should == ["ssh #{ssh_target} ls"]
57
+ end
58
+
59
+ it_should_behave_like "it takes an environment name"
60
+ end
61
+
62
+
63
+ describe "ey ssh --all with a command" do
64
+ it_should_behave_like "running ey ssh"
65
+
66
+ def command_to_run(opts)
67
+ cmd = "ssh ls"
68
+ cmd << " --all"
69
+ cmd << " --environment #{opts[:env]}" if opts[:env]
70
+ cmd
71
+ end
72
+
73
+ it "runs the command on all servers" do
74
+ api_scenario "one app, one environment"
75
+ run_ey(:env => 'giblets', :verbose => true)
76
+ @raw_ssh_commands.count do |command|
77
+ command =~ /^ssh turkey@.+ ls$/
78
+ end.should == 4
79
+ end
80
+ end
81
+
82
+ describe "ey ssh --all without a command" do
83
+ it_should_behave_like "running ey ssh"
84
+
85
+ def command_to_run(opts)
86
+ cmd = "ssh"
87
+ cmd << " --all"
88
+ cmd << " --environment #{opts[:env]}" if opts[:env]
89
+ cmd
90
+ end
91
+
92
+ it "raises an error" do
93
+ api_scenario "one app, one environment"
94
+ run_ey({:env => 'giblets', :verbose => true}, :expect_failure => true)
95
+ @err.grep(/NoCommandError/)
96
+ end
97
+ end
98
+
99
+ describe "ey ssh --all without servers" do
100
+ it_should_behave_like "running ey ssh"
101
+
102
+ def command_to_run(opts)
103
+ cmd = "ssh ls"
104
+ cmd << " --all"
105
+ cmd << " --environment #{opts[:env]}" if opts[:env]
106
+ cmd
107
+ end
108
+
109
+ it "raises an error" do
110
+ api_scenario "one app, one environment, no instances"
111
+ run_ey({:env => 'giblets', :verbose => true}, :expect_failure => true)
112
+ @err.grep(/NoInstancesError/)
113
+ end
114
+ end
@@ -12,10 +12,10 @@ describe "ey web disable" do
12
12
  end
13
13
 
14
14
  def verify_ran(scenario)
15
- @ssh_commands.should have_command_like(/eysd.*deploy enable_maintenance_page.*--app #{scenario[:application]}/)
15
+ @ssh_commands.should have_command_like(/ey-deploy.*deploy enable_maintenance_page.*--app #{scenario[:application]}/)
16
16
  end
17
17
 
18
18
  it_should_behave_like "it takes an environment name"
19
19
  it_should_behave_like "it takes an app name"
20
- it_should_behave_like "it invokes eysd"
20
+ it_should_behave_like "it invokes ey-deploy"
21
21
  end
@@ -12,10 +12,10 @@ describe "ey web enable" do
12
12
  end
13
13
 
14
14
  def verify_ran(scenario)
15
- @ssh_commands.should have_command_like(/eysd.*deploy disable_maintenance_page.*--app #{scenario[:application]}/)
15
+ @ssh_commands.should have_command_like(/ey-deploy.*deploy disable_maintenance_page.*--app #{scenario[:application]}/)
16
16
  end
17
17
 
18
18
  it_should_behave_like "it takes an environment name"
19
19
  it_should_behave_like "it takes an app name"
20
- it_should_behave_like "it invokes eysd"
20
+ it_should_behave_like "it invokes ey-deploy"
21
21
  end
@@ -30,6 +30,8 @@ class FakeAwsm < Sinatra::Base
30
30
  Scenario::TwoApps
31
31
  when "one app, one environment"
32
32
  Scenario::LinkedApp
33
+ when "one app, one environment, no instances"
34
+ Scenario::LinkedAppNotRunning
33
35
  when "one app, one environment, app master red"
34
36
  Scenario::LinkedAppRedMaster
35
37
  when "one app, many environments"
@@ -239,6 +241,42 @@ private
239
241
  end
240
242
  end # LinkedApp
241
243
 
244
+ class LinkedAppNotRunning < Empty
245
+ def apps
246
+ [{"name" => "rails232app",
247
+ "environments" => [{"ssh_username" => "turkey",
248
+ "instances" => [],
249
+ "name" => "giblets",
250
+ "apps" => [{"name" => "rails232app",
251
+ "repository_uri" => git_remote}],
252
+ "instances_count" => 0,
253
+ "stack_name" => "nginx_mongrel",
254
+ "id" => 200,
255
+ "framework_env" => "production",
256
+ "app_master" => {}}],
257
+ "repository_uri" => git_remote}]
258
+ end
259
+
260
+ def environments
261
+ [{
262
+ "ssh_username" => "turkey",
263
+ "instances" => [],
264
+ "name" => "giblets",
265
+ "apps" => [{
266
+ "name" => "rails232app",
267
+ "repository_uri" => git_remote}],
268
+ "instances_count" => 0,
269
+ "stack_name" => "nginx_mongrel",
270
+ "id" => 200,
271
+ "framework_env" => "production",
272
+ "app_master" => {}}]
273
+ end
274
+
275
+ def logs(env_id)
276
+ []
277
+ end
278
+ end # LinkedAppNotRunning
279
+
242
280
  class LinkedAppRedMaster < LinkedApp
243
281
  def apps
244
282
  apps = super
@@ -110,7 +110,7 @@ shared_examples_for "it takes an app name" do
110
110
 
111
111
  end
112
112
 
113
- shared_examples_for "it invokes eysd" do
113
+ shared_examples_for "it invokes ey-deploy" do
114
114
  include Spec::Helpers::SharedIntegrationTestUtils
115
115
 
116
116
  context "with arguments" do
@@ -119,11 +119,11 @@ shared_examples_for "it invokes eysd" do
119
119
  run_ey({:env => 'giblets', :verbose => true})
120
120
  end
121
121
 
122
- it "passes --verbose to eysd" do
123
- @ssh_commands.should have_command_like(/eysd.*deploy.*--verbose/)
122
+ it "passes --verbose to ey-deploy" do
123
+ @ssh_commands.should have_command_like(/ey-deploy.*deploy.*--verbose/)
124
124
  end
125
125
 
126
- it "passes along instance information to eysd" do
126
+ it "passes along instance information to ey-deploy" do
127
127
  instance_args = [
128
128
  Regexp.quote("ec2-174-129-198-124.compute-1.amazonaws.com,app_master"),
129
129
  Regexp.quote("ec2-72-44-46-66.compute-1.amazonaws.com,app"),
@@ -151,7 +151,7 @@ shared_examples_for "it invokes eysd" do
151
151
  end
152
152
 
153
153
 
154
- context "eysd installation" do
154
+ context "ey-deploy installation" do
155
155
  before(:all) do
156
156
  api_scenario "one app, one environment"
157
157
  end
@@ -187,8 +187,8 @@ shared_examples_for "it invokes eysd" do
187
187
  it "does not try to install ey-deploy if it's already there" do
188
188
  run_ey({:env => 'giblets'}, {:prepend_to_path => {'ssh' => exiting_ssh(0)}})
189
189
  @ssh_commands.should_not have_command_like(/gem install ey-deploy/)
190
- ver = Regexp.quote(EY::Model::Instance::EYSD_VERSION)
191
- @ssh_commands.should have_command_like(/eysd _#{ver}_ deploy/)
190
+ ver = Regexp.quote(EY::Model::Instance::EYDEPLOY_VERSION)
191
+ @ssh_commands.should have_command_like(/ey-deploy _#{ver}_ deploy/)
192
192
  end
193
193
  end
194
194
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 9
7
+ - 10
8
8
  - 0
9
- version: 0.9.0
9
+ version: 0.10.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-07-07 00:00:00 -07:00
17
+ date: 2010-07-13 00:00:00 -07:00
18
18
  default_executable: ey
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -194,8 +194,8 @@ test_files:
194
194
  - spec/engineyard/api_spec.rb
195
195
  - spec/engineyard/cli/api_spec.rb
196
196
  - spec/engineyard/cli_spec.rb
197
- - spec/engineyard/collection/apps.rb
198
- - spec/engineyard/collection/environments.rb
197
+ - spec/engineyard/collection/apps_spec.rb
198
+ - spec/engineyard/collection/environments_spec.rb
199
199
  - spec/engineyard/config_spec.rb
200
200
  - spec/engineyard/model/api_struct_spec.rb
201
201
  - spec/engineyard/model/environment_spec.rb