engineyard 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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