127 lines
5.5 KiB
Diff
127 lines
5.5 KiB
Diff
|
From e0e360766b8e3882f7a947ba00c82ae59f392d80 Mon Sep 17 00:00:00 2001
|
||
|
From: Adam Williamson <awilliam@redhat.com>
|
||
|
Date: Sun, 28 Feb 2016 12:48:42 -0800
|
||
|
Subject: [PATCH] add 'subvariant' property to images
|
||
|
|
||
|
This is to solve a problem we have with the Fedora composes.
|
||
|
There are 'Spins' and 'Labs' variants which produce several
|
||
|
live images and ARM appliances with differing content. With the
|
||
|
current metadata, there is no good way to tell the KDE live
|
||
|
image from the Xfce or LXDE live images; the only property
|
||
|
which indicates this is the 'path', but that has lots of other
|
||
|
information in it and is not trivially parseable (as image
|
||
|
names don't really strictly follow the naming policy you
|
||
|
cannot strictly tell what element of the image file name is
|
||
|
the 'subvariant').
|
||
|
|
||
|
Thus we add a 'subvariant' property which Pungi will populate as
|
||
|
appropriate. For many images the 'subvariant' will be the variant,
|
||
|
but for Spins and Labs it will indicate the actual content of
|
||
|
each image.
|
||
|
|
||
|
The image metadata version should probably change with this,
|
||
|
but I couldn't see the right way to do that (surely I don't
|
||
|
just universally bump it to 1, 1 in common.py?) Pungi will
|
||
|
also need a few corresponding changes, I will send a Pagure
|
||
|
PR for those.
|
||
|
---
|
||
|
doc/images-1.0.rst | 1 +
|
||
|
productmd/images.py | 7 +++++++
|
||
|
tests/test_images.py | 12 +++++++-----
|
||
|
3 files changed, 15 insertions(+), 5 deletions(-)
|
||
|
|
||
|
diff --git a/doc/images-1.0.rst b/doc/images-1.0.rst
|
||
|
index fa04ad3..6ac36b7 100644
|
||
|
--- a/doc/images-1.0.rst
|
||
|
+++ b/doc/images-1.0.rst
|
||
|
@@ -40,6 +40,7 @@ in order to read and diff images.json files easily.
|
||
|
"implant_md5": <str|null>, # md5 checksum implanted directly on media (see implantisomd5 and checkisomd5 commands)
|
||
|
"mtime": <int>, # mtime of the image stored as a decimal unix timestamp
|
||
|
"path": <str>, # relative path to the image
|
||
|
+ "subvariant": <str>, # image content (e.g. 'Workstation' or 'KDE')
|
||
|
"size": <int>, # file size of the image
|
||
|
"type": <str>, # see productmd.images.SUPPORTED_IMAGE_TYPES
|
||
|
"volume_id": <str|null> # volume ID; null if not available/applicable
|
||
|
diff --git a/productmd/images.py b/productmd/images.py
|
||
|
index ca8fbd4..df825bb 100644
|
||
|
--- a/productmd/images.py
|
||
|
+++ b/productmd/images.py
|
||
|
@@ -119,6 +119,7 @@ def __init__(self, parent):
|
||
|
self.checksums = {} #: (*str*) -- Release name, for example: "Fedora", "Red Hat Enterprise Linux"
|
||
|
self.implant_md5 = None #: (*str* or *None*) -- value of implanted md5
|
||
|
self.bootable = False #: (*bool=False*) --
|
||
|
+ self.subvariant = None #: (*str*) -- image contents, may be same as variant or e.g. 'KDE', 'LXDE'
|
||
|
|
||
|
def _validate_path(self):
|
||
|
self._assert_type("path", list(six.string_types))
|
||
|
@@ -166,6 +167,10 @@ def _validate_implant_md5(self):
|
||
|
def _validate_bootable(self):
|
||
|
self._assert_type("bootable", [bool])
|
||
|
|
||
|
+ def _validate_subvariant(self):
|
||
|
+ self._assert_type("subvariant", list(six.string_types))
|
||
|
+ self._assert_not_blank("subvariant")
|
||
|
+
|
||
|
def serialize(self, parser):
|
||
|
data = parser
|
||
|
self.validate()
|
||
|
@@ -182,6 +187,7 @@ def serialize(self, parser):
|
||
|
"checksums": self.checksums,
|
||
|
"implant_md5": self.implant_md5,
|
||
|
"bootable": self.bootable,
|
||
|
+ "subvariant": self.subvariant,
|
||
|
}
|
||
|
data.append(result)
|
||
|
|
||
|
@@ -198,6 +204,7 @@ def deserialize(self, data):
|
||
|
self.checksums = data["checksums"]
|
||
|
self.implant_md5 = data["implant_md5"]
|
||
|
self.bootable = bool(data["bootable"])
|
||
|
+ self.subvariant = data["subvariant"]
|
||
|
self.validate()
|
||
|
|
||
|
def add_checksum(self, root, checksum_type, checksum_value):
|
||
|
diff --git a/tests/test_images.py b/tests/test_images.py
|
||
|
index 614ab21..603297f 100755
|
||
|
--- a/tests/test_images.py
|
||
|
+++ b/tests/test_images.py
|
||
|
@@ -72,7 +72,7 @@ def test_fedora_20(self):
|
||
|
im.compose.respin = 0
|
||
|
|
||
|
i = Image(im)
|
||
|
- i.path = "Fedora/x86_64/iso/Fedora-20-x86_64-DVD.iso"
|
||
|
+ i.path = "Fedora/x86_64/iso/Fedora-Server-dvd-x86_64-20.iso"
|
||
|
i.mtime = 1410855216
|
||
|
i.size = 4603248640
|
||
|
i.arch = "x86_64"
|
||
|
@@ -80,7 +80,8 @@ def test_fedora_20(self):
|
||
|
i.format = "iso"
|
||
|
i.disc_number = 1
|
||
|
i.disc_count = 1
|
||
|
- i.volume_id = "Fedora 20 x86_64"
|
||
|
+ i.volume_id = "Fedora-S-dvd-x86_64-20"
|
||
|
+ i.subvariant = "Server"
|
||
|
|
||
|
# checksums
|
||
|
i.add_checksum(root=None, checksum_type="sha256", checksum_value="f2eeed5102b8890e9e6f4b9053717fe73031e699c4b76dc7028749ab66e7f917")
|
||
|
@@ -98,15 +99,16 @@ def test_fedora_20(self):
|
||
|
im.add("Fedora", "x86_64", i)
|
||
|
|
||
|
i = Image(im)
|
||
|
- i.path = "Fedora/x86_64/iso/Fedora-20-x86_64-netinst.iso"
|
||
|
+ i.path = "Fedora/x86_64/iso/Fedora-Server-boot-x86_64-20.iso"
|
||
|
i.mtime = 1410855243
|
||
|
i.size = 336592896
|
||
|
i.arch = "x86_64"
|
||
|
- i.type = "netinst"
|
||
|
+ i.type = "boot"
|
||
|
i.format = "iso"
|
||
|
i.disc_number = 1
|
||
|
i.disc_count = 1
|
||
|
- i.volume_id = "Fedora 20 x86_64"
|
||
|
+ i.volume_id = "Fedora-S-boot-x86_64-20"
|
||
|
+ i.subvariant = "Server"
|
||
|
|
||
|
# checksums
|
||
|
i.add_checksum(root=None, checksum_type="sha256", checksum_value="376be7d4855ad6281cb139430606a782fd6189dcb01d7b61448e915802cc350f")
|