engineyard 1.1.3 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +134 -3
- data/lib/engineyard/cli.rb +2 -2
- data/lib/engineyard/cli/web.rb +2 -2
- data/lib/engineyard/model/#app.rb# +23 -0
- data/lib/engineyard/model/environment.rb +2 -2
- data/lib/engineyard/model/instance.rb +21 -21
- data/lib/engineyard/thor.rb +2 -2
- data/lib/engineyard/version.rb +1 -1
- data/spec/ey/deploy_spec.rb +11 -11
- data/spec/ey/rollback_spec.rb +3 -3
- data/spec/ey/web/disable_spec.rb +2 -2
- data/spec/ey/web/enable_spec.rb +2 -2
- data/spec/support/shared_behavior.rb +13 -13
- metadata +27 -73
data/README.rdoc
CHANGED
@@ -1,7 +1,138 @@
|
|
1
1
|
= ey
|
2
2
|
|
3
|
-
Description goes here.
|
4
3
|
|
5
|
-
|
4
|
+
Command:
|
5
|
+
ey deploy
|
6
6
|
|
7
|
-
|
7
|
+
Options:
|
8
|
+
-r, --branch, --tag, [--ref=REF] # Git ref to deploy. May be a branch, a tag, or a SHA.
|
9
|
+
[--ignore-bad-master] # Force a deploy even if the master is in a bad state
|
10
|
+
-v, [--verbose] # Be verbose
|
11
|
+
-a, [--app=APP] # Name of the application to deploy
|
12
|
+
-m, [--migrate=MIGRATE] # Run migrations via [MIGRATE], defaults to 'rake db:migrate'; use --no-migrate to avoid running migrations
|
13
|
+
[--ignore-default-branch] # Force a deploy of the specified branch even if a default is set
|
14
|
+
-e, [--environment=ENVIRONMENT] # Environment in which to deploy this application
|
15
|
+
|
16
|
+
Description:
|
17
|
+
This command must be run with the current directory containing the app to be deployed. If ey.yml specifies a default branch then the ref parameter can be omitted. Furthermore,
|
18
|
+
if a default branch is specified but a different command is supplied the deploy will fail unless --ignore-default-branch is used.
|
19
|
+
|
20
|
+
Migrations are run by default with 'rake db:migrate'. A different command can be specified via --migrate "ruby do_migrations.rb". Migrations can also be skipped entirely by
|
21
|
+
using --no-migrate.
|
22
|
+
|
23
|
+
Command:
|
24
|
+
ey environments
|
25
|
+
|
26
|
+
Options:
|
27
|
+
-s, [--simple]
|
28
|
+
-a, [--all]
|
29
|
+
|
30
|
+
Description:
|
31
|
+
By default, environments for this app are displayed. The --all option will display all environments, including those for this app.
|
32
|
+
|
33
|
+
Command:
|
34
|
+
ey logs
|
35
|
+
|
36
|
+
Options:
|
37
|
+
-e, [--environment=ENVIRONMENT] # Environment with the interesting logs
|
38
|
+
|
39
|
+
Description:
|
40
|
+
Displays Engine Yard configuration logs for all servers in the environment. If recipes were uploaded to the environment & run, their logs will also be displayed beneath the
|
41
|
+
main configuration logs.
|
42
|
+
|
43
|
+
Command:
|
44
|
+
ey rebuild
|
45
|
+
|
46
|
+
Options:
|
47
|
+
-e, [--environment=ENVIRONMENT] # Environment to rebuild
|
48
|
+
|
49
|
+
Description:
|
50
|
+
Engine Yard's main configuration run occurs on all servers. Mainly used to fix failed configuration of new or existing servers, or to update servers to latest Engine Yard stack
|
51
|
+
(e.g. to apply an Engine Yard supplied security patch).
|
52
|
+
|
53
|
+
Note that uploaded recipes are also run after the main configuration run has successfully completed.
|
54
|
+
|
55
|
+
Command:
|
56
|
+
ey rollback
|
57
|
+
|
58
|
+
Options:
|
59
|
+
-v, [--verbose] # Be verbose
|
60
|
+
-a, [--app=APP] # Name of the application to roll back
|
61
|
+
-e, [--environment=ENVIRONMENT] # Environment in which to roll back the application
|
62
|
+
|
63
|
+
Description:
|
64
|
+
Uses code from previous deploy in the "/data/APP_NAME/releases" directory on remote server(s) to restart application servers.
|
65
|
+
|
66
|
+
Command:
|
67
|
+
ey recipes apply
|
68
|
+
|
69
|
+
Options:
|
70
|
+
-e, [--environment=ENVIRONMENT] # Environment in which to apply recipes
|
71
|
+
|
72
|
+
Description:
|
73
|
+
This is similar to 'ey rebuild' except Engine Yard's main configuration step is skipped.
|
74
|
+
|
75
|
+
Command:
|
76
|
+
ey recipes upload
|
77
|
+
|
78
|
+
Options:
|
79
|
+
-e, [--environment=ENVIRONMENT] # Environment that will receive the recipes
|
80
|
+
|
81
|
+
Description:
|
82
|
+
The current directory should contain a subdirectory named "cookbooks" to be uploaded.
|
83
|
+
|
84
|
+
Command:
|
85
|
+
ey recipes download
|
86
|
+
|
87
|
+
Options:
|
88
|
+
-e, [--environment=ENVIRONMENT] # Environment for which to download the recipes
|
89
|
+
|
90
|
+
Description:
|
91
|
+
The recipes will be unpacked into a directory called "cookbooks" in the current directory.
|
92
|
+
|
93
|
+
If the cookbooks directory already exists, an error will be raised.
|
94
|
+
|
95
|
+
Command:
|
96
|
+
ey web enable
|
97
|
+
|
98
|
+
Options:
|
99
|
+
-v, [--verbose] # Be verbose
|
100
|
+
-a, [--app=APP] # Name of the application whose maintenance page will be removed
|
101
|
+
-e, [--environment=ENVIRONMENT] # Environment on which to take down the maintenance page
|
102
|
+
|
103
|
+
Remove the maintenance page for this application in the given environment.
|
104
|
+
|
105
|
+
Command:
|
106
|
+
ey web disable
|
107
|
+
|
108
|
+
Options:
|
109
|
+
-v, [--verbose] # Be verbose
|
110
|
+
-a, [--app=APP] # Name of the application whose maintenance page will be put up
|
111
|
+
-e, [--environment=ENVIRONMENT] # Environment on which to put up the maintenance page
|
112
|
+
|
113
|
+
Description:
|
114
|
+
The maintenance page is taken from the app currently being deployed. This means that you can customize maintenance pages to tell users the reason for downtime on every
|
115
|
+
particular deploy.
|
116
|
+
|
117
|
+
Maintenance pages searched for in order of decreasing priority: * public/maintenance.html.custom * public/maintenance.html.tmp * public/maintenance.html *
|
118
|
+
public/system/maintenance.html.default
|
119
|
+
|
120
|
+
Command:
|
121
|
+
ey ssh
|
122
|
+
|
123
|
+
Options:
|
124
|
+
[--utilities=one two three] # Run command on the utility servers with the given names. If no names are given, run on all utility servers.
|
125
|
+
[--app-servers] # Run command on all application servers
|
126
|
+
[--db-servers] # Run command on the database servers
|
127
|
+
[--db-master] # Run command on the master database server
|
128
|
+
-a, [--all] # Run command on all servers
|
129
|
+
[--db-slaves] # Run command on the slave database servers
|
130
|
+
-e, [--environment=ENVIRONMENT] # Environment to ssh into
|
131
|
+
|
132
|
+
Description:
|
133
|
+
If a command is supplied, it will be run, otherwise a session will be opened. The application master is used for environments with clusters. Option --all requires a command to
|
134
|
+
be supplied and runs it on all servers.
|
135
|
+
|
136
|
+
Note: this command is a bit picky about its ordering. To run a command with arguments on all servers, like "rm -f /some/file", you need to order it like so:
|
137
|
+
|
138
|
+
$ ey ssh "rm -f /some/file" -e my-environment --all
|
data/lib/engineyard/cli.rb
CHANGED
@@ -61,7 +61,7 @@ module EY
|
|
61
61
|
|
62
62
|
EY.ui.info "Connecting to the server..."
|
63
63
|
|
64
|
-
|
64
|
+
loudly_check_engineyard_serverside(environment)
|
65
65
|
|
66
66
|
EY.ui.info "Beginning deploy for '#{app.name}' in '#{environment.name}' on server..."
|
67
67
|
|
@@ -143,7 +143,7 @@ module EY
|
|
143
143
|
app = fetch_app(options[:app])
|
144
144
|
env = fetch_environment(options[:environment], app)
|
145
145
|
|
146
|
-
|
146
|
+
loudly_check_engineyard_serverside(env)
|
147
147
|
|
148
148
|
EY.ui.info("Rolling back '#{app.name}' in '#{env.name}'")
|
149
149
|
if env.rollback(app, options[:verbose])
|
data/lib/engineyard/cli/web.rb
CHANGED
@@ -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
|
-
|
15
|
+
loudly_check_engineyard_serverside(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
|
-
|
42
|
+
loudly_check_engineyard_serverside(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
|
@@ -0,0 +1,23 @@
|
|
1
|
+
bmodule EY
|
2
|
+
module Model
|
3
|
+
class App < ApiStruct.new(:name, :repository_uri, :environments, :api)
|
4
|
+
|
5
|
+
def self.from_hash(hash)
|
6
|
+
super.tap do |app|
|
7
|
+
app.environments = Environment.from_array(app.environments, :api => app.api)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def sole_environment
|
12
|
+
if environments.size == 1
|
13
|
+
environments.first
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def sole_environment!
|
18
|
+
sole_environment or raise NoSingleEnvironmentError.new(self)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -31,8 +31,8 @@ module EY
|
|
31
31
|
master
|
32
32
|
end
|
33
33
|
|
34
|
-
def
|
35
|
-
app_master!.
|
34
|
+
def ensure_engineyard_serverside_present(&blk)
|
35
|
+
app_master!.ensure_engineyard_serverside_present(&blk)
|
36
36
|
end
|
37
37
|
|
38
38
|
def deploy(app, ref, deploy_options={})
|
@@ -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
|
-
|
7
|
-
EXIT_STATUS = Hash.new { |h,k| raise EY::Error, "
|
6
|
+
ENGINEYARD_SERVERSIDE_VERSION = ENV["ENGINEYARD_SERVERSIDE_VERSION"] || "1.2.0"
|
7
|
+
EXIT_STATUS = Hash.new { |h,k| raise EY::Error, "engineyard-serverside version checker exited with unknown status code #{k}" }
|
8
8
|
EXIT_STATUS.merge!({
|
9
9
|
255 => :ssh_failed,
|
10
|
-
1 => :
|
10
|
+
1 => :engineyard_serverside_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
|
-
|
33
|
+
invoke_engineyard_serverside(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
|
-
|
46
|
+
invoke_engineyard_serverside(deploy_args, verbose)
|
47
47
|
end
|
48
48
|
|
49
49
|
|
50
50
|
def put_up_maintenance_page(app, verbose=false)
|
51
|
-
|
51
|
+
invoke_engineyard_serverside(['enable_maintenance_page', '--app', app.name], verbose)
|
52
52
|
end
|
53
53
|
|
54
54
|
def take_down_maintenance_page(app, verbose=false)
|
55
|
-
|
55
|
+
invoke_engineyard_serverside(['disable_maintenance_page', '--app', app.name], verbose)
|
56
56
|
end
|
57
57
|
|
58
58
|
|
@@ -60,32 +60,32 @@ module EY
|
|
60
60
|
!["db_master", "db_slave"].include?(role.to_s)
|
61
61
|
end
|
62
62
|
|
63
|
-
def
|
64
|
-
case
|
63
|
+
def ensure_engineyard_serverside_present
|
64
|
+
case engineyard_serverside_status = engineyard_serverside_check
|
65
65
|
when :ssh_failed
|
66
66
|
raise EnvironmentError, "SSH connection to #{hostname} failed"
|
67
|
-
when :
|
67
|
+
when :engineyard_serverside_missing
|
68
68
|
yield :installing if block_given?
|
69
|
-
|
69
|
+
install_engineyard_serverside
|
70
70
|
when :ok
|
71
71
|
# no action needed
|
72
72
|
else
|
73
|
-
raise EY::Error, "Internal error: Unexpected status from Instance#
|
73
|
+
raise EY::Error, "Internal error: Unexpected status from Instance#engineyard_serverside_check; got #{engineyard_serverside_status.inspect}"
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
-
def
|
78
|
-
|
77
|
+
def engineyard_serverside_check
|
78
|
+
escaped_engineyard_serverside_version = ENGINEYARD_SERVERSIDE_VERSION.gsub(/\./, '\.')
|
79
79
|
|
80
80
|
if ENV["NO_SSH"]
|
81
81
|
:ok
|
82
82
|
else
|
83
|
-
ssh "#{gem_path} list
|
83
|
+
ssh "#{gem_path} list engineyard-serverside | grep \"engineyard-serverside\" | egrep -q '#{escaped_engineyard_serverside_version}[,)]'", false
|
84
84
|
EXIT_STATUS[$?.exitstatus]
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
|
-
def
|
88
|
+
def install_engineyard_serverside
|
89
89
|
ssh(Escape.shell_command([
|
90
90
|
'sudo', 'sh', '-c',
|
91
91
|
# rubygems looks at *.gem in its current directory for
|
@@ -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
|
97
|
+
"cd `mktemp -d` && #{gem_path} install engineyard-serverside --no-rdoc --no-ri -v #{ENGINEYARD_SERVERSIDE_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
|
116
|
-
start = [
|
115
|
+
def invoke_engineyard_serverside(deploy_args, verbose=false)
|
116
|
+
start = [engineyard_serverside_path, "_#{ENGINEYARD_SERVERSIDE_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
|
136
|
-
"/usr/local/ey_resin/ruby/bin/
|
135
|
+
def engineyard_serverside_path
|
136
|
+
"/usr/local/ey_resin/ruby/bin/engineyard-serverside"
|
137
137
|
end
|
138
138
|
|
139
139
|
def gem_path
|
data/lib/engineyard/thor.rb
CHANGED
@@ -11,8 +11,8 @@ module EY
|
|
11
11
|
@repo ||= EY::Repo.new
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
environment.
|
14
|
+
def loudly_check_engineyard_serverside(environment)
|
15
|
+
environment.ensure_engineyard_serverside_present do |action|
|
16
16
|
case action
|
17
17
|
when :installing
|
18
18
|
EY.ui.warn "Instance does not have server-side component installed"
|
data/lib/engineyard/version.rb
CHANGED
data/spec/ey/deploy_spec.rb
CHANGED
@@ -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(/
|
40
|
+
@ssh_commands.should have_command_like(/engineyard-serverside.*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
|
46
|
+
it_should_behave_like "it invokes engineyard-serverside"
|
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
|
84
|
+
it "finds engineyard-serverside despite its being buried in the filesystem" do
|
85
85
|
ey "deploy"
|
86
|
-
@ssh_commands.last.should =~ %r{/usr/local/ey_resin/ruby/bin/
|
86
|
+
@ssh_commands.last.should =~ %r{/usr/local/ey_resin/ruby/bin/engineyard-serverside}
|
87
87
|
end
|
88
88
|
|
89
89
|
it "defaults to 'rake db:migrate'" do
|
90
90
|
ey "deploy"
|
91
|
-
@ssh_commands.last.should =~ /
|
91
|
+
@ssh_commands.last.should =~ /engineyard-serverside.*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 =~ /
|
97
|
+
@ssh_commands.last.should =~ /engineyard-serverside.*deploy/
|
98
98
|
@ssh_commands.last.should_not =~ /--migrate/
|
99
99
|
end
|
100
100
|
|
@@ -121,7 +121,7 @@ describe "ey deploy" do
|
|
121
121
|
|
122
122
|
it "does not migrate by default" do
|
123
123
|
ey "deploy"
|
124
|
-
@ssh_commands.last.should =~ /
|
124
|
+
@ssh_commands.last.should =~ /engineyard-serverside.*deploy/
|
125
125
|
@ssh_commands.last.should_not =~ /--migrate/
|
126
126
|
end
|
127
127
|
|
@@ -221,7 +221,7 @@ describe "ey deploy" do
|
|
221
221
|
File.unlink("ey.yml")
|
222
222
|
end
|
223
223
|
|
224
|
-
it "gets passed along to
|
224
|
+
it "gets passed along to engineyard-serverside" do
|
225
225
|
ey "deploy"
|
226
226
|
@ssh_commands.last.should =~ /--config '\{\"bert\":\"ernie\"\}'/
|
227
227
|
end
|
@@ -298,14 +298,14 @@ describe "ey deploy" do
|
|
298
298
|
before(:all) do
|
299
299
|
api_scenario "one app, one environment", "user@git.host:path/to/repo.git"
|
300
300
|
ey "deploy"
|
301
|
-
@deploy_command = @ssh_commands.find {|c| c =~ /
|
301
|
+
@deploy_command = @ssh_commands.find {|c| c =~ /engineyard-serverside.*deploy/ }
|
302
302
|
end
|
303
303
|
|
304
|
-
it "passes along the repository URL to
|
304
|
+
it "passes along the repository URL to engineyard-serverside" do
|
305
305
|
@deploy_command.should =~ /--repo user@git.host:path\/to\/repo.git/
|
306
306
|
end
|
307
307
|
|
308
|
-
it "passes along the web server stack to
|
308
|
+
it "passes along the web server stack to engineyard-serverside" do
|
309
309
|
@deploy_command.should =~ /--stack nginx_mongrel/
|
310
310
|
end
|
311
311
|
end
|
data/spec/ey/rollback_spec.rb
CHANGED
@@ -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(/
|
17
|
+
@ssh_commands.last.should match(/engineyard-serverside.*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
|
22
|
+
it_should_behave_like "it invokes engineyard-serverside"
|
23
23
|
|
24
|
-
it "passes along the web server stack to
|
24
|
+
it "passes along the web server stack to engineyard-serverside" 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/web/disable_spec.rb
CHANGED
@@ -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(/
|
15
|
+
@ssh_commands.should have_command_like(/engineyard-serverside.*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
|
20
|
+
it_should_behave_like "it invokes engineyard-serverside"
|
21
21
|
end
|
data/spec/ey/web/enable_spec.rb
CHANGED
@@ -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(/
|
15
|
+
@ssh_commands.should have_command_like(/engineyard-serverside.*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
|
20
|
+
it_should_behave_like "it invokes engineyard-serverside"
|
21
21
|
end
|
@@ -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
|
113
|
+
shared_examples_for "it invokes engineyard-serverside" do
|
114
114
|
include Spec::Helpers::SharedIntegrationTestUtils
|
115
115
|
|
116
116
|
context "with arguments" do
|
@@ -119,11 +119,11 @@ shared_examples_for "it invokes ey-deploy" do
|
|
119
119
|
run_ey({:env => 'giblets', :verbose => true})
|
120
120
|
end
|
121
121
|
|
122
|
-
it "passes --verbose to
|
123
|
-
@ssh_commands.should have_command_like(/
|
122
|
+
it "passes --verbose to engineyard-serverside" do
|
123
|
+
@ssh_commands.should have_command_like(/engineyard-serverside.*deploy.*--verbose/)
|
124
124
|
end
|
125
125
|
|
126
|
-
it "passes along instance information to
|
126
|
+
it "passes along instance information to engineyard-serverside" do
|
127
127
|
instance_args = [
|
128
128
|
Regexp.quote("app_master_hostname.compute-1.amazonaws.com,app_master"),
|
129
129
|
Regexp.quote("app_hostname.compute-1.amazonaws.com,app"),
|
@@ -151,7 +151,7 @@ shared_examples_for "it invokes ey-deploy" do
|
|
151
151
|
end
|
152
152
|
|
153
153
|
|
154
|
-
context "
|
154
|
+
context "engineyard-serverside installation" do
|
155
155
|
before(:all) do
|
156
156
|
api_scenario "one app, one environment"
|
157
157
|
end
|
@@ -165,7 +165,7 @@ shared_examples_for "it invokes ey-deploy" do
|
|
165
165
|
end
|
166
166
|
|
167
167
|
def exiting_ssh(exit_code)
|
168
|
-
"#!/usr/bin/env ruby\n exit!(#{exit_code}) if ARGV.to_s =~ /gem list
|
168
|
+
"#!/usr/bin/env ruby\n exit!(#{exit_code}) if ARGV.to_s =~ /gem list engineyard-serverside/"
|
169
169
|
end
|
170
170
|
|
171
171
|
it "raises an error if SSH fails" do
|
@@ -174,21 +174,21 @@ shared_examples_for "it invokes ey-deploy" do
|
|
174
174
|
@err.should =~ /SSH connection to \S+ failed/
|
175
175
|
end
|
176
176
|
|
177
|
-
it "installs
|
177
|
+
it "installs engineyard-serverside if it's missing" do
|
178
178
|
run_ey({:env => 'giblets'}, {:prepend_to_path => {'ssh' => exiting_ssh(1)}})
|
179
179
|
|
180
180
|
gem_install_command = @ssh_commands.find do |command|
|
181
|
-
command =~ /gem install
|
181
|
+
command =~ /gem install engineyard-serverside/
|
182
182
|
end
|
183
183
|
gem_install_command.should_not be_nil
|
184
|
-
gem_install_command.should =~ %r{/usr/local/ey_resin/ruby/bin/gem install.*
|
184
|
+
gem_install_command.should =~ %r{/usr/local/ey_resin/ruby/bin/gem install.*engineyard-serverside}
|
185
185
|
end
|
186
186
|
|
187
|
-
it "does not try to install
|
187
|
+
it "does not try to install engineyard-serverside if it's already there" do
|
188
188
|
run_ey({:env => 'giblets'}, {:prepend_to_path => {'ssh' => exiting_ssh(0)}})
|
189
|
-
@ssh_commands.should_not have_command_like(/gem install
|
190
|
-
ver = Regexp.quote(EY::Model::Instance::
|
191
|
-
@ssh_commands.should have_command_like(/
|
189
|
+
@ssh_commands.should_not have_command_like(/gem install engineyard-serverside/)
|
190
|
+
ver = Regexp.quote(EY::Model::Instance::ENGINEYARD_SERVERSIDE_VERSION)
|
191
|
+
@ssh_commands.should have_command_like(/engineyard-serverside _#{ver}_ deploy/)
|
192
192
|
end
|
193
193
|
end
|
194
194
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: engineyard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 21
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 1.2.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- EY Cloud Team
|
@@ -15,101 +14,89 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-08-
|
17
|
+
date: 2010-08-16 00:00:00 -07:00
|
19
18
|
default_executable: ey
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
|
-
none: false
|
24
22
|
requirements:
|
25
|
-
- -
|
23
|
+
- - ">="
|
26
24
|
- !ruby/object:Gem::Version
|
27
|
-
hash: 39
|
28
25
|
segments:
|
29
26
|
- 0
|
30
|
-
|
31
|
-
- 0
|
32
|
-
version: 0.14.0
|
27
|
+
version: "0"
|
33
28
|
requirement: *id001
|
34
|
-
name: thor
|
35
29
|
prerelease: false
|
30
|
+
name: termios
|
36
31
|
type: :runtime
|
37
32
|
- !ruby/object:Gem::Dependency
|
38
33
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
34
|
requirements:
|
41
35
|
- - ~>
|
42
36
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 7
|
44
37
|
segments:
|
45
38
|
- 1
|
46
|
-
-
|
47
|
-
|
39
|
+
- 5
|
40
|
+
- 2
|
41
|
+
version: 1.5.2
|
48
42
|
requirement: *id002
|
49
|
-
name: rest-client
|
50
43
|
prerelease: false
|
44
|
+
name: highline
|
51
45
|
type: :runtime
|
52
46
|
- !ruby/object:Gem::Dependency
|
53
47
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
|
-
none: false
|
55
48
|
requirements:
|
56
49
|
- - ~>
|
57
50
|
- !ruby/object:Gem::Version
|
58
|
-
hash: 7
|
59
51
|
segments:
|
60
|
-
-
|
61
|
-
-
|
62
|
-
-
|
63
|
-
version:
|
52
|
+
- 0
|
53
|
+
- 14
|
54
|
+
- 0
|
55
|
+
version: 0.14.0
|
64
56
|
requirement: *id003
|
65
|
-
name: highline
|
66
57
|
prerelease: false
|
58
|
+
name: thor
|
67
59
|
type: :runtime
|
68
60
|
- !ruby/object:Gem::Dependency
|
69
61
|
version_requirements: &id004 !ruby/object:Gem::Requirement
|
70
|
-
none: false
|
71
62
|
requirements:
|
72
|
-
- -
|
63
|
+
- - ~>
|
73
64
|
- !ruby/object:Gem::Version
|
74
|
-
hash: 3
|
75
65
|
segments:
|
76
66
|
- 0
|
77
|
-
|
67
|
+
- 0
|
68
|
+
- 4
|
69
|
+
version: 0.0.4
|
78
70
|
requirement: *id004
|
79
|
-
name: termios
|
80
71
|
prerelease: false
|
72
|
+
name: escape
|
81
73
|
type: :runtime
|
82
74
|
- !ruby/object:Gem::Dependency
|
83
75
|
version_requirements: &id005 !ruby/object:Gem::Requirement
|
84
|
-
none: false
|
85
76
|
requirements:
|
86
77
|
- - ~>
|
87
78
|
- !ruby/object:Gem::Version
|
88
|
-
hash: 7
|
89
79
|
segments:
|
90
80
|
- 1
|
91
81
|
- 4
|
92
82
|
- 0
|
93
83
|
version: 1.4.0
|
94
84
|
requirement: *id005
|
95
|
-
name: json
|
96
85
|
prerelease: false
|
86
|
+
name: json
|
97
87
|
type: :runtime
|
98
88
|
- !ruby/object:Gem::Dependency
|
99
89
|
version_requirements: &id006 !ruby/object:Gem::Requirement
|
100
|
-
none: false
|
101
90
|
requirements:
|
102
91
|
- - ~>
|
103
92
|
- !ruby/object:Gem::Version
|
104
|
-
hash: 23
|
105
93
|
segments:
|
106
|
-
-
|
107
|
-
- 0
|
94
|
+
- 1
|
108
95
|
- 4
|
109
|
-
version:
|
96
|
+
version: "1.4"
|
110
97
|
requirement: *id006
|
111
|
-
name: escape
|
112
98
|
prerelease: false
|
99
|
+
name: rest-client
|
113
100
|
type: :runtime
|
114
101
|
description: This gem allows you to deploy your rails application to the Engine Yard cloud directly from the command line.
|
115
102
|
email: cloud@engineyard.com
|
@@ -133,6 +120,7 @@ files:
|
|
133
120
|
- lib/engineyard/collection.rb
|
134
121
|
- lib/engineyard/config.rb
|
135
122
|
- lib/engineyard/error.rb
|
123
|
+
- lib/engineyard/model/#app.rb#
|
136
124
|
- lib/engineyard/model/api_struct.rb
|
137
125
|
- lib/engineyard/model/app.rb
|
138
126
|
- lib/engineyard/model/environment.rb
|
@@ -146,36 +134,6 @@ files:
|
|
146
134
|
- lib/engineyard.rb
|
147
135
|
- LICENSE
|
148
136
|
- README.rdoc
|
149
|
-
- spec/engineyard/api_spec.rb
|
150
|
-
- spec/engineyard/cli/api_spec.rb
|
151
|
-
- spec/engineyard/cli_spec.rb
|
152
|
-
- spec/engineyard/collection/apps_spec.rb
|
153
|
-
- spec/engineyard/collection/environments_spec.rb
|
154
|
-
- spec/engineyard/config_spec.rb
|
155
|
-
- spec/engineyard/model/api_struct_spec.rb
|
156
|
-
- spec/engineyard/model/environment_spec.rb
|
157
|
-
- spec/engineyard/model/instance_spec.rb
|
158
|
-
- spec/engineyard/repo_spec.rb
|
159
|
-
- spec/engineyard_spec.rb
|
160
|
-
- spec/ey/deploy_spec.rb
|
161
|
-
- spec/ey/ey_spec.rb
|
162
|
-
- spec/ey/list_environments_spec.rb
|
163
|
-
- spec/ey/logs_spec.rb
|
164
|
-
- spec/ey/rebuild_spec.rb
|
165
|
-
- spec/ey/recipes/apply_spec.rb
|
166
|
-
- spec/ey/recipes/download_spec.rb
|
167
|
-
- spec/ey/recipes/upload_spec.rb
|
168
|
-
- spec/ey/rollback_spec.rb
|
169
|
-
- spec/ey/ssh_spec.rb
|
170
|
-
- spec/ey/web/disable_spec.rb
|
171
|
-
- spec/ey/web/enable_spec.rb
|
172
|
-
- spec/spec_helper.rb
|
173
|
-
- spec/support/bundled_ey
|
174
|
-
- spec/support/fake_awsm.ru
|
175
|
-
- spec/support/git_repo.rb
|
176
|
-
- spec/support/helpers.rb
|
177
|
-
- spec/support/ruby_ext.rb
|
178
|
-
- spec/support/shared_behavior.rb
|
179
137
|
has_rdoc: true
|
180
138
|
homepage: http://engineyard.com
|
181
139
|
licenses: []
|
@@ -186,27 +144,23 @@ rdoc_options: []
|
|
186
144
|
require_paths:
|
187
145
|
- lib
|
188
146
|
required_ruby_version: !ruby/object:Gem::Requirement
|
189
|
-
none: false
|
190
147
|
requirements:
|
191
148
|
- - ">="
|
192
149
|
- !ruby/object:Gem::Version
|
193
|
-
hash: 3
|
194
150
|
segments:
|
195
151
|
- 0
|
196
152
|
version: "0"
|
197
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
|
-
none: false
|
199
154
|
requirements:
|
200
155
|
- - ">="
|
201
156
|
- !ruby/object:Gem::Version
|
202
|
-
hash: 3
|
203
157
|
segments:
|
204
158
|
- 0
|
205
159
|
version: "0"
|
206
160
|
requirements: []
|
207
161
|
|
208
162
|
rubyforge_project:
|
209
|
-
rubygems_version: 1.3.
|
163
|
+
rubygems_version: 1.3.6
|
210
164
|
signing_key:
|
211
165
|
specification_version: 3
|
212
166
|
summary: Command-line deployment for the Engine Yard cloud
|