On Monday 13 April 2015 07:50 PM, Daniel P. Berrange wrote:
On Mon, Apr 13, 2015 at 04:14:53PM +0200, Martin Kletzander wrote:
> Use the same pattern as there is for x86 machines.
>
> Signed-off-by: Martin Kletzander <mkletzan(a)redhat.com>
> ---
> docs/schemas/domaincommon.rng | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> index 03fd541..80b30df 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -384,7 +384,9 @@
> </optional>
> <optional>
> <attribute name="machine">
> - <value>sun4m</value>
> + <data type="string">
> + <param name="pattern">[a-zA-Z0-9_\.\-]+</param>
> + </data>
> </attribute>
> </optional>
> </group>
I think you could probably simplify this all much more. All these
architecture specific blocks of machine type names should just be
deleted and so this:
<define name="ostypehvm">
<element name="type">
<optional>
<choice>
<ref name="hvmx86"/>
<ref name="hvmmips"/>
<ref name="hvmsparc"/>
<ref name="hvmppc"/>
<ref name="hvmppc64"/>
<ref name="hvms390"/>
<ref name="hvmarm"/>
<ref name="hvmaarch64"/>
</choice>
</optional>
<value>hvm</value>
</element>
</define>
Would simplify to just
<define name="ostypehvm">
<element name="type">
<optional>
<attribute name="arch">
<choice>
<value>i686</value>
....others...
</choice>
</attribute>
</optional>
<optional>
<attribute name="machine">
<data type="string">
<param name="pattern">[a-zA-Z0-9_\.\-]+</param>
</data>
</attribute>
</optional>
</element>
</define>
Hi Martin, Daniel,
I have not been able to try this patch, it fails with this error :
error: internal error: Unable to parse RNG /test-libvirt/share/libvirt/schemas/domain.rng:
Reference osexe has no matching definition
Internal found no define for ref osexe
However, had some concerns purely by looking at this patch. This change is very
x86-centric, it does not respect other architectures.
I think the rationale for simplifying domaincommon.rng would have been to group all types
that obey this pattern string:
<param name="pattern">[a-zA-Z0-9_\.\-]+</param>
However, this regex does not conform to machine types for _all_ architectures.
As an example, see this :
<define name="hvms390">
<group>
<optional>
<attribute name="arch">
<choice>
<value>s390</value>
<value>s390x</value>
</choice>
</attribute>
</optional>
<optional>
<attribute name="machine">
<choice>
<value>s390</value>
<value>s390-virtio</value>
<value>s390-ccw</value>
<value>s390-ccw-virtio</value>
</choice>
</attribute>
</optional>
</group>
</define>
The s390 arch only allows four machine names : "s390", "s390-virtio",
"s390-ccw", "s390-ccw-virtio".
With the patch you suggest, even a string such as "abcdefg" will become a
legitimate machine type for s390x, which seems like an odd thing.
Likewise, ppc64[le] architecture allows only strings such as pseries, pseries-2.1,
pseries-2.2 ..
This patch will allow any random machine name, which seems somewhat odd to me.
Regards,
--
Prerna Saxena
Linux Technology Centre,
IBM Systems and Technology Lab,
Bangalore, India