[PATCH 0/6] Few outstanding XML schema interleaving fixes

Few patches I had in a different branch from my posting in october of 2022. Peter Krempa (6): schema: domain: Allow interleave of 'smartcard' subelements schema: domain: Allow interleaving of elements in 'osxen' definition schema: domain: Allow interleaving of 'inituser/initgroup' in 'osexe' definition schema: nodedev: Allow interleaving of sub-elements of 'device' schema: nodedev: Allow interneaving sub-elements of 'css' address type schema: storage: Allow interleaving of 'cipher' and 'ivgen' elements src/conf/schemas/domaincommon.rng | 140 ++++++++++++++++------------- src/conf/schemas/nodedev.rng | 103 ++++++++++----------- src/conf/schemas/storagecommon.rng | 14 +-- 3 files changed, 140 insertions(+), 117 deletions(-) -- 2.39.1

Allow interleave of the top level sub-elements as well as the subelements in the 'host-certificates' mode. Note that '<interleave>' doesn't work properly if there's multiple definitions of the same sub-element in the interleave so for this patch I chose to '<group>' the 'certificate' subelements. Another options would require us to stop enforcing that there's exactly 3 of them. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/conf/schemas/domaincommon.rng | 86 +++++++++++++++++-------------- 1 file changed, 47 insertions(+), 39 deletions(-) diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng index b4731f0d8d..f966285641 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -5559,49 +5559,57 @@ </interleave> </element> </define> + <define name="smartcard"> <element name="smartcard"> - <choice> - <group> - <attribute name="mode"> - <value>host</value> - </attribute> - <!-- might need to add optional database element here later --> - </group> - <group> - <attribute name="mode"> - <value>host-certificates</value> - </attribute> - <ref name="certificate"/> - <ref name="certificate"/> - <ref name="certificate"/> - <optional> - <element name="database"> - <ref name="absDirPath"/> - </element> - </optional> - </group> - <group> - <attribute name="mode"> - <value>passthrough</value> - </attribute> - <ref name="qemucdevSrcType"/> - <interleave> - <ref name="qemucdevSrcDef"/> - <optional> - <ref name="qemucdevTgtDef"/> - </optional> - </interleave> - </group> - </choice> - <optional> - <ref name="acpi"/> - </optional> - <optional> - <ref name="address"/> - </optional> + <interleave> + <choice> + <group> + <attribute name="mode"> + <value>host</value> + </attribute> + <!-- might need to add optional database element here later --> + </group> + <group> + <interleave> + <attribute name="mode"> + <value>host-certificates</value> + </attribute> + <group> + <ref name="certificate"/> + <ref name="certificate"/> + <ref name="certificate"/> + </group> + <optional> + <element name="database"> + <ref name="absDirPath"/> + </element> + </optional> + </interleave> + </group> + <group> + <attribute name="mode"> + <value>passthrough</value> + </attribute> + <ref name="qemucdevSrcType"/> + <interleave> + <ref name="qemucdevSrcDef"/> + <optional> + <ref name="qemucdevTgtDef"/> + </optional> + </interleave> + </group> + </choice> + <optional> + <ref name="acpi"/> + </optional> + <optional> + <ref name="address"/> + </optional> + </interleave> </element> </define> + <define name="certificate"> <element name="certificate"> <text/> -- 2.39.1

The 'osxen' RNG type defines options for the <os> element in certain modes. Allow interleaving of subelements recursively. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/conf/schemas/domaincommon.rng | 40 +++++++++++++++++++------------ 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng index f966285641..765306f094 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -257,30 +257,40 @@ <ref name="osexe"/> </choice> </define> + <define name="osxen"> <choice> <group> - <optional> - <ref name="bootloader"/> - </optional> - <element name="os"> - <ref name="ostypexen"/> - <ref name="osbootkernel"/> - </element> - </group> - <group> - <ref name="bootloader"/> - <optional> + <interleave> + <optional> + <ref name="bootloader"/> + </optional> <element name="os"> - <ref name="ostypexen"/> - <optional> + <interleave> + <ref name="ostypexen"/> <ref name="osbootkernel"/> - </optional> + </interleave> </element> - </optional> + </interleave> + </group> + <group> + <interleave> + <ref name="bootloader"/> + <optional> + <element name="os"> + <interleave> + <ref name="ostypexen"/> + <optional> + <ref name="osbootkernel"/> + </optional> + </interleave> + </element> + </optional> + </interleave> </group> </choice> </define> + <define name="oshvm"> <interleave> <optional> -- 2.39.1

Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/conf/schemas/domaincommon.rng | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng index 765306f094..a57dd212ab 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -487,12 +487,14 @@ </element> </optional> <optional> - <element name="inituser"> - <ref name="genericName"/> - </element> - <element name="initgroup"> - <ref name="genericName"/> - </element> + <interleave> + <element name="inituser"> + <ref name="genericName"/> + </element> + <element name="initgroup"> + <ref name="genericName"/> + </element> + </interleave> </optional> </interleave> </element> -- 2.39.1

Note that the schema doesn't allow us to represent the two branches of optional <devnode type='dev'> and zero or more <devnode type='link'> definitions, so I've merged them under the <zeroOrMore> case. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/conf/schemas/nodedev.rng | 63 +++++++++++++++++------------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/src/conf/schemas/nodedev.rng b/src/conf/schemas/nodedev.rng index 6299c52671..a9b32bb80f 100644 --- a/src/conf/schemas/nodedev.rng +++ b/src/conf/schemas/nodedev.rng @@ -9,41 +9,38 @@ <define name="device"> <element name="device"> - <!-- The name of the network, used to refer to it through the API - and in virsh --> - <element name="name"><text/></element> - <optional> - <element name="path"><text/></element> - </optional> - <optional> - <element name="devnode"> - <attribute name="type"> - <value>dev</value> - </attribute> - <text/> - </element> - </optional> - <zeroOrMore> - <element name="devnode"> - <attribute name="type"> - <value>link</value> - </attribute> - <text/> - </element> - </zeroOrMore> - <optional> - <ref name="parent"/> - </optional> + <interleave> + <!-- The name of the network, used to refer to it through the API + and in virsh --> + <element name="name"><text/></element> + <optional> + <element name="path"><text/></element> + </optional> + <zeroOrMore> + <element name="devnode"> + <attribute name="type"> + <choice> + <value>dev</value> + <value>link</value> + </choice> + </attribute> + <text/> + </element> + </zeroOrMore> + <optional> + <ref name="parent"/> + </optional> - <optional> - <element name="driver"> - <element name="name"><text/></element> - </element> - </optional> + <optional> + <element name="driver"> + <element name="name"><text/></element> + </element> + </optional> - <zeroOrMore> - <ref name="capability"/> - </zeroOrMore> + <zeroOrMore> + <ref name="capability"/> + </zeroOrMore> + </interleave> </element> </define> -- 2.39.1

Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/conf/schemas/nodedev.rng | 40 ++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/conf/schemas/nodedev.rng b/src/conf/schemas/nodedev.rng index a9b32bb80f..fba4021754 100644 --- a/src/conf/schemas/nodedev.rng +++ b/src/conf/schemas/nodedev.rng @@ -656,15 +656,17 @@ </define> <define name="capccwaddress"> - <element name="cssid"> - <ref name="ccwCssidRange"/> - </element> - <element name="ssid"> - <ref name="ccwSsidRange"/> - </element> - <element name="devno"> - <ref name="ccwDevnoRange"/> - </element> + <interleave> + <element name="cssid"> + <ref name="ccwCssidRange"/> + </element> + <element name="ssid"> + <ref name="ccwSsidRange"/> + </element> + <element name="devno"> + <ref name="ccwDevnoRange"/> + </element> + </interleave> </define> <define name="capccwdev"> @@ -678,15 +680,17 @@ <attribute name="type"> <value>css</value> </attribute> - <ref name="capccwaddress"/> - <optional> - <element name="channel_dev_addr"> - <ref name="capccwaddress"/> - </element> - </optional> - <optional> - <ref name="mdev_types"/> - </optional> + <interleave> + <ref name="capccwaddress"/> + <optional> + <element name="channel_dev_addr"> + <ref name="capccwaddress"/> + </element> + </optional> + <optional> + <ref name="mdev_types"/> + </optional> + </interleave> </define> <define name="capvdpa"> -- 2.39.1

In the commit summary: s/interneaving/interleaving/ Jano On a Wednesday in 2023, Peter Krempa wrote:
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/conf/schemas/nodedev.rng | 40 ++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 18 deletions(-)

Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/conf/schemas/storagecommon.rng | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/conf/schemas/storagecommon.rng b/src/conf/schemas/storagecommon.rng index 76714c9aad..4d6e646c9a 100644 --- a/src/conf/schemas/storagecommon.rng +++ b/src/conf/schemas/storagecommon.rng @@ -28,12 +28,14 @@ <interleave> <ref name="secret"/> <optional> - <element name="cipher"> - <ref name="keycipher"/> - </element> - <element name="ivgen"> - <ref name="keyivgen"/> - </element> + <interleave> + <element name="cipher"> + <ref name="keycipher"/> + </element> + <element name="ivgen"> + <ref name="keyivgen"/> + </element> + </interleave> </optional> </interleave> </optional> -- 2.39.1

On a Wednesday in 2023, Peter Krempa wrote:
Few patches I had in a different branch from my posting in october of
s/october/October/g
2022.
Peter Krempa (6): schema: domain: Allow interleave of 'smartcard' subelements schema: domain: Allow interleaving of elements in 'osxen' definition schema: domain: Allow interleaving of 'inituser/initgroup' in 'osexe' definition schema: nodedev: Allow interleaving of sub-elements of 'device' schema: nodedev: Allow interneaving sub-elements of 'css' address type schema: storage: Allow interleaving of 'cipher' and 'ivgen' elements
src/conf/schemas/domaincommon.rng | 140 ++++++++++++++++------------- src/conf/schemas/nodedev.rng | 103 ++++++++++----------- src/conf/schemas/storagecommon.rng | 14 +-- 3 files changed, 140 insertions(+), 117 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
participants (2)
-
Ján Tomko
-
Peter Krempa