engineyard 1.1.3 → 1.2.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.
- 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
|