[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