engineyard 2.1.2 → 2.1.3
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.md +2 -0
- data/lib/engineyard/cli.rb +6 -0
- data/lib/engineyard/version.rb +2 -2
- data/spec/ey/ssh_spec.rb +30 -3
- metadata +4 -4
data/README.md
CHANGED
@@ -267,6 +267,8 @@ Options:
|
|
267
267
|
[--db-slaves] # Run command on the slave database servers
|
268
268
|
-e, [--environment=ENVIRONMENT] # Name of the environment to ssh into
|
269
269
|
-c, [--account=ACCOUNT] # Name of the account in which the environment can be found
|
270
|
+
-s, [--shell] # Use a particular shell instead of the default bash
|
271
|
+
[--no-shell] # Don't use a shell to run the command (default behavior of ssh)
|
270
272
|
|
271
273
|
#### ey launch
|
272
274
|
|
data/lib/engineyard/cli.rb
CHANGED
@@ -363,6 +363,8 @@ WARNING: Interrupting again may prevent Engine Yard Cloud from recording this
|
|
363
363
|
:desc => "Run command on the slave database servers"
|
364
364
|
method_option :utilities, :type => :array, :lazy_default => true,
|
365
365
|
:desc => "Run command on the utility servers with the given names. If no names are given, run on all utility servers."
|
366
|
+
method_option :shell, :type => :string, :default => 'bash', :aliases => %w(-s),
|
367
|
+
:desc => "Run command in a shell other than bash. Use --no-shell to run the command without a shell."
|
366
368
|
|
367
369
|
def ssh(cmd=nil)
|
368
370
|
environment = fetch_environment(options[:environment], options[:account])
|
@@ -370,6 +372,10 @@ WARNING: Interrupting again may prevent Engine Yard Cloud from recording this
|
|
370
372
|
|
371
373
|
raise NoCommandError.new if cmd.nil? and hosts.size != 1
|
372
374
|
|
375
|
+
if options[:shell] && cmd
|
376
|
+
cmd = Escape.shell_command([options[:shell],'-lc',cmd])
|
377
|
+
end
|
378
|
+
|
373
379
|
exits = hosts.map do |host|
|
374
380
|
system Escape.shell_command(['ssh', "#{environment.username}@#{host}", cmd].compact)
|
375
381
|
$?.exitstatus
|
data/lib/engineyard/version.rb
CHANGED
data/spec/ey/ssh_spec.rb
CHANGED
@@ -26,7 +26,9 @@ shared_examples_for "running ey ssh for select role" do
|
|
26
26
|
def command_to_run(opts)
|
27
27
|
cmd = ["ssh", opts[:ssh_command]].compact + (@ssh_flag || [])
|
28
28
|
cmd << "--environment" << opts[:environment] if opts[:environment]
|
29
|
-
cmd << "--
|
29
|
+
cmd << "--shell" << opts[:shell] if opts[:shell]
|
30
|
+
cmd << "--no-shell" if opts[:no_shell]
|
31
|
+
cmd << "--quiet" if opts[:quiet]
|
30
32
|
cmd
|
31
33
|
end
|
32
34
|
|
@@ -50,6 +52,25 @@ shared_examples_for "running ey ssh for select role" do
|
|
50
52
|
@out.should_not =~ /Loading application data/
|
51
53
|
end
|
52
54
|
|
55
|
+
it "runs in bash by default" do
|
56
|
+
login_scenario "one app, one environment"
|
57
|
+
ey command_to_run(:ssh_command => "ls", :environment => 'giblets')
|
58
|
+
@out.should =~ /ssh.*bash -lc ls/
|
59
|
+
end
|
60
|
+
|
61
|
+
it "excludes shell with --no-shell" do
|
62
|
+
login_scenario "one app, one environment"
|
63
|
+
ey command_to_run(:ssh_command => "ls", :environment => 'giblets', :no_shell => true)
|
64
|
+
@out.should_not =~ /bash/
|
65
|
+
@out.should =~ /ssh.*ls/
|
66
|
+
end
|
67
|
+
|
68
|
+
it "accepts an alternate shell" do
|
69
|
+
login_scenario "one app, one environment"
|
70
|
+
ey command_to_run(:ssh_command => "ls", :environment => 'giblets', :shell => 'zsh')
|
71
|
+
@out.should =~ /ssh.*zsh -lc ls/
|
72
|
+
end
|
73
|
+
|
53
74
|
it "raises an error when there are no matching hosts" do
|
54
75
|
login_scenario "one app, one environment, no instances"
|
55
76
|
ey command_to_run({:ssh_command => "ls", :environment => 'giblets', :verbose => true}), :expect_failure => true
|
@@ -108,12 +129,14 @@ describe "ey ssh with a command" do
|
|
108
129
|
cmd = %w[ssh ls]
|
109
130
|
cmd << "--environment" << opts[:environment] if opts[:environment]
|
110
131
|
cmd << "--account" << opts[:account] if opts[:account]
|
132
|
+
cmd << "--shell" << opts[:shell] if opts[:shell]
|
133
|
+
cmd << "--no-shell" if opts[:no_shell]
|
111
134
|
cmd
|
112
135
|
end
|
113
136
|
|
114
137
|
def verify_ran(scenario)
|
115
138
|
ssh_target = scenario[:ssh_username] + '@' + scenario[:master_hostname]
|
116
|
-
@raw_ssh_commands.should == ["ssh #{ssh_target} ls"]
|
139
|
+
@raw_ssh_commands.should == ["ssh #{ssh_target} 'bash -lc ls'"]
|
117
140
|
end
|
118
141
|
|
119
142
|
include_examples "it takes an environment name and an account name"
|
@@ -131,6 +154,8 @@ describe "ey ssh with a command that fails" do
|
|
131
154
|
cmd = %w[ssh ls]
|
132
155
|
cmd << "--environment" << opts[:environment] if opts[:environment]
|
133
156
|
cmd << "--account" << opts[:account] if opts[:account]
|
157
|
+
cmd << "--shell" << opts[:shell] if opts[:shell]
|
158
|
+
cmd << "--no-shell" if opts[:no_shell]
|
134
159
|
cmd
|
135
160
|
end
|
136
161
|
|
@@ -147,12 +172,14 @@ describe "ey ssh with a multi-part command" do
|
|
147
172
|
cmd = ['ssh', 'echo "echo"']
|
148
173
|
cmd << "--environment" << opts[:environment] if opts[:environment]
|
149
174
|
cmd << "--account" << opts[:account] if opts[:account]
|
175
|
+
cmd << "--shell" << opts[:shell] if opts[:shell]
|
176
|
+
cmd << "--no-shell" if opts[:no_shell]
|
150
177
|
cmd
|
151
178
|
end
|
152
179
|
|
153
180
|
def verify_ran(scenario)
|
154
181
|
ssh_target = scenario[:ssh_username] + '@' + scenario[:master_hostname]
|
155
|
-
@raw_ssh_commands.should == ["ssh #{ssh_target} 'echo \"echo\"'"]
|
182
|
+
@raw_ssh_commands.should == ["ssh #{ssh_target} 'bash -lc '\\''echo \"echo\"'\\'"]
|
156
183
|
end
|
157
184
|
|
158
185
|
include_examples "it takes an environment name and an account name"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: engineyard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
@@ -426,7 +426,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
426
426
|
version: '0'
|
427
427
|
segments:
|
428
428
|
- 0
|
429
|
-
hash:
|
429
|
+
hash: -4308353544926307178
|
430
430
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
431
431
|
none: false
|
432
432
|
requirements:
|
@@ -435,7 +435,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
435
435
|
version: '0'
|
436
436
|
segments:
|
437
437
|
- 0
|
438
|
-
hash:
|
438
|
+
hash: -4308353544926307178
|
439
439
|
requirements: []
|
440
440
|
rubyforge_project:
|
441
441
|
rubygems_version: 1.8.25
|