[ovs-dev] [PATCH 2/3] ovs-vsctl: Introduce new single-line output format.
reid at nicira.com
reid at nicira.com
Fri Oct 16 02:28:08 UTC 2009
Looks good.
> + return ["%s" % vlan]
> + print '\\n'.join([s.replace('\\', '\\\\') for s in
output])
If you think you might ever want the return values of functions in their
non-string form, you could save some worry and use
str(s).replace(..) instead of s.replace(..)
On Thu, 15 Oct 2009 15:38:50 -0700, Ben Pfaff <blp at nicira.com> wrote:
> This output format should make it possible for tools to unambiguously
parse
> output from multiple ovs-vsctl commands in a single run (to be introduced
> in an upcoming commit).
>
> CC: Ian Campbell <Ian.Campbell at citrix.com>
> ---
> tests/ovs-vsctl.at | 43
> +++++++++++++++++++++++++++++++++++++++++--
> utilities/ovs-vsctl.8.in | 5 +++++
> utilities/ovs-vsctl.in | 15 +++++++++++----
> 3 files changed, 57 insertions(+), 6 deletions(-)
>
> diff --git a/tests/ovs-vsctl.at b/tests/ovs-vsctl.at
> index 15e5b1e..834ecc6 100644
> --- a/tests/ovs-vsctl.at
> +++ b/tests/ovs-vsctl.at
> @@ -15,16 +15,31 @@ dnl specified PARENT and is on the given VLAN.
> m4_define([_CHECK_BRIDGE],
> [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
> ])
> +
> + # Check br-to-vlan, without --oneline.
> AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
> +])
> + # Check br-to-vlan, with --oneline.
> + # (This particular test is interesting with --oneline because it
> returns
> + # an integer instead of a string and that can cause type mismatches
> inside
> + # python if not done carefully.)
> + AT_CHECK([RUN_OVS_VSCTL([--oneline br-to-vlan $1])], [0], [$3
> ])])
> m4_define([CHECK_BRIDGES],
> - [dnl Check that the bridges appear on list-br.
> + [dnl Check that the bridges appear on list-br, without --oneline.
> AT_CHECK(
> [RUN_OVS_VSCTL([list-br])],
> [0],
> [m4_foreach([brinfo], [$@], [m4_car(brinfo)
> ])])
>
> + dnl Check that the bridges appear on list-br, with --oneline.
> + AT_CHECK(
> + [RUN_OVS_VSCTL([--oneline list-br])],
> + [0],
> + [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
> +])
> +
> dnl Check that each bridge exists according to br-exists and that
> dnl a bridge that should not exist does not.
> m4_foreach([brinfo], [$@],
> @@ -41,11 +56,19 @@ dnl list of ports, which must be in alphabetical
> order. Also checks
> dnl that "ovs-vsctl port-to-br" reports that each port is
> dnl in BRIDGE.
> m4_define([CHECK_PORTS],
> - [AT_CHECK(
> + [dnl Check ports without --oneline.
> + AT_CHECK(
> [RUN_OVS_VSCTL([list-ports $1])],
> [0],
> [m4_foreach([port], m4_cdr($@), [port
> ])])
> +
> + dnl Check ports with --oneline.
> + AT_CHECK(
> + [RUN_OVS_VSCTL([--oneline list-ports $1])],
> + [0],
> + [m4_join([\n], m4_shift($@))
> +])
> AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [], [ovs-vsctl: no
> port named $1
> ])
> m4_foreach(
> @@ -111,6 +134,22 @@ CHECK_PORTS([b])
> CHECK_IFACES([b])
> AT_CLEANUP
>
> +AT_SETUP([add-br a, add-port a a1, add-port a a2])
> +AT_KEYWORDS([ovs-vsctl])
> +AT_CHECK([RUN_OVS_VSCTL(
> + [add-br a],
> + [add-port a a1],
> + [add-port a a2])])
> +AT_CHECK([cat conf], [0],
> + [bridge.a.port=a
> +bridge.a.port=a1
> +bridge.a.port=a2
> +])
> +CHECK_BRIDGES([a, a, 0])
> +CHECK_PORTS([a], [a1], [a2])
> +CHECK_IFACES([a], [a1], [a2])
> +AT_CLEANUP
> +
> AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
> AT_KEYWORDS([ovs-vsctl])
> AT_CHECK([RUN_OVS_VSCTL(
> diff --git a/utilities/ovs-vsctl.8.in b/utilities/ovs-vsctl.8.in
> index b05a955..bc4cb11 100644
> --- a/utilities/ovs-vsctl.8.in
> +++ b/utilities/ovs-vsctl.8.in
> @@ -98,6 +98,11 @@ its configuration file.
> By default, \fBovs\-vsctl\fR logs its arguments and the details of any
> changes that it makes to the system log. This option disables this
> logging.
> +.IP "\fB\-\-oneline\fR"
> +Modifies the output format so that the output for a command is printed
> +on a single line. New-line characters that would otherwise separate
> +lines are printed as \fB\\n\fR, and any instances of \fB\\fR that
> +would otherwise appear in the output are doubled.
> .
> .SH COMMANDS
> The commands implemented by \fBovs\-vsctl\fR are described in the
> diff --git a/utilities/ovs-vsctl.in b/utilities/ovs-vsctl.in
> index 23d8ac0..012ce4e 100755
> --- a/utilities/ovs-vsctl.in
> +++ b/utilities/ovs-vsctl.in
> @@ -474,7 +474,7 @@ def cmd_iface_to_br(cfg, iface):
>
> def cmd_br_to_vlan(cfg, bridge):
> parent, vlan = find_bridge(cfg, bridge)
> - return vlan,
> + return ["%s" % vlan]
>
> def cmd_br_to_parent(cfg, bridge):
> parent, vlan = find_bridge(cfg, bridge)
> @@ -488,6 +488,7 @@ def main():
> "target=",
> "no-reload",
> "no-syslog",
> + "oneline",
> "help",
> "version"])
> except getopt.GetoptError, msg:
> @@ -495,6 +496,7 @@ def main():
> sys.exit(1)
>
> # Handle options.
> + oneline = False
> for opt, optarg in options:
> if opt == "-c" or opt == "--config":
> global VSWITCHD_CONF
> @@ -514,6 +516,8 @@ def main():
> elif opt == "--no-syslog":
> global SYSLOG
> SYSLOG = False
> + elif opt == "--oneline":
> + oneline = True
> else:
> raise RuntimeError("unhandled option %s" % opt)
>
> @@ -557,9 +561,12 @@ def main():
> else:
> cfg = cfg_read(VSWITCHD_CONF, is_mutator)
> output = function(cfg, *args)
> - if output:
> - for line in output:
> - print line
> + if output != None:
> + if oneline:
> + print '\\n'.join([s.replace('\\', '\\\\') for s in
> output])
> + else:
> + for line in output:
> + print line
> if is_mutator:
> cfg_save(cfg, VSWITCHD_CONF)
> sys.exit(0)
> --
> 1.6.3.3
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev_openvswitch.org
More information about the dev
mailing list