Story #3919
Updated by ttereshc over 6 years ago
If an erratum is released for a modular content, it will contain information about module the RPMs are relevant to.
Information about a module is added to a collection in a pkglist.
Each collection corresponds to one module or to non-modular content.
There can be multiple collections in one pkglist (this is just for information, no changes here, it's this way now).
The module element is *optional*. Absense of the module element means that the collection is for normal non-modular RPMs and should be proccesed as usual.
Example of the modular errata content can be found in updateinfo.xml in the fixtures repo:
https://repos.fedorapeople.org/pulp/pulp/fixtures/rpm-with-modules/
Here is the snippet of the new format:
<pre>
<pkglist>
<collection short="">
<name>coll_name1</name>
<module name="kangaroo" stream="0" version="20180730223407" context="deadbeef" arch="noarch"/>
<package arch="noarch" name="kangaroo" release="1" src="http://www.fedoraproject.org" version="0.3">
<filename>kangaroo-0.3-1.noarch.rpm</filename>
</package>
<package ... >
...
</package>
</collection>
<collection short="">
<name>coll_name2</name>
...
</collection>
</pkglist>
</pre>
For upload, JSON is usually used, so the format will be:
<pre>
{
"issued": "2015-03-05 05:42:53 UTC",
"pkglist": [{
"name": "coll_name1",
"module": {
"name": "duck",
"stream": "0",
"version": "20180730233102",
"context": "deadbeef",
"arch": "noarch"
},
"packages": [{
"arch": "noarch",
"filename": "duck-0.7-1.noarch.rpm",
"name": "duck",
"release": "1",
"sum": ["sha256", "ceb0f0bb58be244393cc565e8ee5ef0ad36884d8ba8eec74542ff47d299a34c1"],
"version": "0.7",
}, {
...
}],
},
{
"name": "coll_name2",
...
}],
...
}
</pre>
h2. Deliverables
* *Sync* should recognize module element in the erratum and save it on the model
* no changes to the model itself are needed (aka migration is not needed) due to changes in the nested structure, inside a pkglist.
* *Publish* should respect the module element and publish info about the module in the errata if this info is available
* see the fixture repo
* publish should continue filtering by rpms available in the repo
* if no rpms are found for/associated with an erratum but module information is specified, such erratum has to be published. It's possible that just module metadata changed and no rpms has been updated.
* make sure collection names are unique per erratum (Pulp takes care of that and regenerates collection names to make them unique)
* *Upload* should support the module element
* see the JSON format in the description above
* *Copy*
* simple copy is expected to just work
* copy with --recursive flag should respect the module info in the erratum
* a whole module should be copied in this case: *all* its RPMs, module itself, and relevant module_defaults(?)
* *Search* API
* probably no changes needed, it should just work
Out of scope: *Applicability* (it will be implemented as a separate story).