virsh: Report error when explicit connection fails

Commit 0c56d94318 forgot to return false in the cmdConnect command
after the clean up made there.

Before (assuming you don't have uri alias for 'asdf'):
  $ virsh connect asdf
  error: failed to connect to the hypervisor

  $ echo $?
  0

After (with the same assumption):
  $ virsh connect asdf
  error: failed to connect to the hypervisor
  error: no connection driver available for asdf

  $ echo $?
  1

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1356461

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
Martin Kletzander 2016-07-29 08:09:22 +02:00
parent a2b97a8d91
commit ff498a9ac7

View File

@ -210,7 +210,7 @@ virshConnect(vshControl *ctl, const char *uri, bool readonly)
* Reconnect after a disconnect from libvirtd
*
*/
static void
static int
virshReconnect(vshControl *ctl, const char *name, bool readonly, bool force)
{
bool connected = false;
@ -237,6 +237,7 @@ virshReconnect(vshControl *ctl, const char *name, bool readonly, bool force)
vshError(ctl, "%s", _("Failed to reconnect to the hypervisor"));
else
vshError(ctl, "%s", _("failed to connect to the hypervisor"));
return -1;
} else {
if (name) {
VIR_FREE(ctl->connname);
@ -253,6 +254,7 @@ virshReconnect(vshControl *ctl, const char *name, bool readonly, bool force)
priv->useGetInfo = false;
priv->useSnapshotOld = false;
priv->blockJobNoBytes = false;
return 0;
}
int virshStreamSink(virStreamPtr st ATTRIBUTE_UNUSED,
@ -301,7 +303,8 @@ cmdConnect(vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptStringReq(ctl, cmd, "name", &name) < 0)
return false;
virshReconnect(ctl, name, ro, true);
if (virshReconnect(ctl, name, ro, true) < 0)
return false;
return true;
}
@ -333,11 +336,13 @@ virshConnectionHandler(vshControl *ctl)
{
virshControlPtr priv = ctl->privData;
if (!priv->conn || disconnected)
virshReconnect(ctl, NULL, false, false);
if ((!priv->conn || disconnected) &&
virshReconnect(ctl, NULL, false, false) < 0)
return NULL;
if (virshConnectionUsability(ctl, priv->conn))
return priv->conn;
return NULL;
}
@ -444,14 +449,13 @@ virshInit(vshControl *ctl)
return false;
if (ctl->connname) {
virshReconnect(ctl, NULL, false, false);
/* Connecting to a named connection must succeed, but we delay
* connecting to the default connection until we need it
* (since the first command might be 'connect' which allows a
* non-default connection, or might be 'help' which needs no
* connection).
*/
if (!priv->conn) {
if (virshReconnect(ctl, NULL, false, false) < 0) {
vshReportError(ctl);
return false;
}