This feature (or, more precisely, fixing this bug where knife does not follow UNIX conventions) is as useful as ‘knife ssh’ command itself is.
If knife ssh command is useful in its own right, it is just a “search in chef server” layer over plain command-line SSH. My expectation then is that it behaves like ssh command, especially with regard to being used in scripts. SSH does relay remote command’s exit status even though ssh connection itself has been successful and the command has been called correctly:
ssh ronja.3ofcoins.net false ; echo ?
As a consequence, this is behaviour I’d expect from any convenience layer over SSH.
Now if knife ssh is useless on its own and exists only for knife bootstrap and knife * server create (because using it as its own command is going into “SSH-as-a-framework” territory), then I’d also expect it to return failure when node bootstrap script failed on the remote site - non-zero exit status from bootstrap script is a failure.
Suggestion to contribute the patch is justified. I’m going to EOT here and start coding - this will be more productive.
On May 2, 2012, at 21:32 , Jamie Winsor wrote:
I don’t see how this is a useless feature. Without writing any additional code to scrub the output of Knife SSH or reading it yourself, how do you know if 1 out of the 400 nodes you just sent a command to failed?
Command line tools should return with a status code which communicates to the user if their intentions were successful or not, and if possible, why (this is why we don’t just have two exit codes - 0 or 1). As it is, Knife SSH fails silently when commanding multiple nodes.
A non zero exit code with an output of nodes that did not execute their commands successfully sounds like a very fair request and how I would expect Knife SSH to behave.
Hui Hu - it shouldn’t be a terribly difficult task to get this done. You should sign the CLA and do the work if you want this ticket expedited.
On Wednesday, May 2, 2012 at 2:51 AM, AJ Christensen wrote:
The feature sounds so incredibly useless you may have to contribute it
yourself. Even then I’d be dubious about it being accepted apart from
solely as a bug fix.
You do not need an SSH-as-a-framework system.
On 2 May 2012 20:17, Maciej Pasternacki firstname.lastname@example.org wrote:
BIG +1 on this.
I’m using knife ssh to execute maintenance commands in parallel. Diagnostic output is hard to miss when there are many machines. Knife should at the very least exit a non-zero status, and optimally print at the end of the session list of machines with non-zero exit status (and the respective statuses).
On May 2, 2012, at 7:53 , Hui Hu wrote:
I’ve been using Chef for several months.
Are Chef developers going to fix this ticket http://tickets.opscode.com/browse/CHEF-2627 (Knife SSH should return exit code based on whether or not ssh command is successful or not) ? I really want to know whether the command Chef::Bootstrap.run (which calls Chef::Ssh.run) is successful or not, so I can perform next step based on the result.
Thanks & Best Regards,