ovs-vsctl: Issue warning for likely erroneous "get" commands.
authorBen Pfaff <blp@nicira.com>
Mon, 9 May 2011 17:29:51 +0000 (10:29 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 10 May 2011 16:10:16 +0000 (09:10 -0700)
Suggested-by: Reid Price <reid@nicira.com>
Feature #5527.

utilities/ovs-vsctl.8.in
utilities/ovs-vsctl.c

index 0b3e164efec4b0a7572a49f220ab492ff9075cc1..fcfec024654661a70c024c5fd37a8e8dec1fe2b9 100644 (file)
@@ -596,6 +596,11 @@ For a map column, without \fB\-\-if\-exists\fR it is an error if
 If \fB@\fIname\fR is specified, then the UUID for \fIrecord\fR may be
 referred to by that name later in the same \fBovs\-vsctl\fR
 invocation in contexts where a UUID is expected.
+.IP
+Both \fB\-\-id\fR and the \fIcolumn\fR arguments are optional, but
+usually at least one or the other should be specified.  If both are
+omitted, then \fBget\fR has no effect except to verify that
+\fIrecord\fR exists in \fItable\fR.
 .
 .IP "\fBset \fItable record column\fR[\fB:\fIkey\fR]\fB=\fIvalue\fR..."
 Sets the value of each specified \fIcolumn\fR in the given
index 2c1ba6df229bfa76cc04fb2609ca8c88be2d8885..6c2fbece788fe222c7a70c6404b656af131fc858 100644 (file)
@@ -26,6 +26,7 @@
 #include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 
 #include "command-line.h"
 #include "compiler.h"
@@ -2547,10 +2548,20 @@ pre_parse_column_key_value(struct vsctl_context *ctx,
 static void
 pre_cmd_get(struct vsctl_context *ctx)
 {
+    const char *id = shash_find_data(&ctx->options, "--id");
     const char *table_name = ctx->argv[1];
     const struct vsctl_table_class *table;
     int i;
 
+    /* Using "get" without --id or a column name could possibly make sense.
+     * Maybe, for example, a ovs-vsctl run wants to assert that a row exists.
+     * But it is unlikely that an interactive user would want to do that, so
+     * issue a warning if we're running on a terminal. */
+    if (!id && ctx->argc <= 3 && isatty(STDOUT_FILENO)) {
+        VLOG_WARN("\"get\" command without row arguments or \"--id\" is "
+                  "possibly erroneous");
+    }
+
     table = pre_get_table(ctx, table_name);
     for (i = 3; i < ctx->argc; i++) {
         if (!strcasecmp(ctx->argv[i], "_uuid")