[Libguestfs] [PATCH] builder: add a mandatory 'arch' key in index files
Richard W.M. Jones
rjones at redhat.com
Mon Feb 24 15:15:11 UTC 2014
On Mon, Feb 24, 2014 at 11:36:29AM +0100, Pino Toscano wrote:
> Introduce a mandatory arch= key in all the entries of index files, to
> identify which architecture is each. Adapt the long and JSON list
> outputs to print also this new field.
>
> This introduces an incompatibility with index files created with
> virt-builder < 1.26, as they will be rejected until entries will have
> the arch= key added (which is ignored by older virt-builder, so adding
> it will not create backward-compatibility issues).
> ---
> builder/index_parser.ml | 9 +++++++++
> builder/index_parser.mli | 1 +
> builder/list_entries.ml | 4 ++++
> builder/test-index.in | 7 +++++++
> builder/test-virt-builder-list.sh | 14 ++++++++++++++
> 5 files changed, 35 insertions(+)
>
> diff --git a/builder/index_parser.ml b/builder/index_parser.ml
> index 2d4a642..de4d72e 100644
> --- a/builder/index_parser.ml
> +++ b/builder/index_parser.ml
> @@ -27,6 +27,7 @@ and entry = {
> printable_name : string option; (* the name= field *)
> osinfo : string option;
> file_uri : string;
> + arch : string;
> signature_uri : string option; (* deprecated, will be removed in 1.26 *)
> checksum_sha512 : string option;
> revision : int;
> @@ -43,6 +44,7 @@ and entry = {
>
> let print_entry chan (name, { printable_name = printable_name;
> file_uri = file_uri;
> + arch = arch;
> osinfo = osinfo;
> signature_uri = signature_uri;
> checksum_sha512 = checksum_sha512;
> @@ -65,6 +67,7 @@ let print_entry chan (name, { printable_name = printable_name;
> | Some id -> fp "osinfo=%s\n" id
> );
> fp "file=%s\n" file_uri;
> + fp "arch=%s\n" arch;
> (match signature_uri with
> | None -> ()
> | Some uri -> fp "sig=%s\n" uri
> @@ -179,6 +182,11 @@ let get_index ~prog ~debug ~downloader ~sigchecker source =
> with Not_found ->
> eprintf (f_"virt-builder: no 'file' (URI) entry for '%s'\n") n;
> corrupt_file () in
> + let arch =
> + try List.assoc ("arch", None) fields
> + with Not_found ->
> + eprintf (f_"virt-builder: no 'arch' entry for '%s'\n") n;
> + corrupt_file () in
> let signature_uri =
> try Some (make_absolute_uri (List.assoc ("sig", None) fields))
> with Not_found -> None in
> @@ -245,6 +253,7 @@ let get_index ~prog ~debug ~downloader ~sigchecker source =
> let entry = { printable_name = printable_name;
> osinfo = osinfo;
> file_uri = file_uri;
> + arch = arch;
> signature_uri = signature_uri;
> checksum_sha512 = checksum_sha512;
> revision = revision;
> diff --git a/builder/index_parser.mli b/builder/index_parser.mli
> index 3c679b3..0575dc4 100644
> --- a/builder/index_parser.mli
> +++ b/builder/index_parser.mli
> @@ -21,6 +21,7 @@ and entry = {
> printable_name : string option; (* the name= field *)
> osinfo : string option;
> file_uri : string;
> + arch : string;
> signature_uri : string option; (* deprecated, will be removed in 1.26 *)
> checksum_sha512 : string option;
> revision : int;
> diff --git a/builder/list_entries.ml b/builder/list_entries.ml
> index 27ea95e..edf7dfb 100644
> --- a/builder/list_entries.ml
> +++ b/builder/list_entries.ml
> @@ -73,6 +73,7 @@ and list_entries_long ~sources index =
>
> List.iter (
> fun (name, { Index_parser.printable_name = printable_name;
> + arch = arch;
> size = size;
> compressed_size = compressed_size;
> notes = notes;
> @@ -83,6 +84,7 @@ and list_entries_long ~sources index =
> | None -> ()
> | Some name -> printf "%-24s %s\n" (s_"Full name:") name;
> );
> + printf "%-24s %s\n" (s_"Architecture:") arch;
> printf "%-24s %s\n" (s_"Minimum/default size:") (human_size size);
> (match compressed_size with
> | None -> ()
> @@ -168,6 +170,7 @@ and list_entries_json ~sources index =
> printf " \"templates\": [\n";
> iteri (
> fun i (name, { Index_parser.printable_name = printable_name;
> + arch = arch;
> size = size;
> compressed_size = compressed_size;
> notes = notes;
> @@ -175,6 +178,7 @@ and list_entries_json ~sources index =
> printf " {\n";
> printf " \"os-version\": \"%s\",\n" name;
> json_optional_printf_string "full-name" printable_name;
> + printf " \"arch\": \"%s\",\n" arch;
> printf " \"size\": %Ld,\n" size;
> json_optional_printf_int64 "compressed-size" compressed_size;
> print_notes notes;
> diff --git a/builder/test-index.in b/builder/test-index.in
> index 1bca6b8..3efebc4 100644
> --- a/builder/test-index.in
> +++ b/builder/test-index.in
> @@ -1,5 +1,6 @@
> [phony-debian]
> name=Phony Debian
> +arch=x86_64
> file=debian.xz
> format=raw
> size=536870912
> @@ -9,6 +10,7 @@ notes=Phony Debian look-alike used for testing.
>
> [phony-fedora]
> name=Phony Fedora
> +arch=x86_64
> file=fedora.xz
> format=raw
> size=1073741824
> @@ -18,6 +20,7 @@ notes=Phony Fedora look-alike used for testing.
>
> [phony-fedora-qcow2]
> name=Phony Fedora qcow2
> +arch=x86_64
> file=fedora.qcow2.xz
> format=qcow2
> size=1073741824
> @@ -27,6 +30,7 @@ notes=Phony Fedora look-alike used for testing.
>
> [phony-fedora-qcow2-uncompressed]
> name=Phony Fedora qcow2 uncompressed
> +arch=x86_64
> file=fedora.qcow2
> format=qcow2
> size=1073741824
> @@ -36,6 +40,7 @@ notes=Phony Fedora look-alike used for testing.
>
> [phony-fedora-no-format]
> name=Phony Fedora
> +arch=x86_64
> file=fedora.qcow2.xz
> size=1073741824
> expand=/dev/sda2
> @@ -44,6 +49,7 @@ notes=Phony Fedora look-alike used for testing.
>
> [phony-ubuntu]
> name=Phony Ubuntu
> +arch=x86_64
> file=ubuntu.xz
> format=raw
> size=536870912
> @@ -52,6 +58,7 @@ notes=Phony Ubuntu look-alike used for testing.
>
> [phony-windows]
> name=Phony Windows
> +arch=x86_64
> file=windows.xz
> format=raw
> size=536870912
> diff --git a/builder/test-virt-builder-list.sh b/builder/test-virt-builder-list.sh
> index 634254d..7174152 100755
> --- a/builder/test-virt-builder-list.sh
> +++ b/builder/test-virt-builder-list.sh
> @@ -46,6 +46,7 @@ Fingerprint: F777 4FB1 AD07 4A7E 8C87 67EA 9173 8F73 E1B7 68A0
>
> os-version: phony-debian
> Full name: Phony Debian
> +Architecture: x86_64
> Minimum/default size: 512.0M
>
> Notes:
> @@ -54,6 +55,7 @@ Phony Debian look-alike used for testing.
>
> os-version: phony-fedora
> Full name: Phony Fedora
> +Architecture: x86_64
> Minimum/default size: 1.0G
>
> Notes:
> @@ -62,6 +64,7 @@ Phony Fedora look-alike used for testing.
>
> os-version: phony-fedora-qcow2
> Full name: Phony Fedora qcow2
> +Architecture: x86_64
> Minimum/default size: 1.0G
>
> Notes:
> @@ -70,6 +73,7 @@ Phony Fedora look-alike used for testing.
>
> os-version: phony-fedora-qcow2-uncompressed
> Full name: Phony Fedora qcow2 uncompressed
> +Architecture: x86_64
> Minimum/default size: 1.0G
>
> Notes:
> @@ -78,6 +82,7 @@ Phony Fedora look-alike used for testing.
>
> os-version: phony-fedora-no-format
> Full name: Phony Fedora
> +Architecture: x86_64
> Minimum/default size: 1.0G
>
> Notes:
> @@ -86,6 +91,7 @@ Phony Fedora look-alike used for testing.
>
> os-version: phony-ubuntu
> Full name: Phony Ubuntu
> +Architecture: x86_64
> Minimum/default size: 512.0M
>
> Notes:
> @@ -94,6 +100,7 @@ Phony Ubuntu look-alike used for testing.
>
> os-version: phony-windows
> Full name: Phony Windows
> +Architecture: x86_64
> Minimum/default size: 512.0M
>
> Notes:
> @@ -118,6 +125,7 @@ if [ "$json_list" != "{
> {
> \"os-version\": \"phony-debian\",
> \"full-name\": \"Phony Debian\",
> + \"arch\": \"x86_64\",
> \"size\": 536870912,
> \"notes\": {
> \"C\": \"Phony Debian look-alike used for testing.\"
> @@ -127,6 +135,7 @@ if [ "$json_list" != "{
> {
> \"os-version\": \"phony-fedora\",
> \"full-name\": \"Phony Fedora\",
> + \"arch\": \"x86_64\",
> \"size\": 1073741824,
> \"notes\": {
> \"C\": \"Phony Fedora look-alike used for testing.\"
> @@ -136,6 +145,7 @@ if [ "$json_list" != "{
> {
> \"os-version\": \"phony-fedora-qcow2\",
> \"full-name\": \"Phony Fedora qcow2\",
> + \"arch\": \"x86_64\",
> \"size\": 1073741824,
> \"notes\": {
> \"C\": \"Phony Fedora look-alike used for testing.\"
> @@ -145,6 +155,7 @@ if [ "$json_list" != "{
> {
> \"os-version\": \"phony-fedora-qcow2-uncompressed\",
> \"full-name\": \"Phony Fedora qcow2 uncompressed\",
> + \"arch\": \"x86_64\",
> \"size\": 1073741824,
> \"notes\": {
> \"C\": \"Phony Fedora look-alike used for testing.\"
> @@ -154,6 +165,7 @@ if [ "$json_list" != "{
> {
> \"os-version\": \"phony-fedora-no-format\",
> \"full-name\": \"Phony Fedora\",
> + \"arch\": \"x86_64\",
> \"size\": 1073741824,
> \"notes\": {
> \"C\": \"Phony Fedora look-alike used for testing.\"
> @@ -163,6 +175,7 @@ if [ "$json_list" != "{
> {
> \"os-version\": \"phony-ubuntu\",
> \"full-name\": \"Phony Ubuntu\",
> + \"arch\": \"x86_64\",
> \"size\": 536870912,
> \"notes\": {
> \"C\": \"Phony Ubuntu look-alike used for testing.\"
> @@ -172,6 +185,7 @@ if [ "$json_list" != "{
> {
> \"os-version\": \"phony-windows\",
> \"full-name\": \"Phony Windows\",
> + \"arch\": \"x86_64\",
> \"size\": 536870912,
> \"notes\": {
> \"C\": \"Phony Windows look-alike used for testing.\"
> --
> 1.8.3.1
>
> _______________________________________________
> Libguestfs mailing list
> Libguestfs at redhat.com
> https://www.redhat.com/mailman/listinfo/libguestfs
ACK.
I'll sign the index once you've committed this.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/
More information about the Libguestfs
mailing list