[libvirt] [PATCH] virt-xml-validate: Allow input to be read from stdin
Martin Kletzander
mkletzan at redhat.com
Wed Jun 24 07:14:08 UTC 2015
On Wed, Jun 10, 2015 at 12:03:44PM +0200, Johannes Holmberg wrote:
>---
>
>Hello,
>
>I often find myself wanting to validate a domain xml without having
>to save it to a file, so I've updated virt-xml-validate to support
>the standard practice of reading from stdin when "-" is given as the
>input file.
>Of course, the validation is multipass so there still needs to be a
>temporary file but I think it makes sense to hide this complexity in
>virt-xml-validate and not force it onto the user.
>
> /Johannes
>
It looks like this could work, just a couple things...
>
> tools/virt-xml-validate.in | 53 +++++++++++++++++++++++++++++++++-------------
> 1 file changed, 38 insertions(+), 15 deletions(-)
>
>diff --git a/tools/virt-xml-validate.in b/tools/virt-xml-validate.in
>index a04fa06..8807f8d 100644
>--- a/tools/virt-xml-validate.in
>+++ b/tools/virt-xml-validate.in
>@@ -17,6 +17,16 @@
>
> set -e
>
>+TMPFILE=
>+
>+cleanup() {
>+ if [ $TMPFILE ]; then
>+ rm -f $TMPFILE
>+ fi
>+}
>+
>+trap cleanup EXIT
>+
> case $1 in
> -h | --h | --he | --hel | --help)
> cat <<EOF
>@@ -35,7 +45,7 @@ $0 (libvirt) @VERSION@
> EOF
> exit ;;
> --) shift ;;
>- -*)
>+ -?*)
> echo "$0: unrecognized option '$1'" >&2
> exit 1 ;;
> esac
>@@ -43,18 +53,27 @@ esac
> XMLFILE="$1"
> TYPE="$2"
>
>-if [ -z "$XMLFILE" ]; then
>- echo "syntax: $0 XMLFILE [TYPE]" >&2
>- exit 1
>-fi
>-
>-if [ ! -f "$XMLFILE" ]; then
>- echo "$0: document $XMLFILE does not exist" >&2
>- exit 2
>+if [ "$XMLFILE" = "-" ]; then
>+ TMPFILE=`mktemp --tmpdir virt-xml.XXXX`
>+ cat > $TMPFILE
Why don't you just set XMLFILE="$TMPFILE" ? That would get rid of lot
of the code changes below and would be more readable.
Other than that it looks good.
>+else
>+ if [ -z "$XMLFILE" ]; then
>+ echo "syntax: $0 XMLFILE [TYPE]" >&2
>+ exit 1
>+ fi
>+
>+ if [ ! -f "$XMLFILE" ]; then
>+ echo "$0: document $XMLFILE does not exist" >&2
>+ exit 2
>+ fi
> fi
>
> if [ -z "$TYPE" ]; then
>- ROOT=`xmllint --stream --debug "$XMLFILE" 2>/dev/null | grep "^0 1 " | awk '{ print $3 }'`
>+ if [ $TMPFILE ]; then
>+ ROOT=`cat "$TMPFILE" | xmllint --stream --debug - 2>/dev/null | grep "^0 1 " | awk '{ print $3 }'`
>+ else
>+ ROOT=`xmllint --stream --debug "$XMLFILE" 2>/dev/null | grep "^0 1 " | awk '{ print $3 }'`
>+ fi
> case "$ROOT" in
> *domainsnapshot*) # Must come first, since *domain* is a substring
> TYPE="domainsnapshot"
>@@ -99,8 +118,11 @@ if [ ! -f "$SCHEMA" ]; then
> exit 4
> fi
>
>-xmllint --noout --relaxng "$SCHEMA" "$XMLFILE"
>-
>+if [ $TMPFILE ]; then
>+ cat "$TMPFILE" | xmllint --noout --relaxng "$SCHEMA" -
>+else
>+ xmllint --noout --relaxng "$SCHEMA" "$XMLFILE"
>+fi
> exit
>
> : <<=cut
>@@ -119,9 +141,10 @@ exit
>
> Validates a libvirt XML for compliance with the published schema.
> The first compulsory argument is the path to the XML file to be
>-validated. The optional second argument is the name of the schema
>-to validate against. If omitted, the schema name will be inferred
>-from the name of the root element in the XML document.
>+validated (or - to read the XML from standard input). The optional
>+second argument is the name of the schema to validate against. If
>+omitted, the schema name will be inferred from the name of the root
>+element in the XML document.
>
> Valid schema names currently include
>
>--
>1.9.1
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150624/8c928387/attachment-0001.sig>
More information about the libvir-list
mailing list