On Apr 18 01:14PM, Aline Manera wrote:
On 04/15/2016 03:54 PM, pvital(a)linux.vnet.ibm.com wrote:
>From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
>
>Add support to create guests without CD-ROM device information and setting the
>second boot order option as 'netboot'.
>
>This is part of solution to Issue #372.
>
>Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
>---
> vmtemplate.py | 25 ++++++++++++++-----------
> xmlutils/bootorder.py | 45 +++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 59 insertions(+), 11 deletions(-)
> create mode 100644 xmlutils/bootorder.py
>
>diff --git a/vmtemplate.py b/vmtemplate.py
>index a223beb..17f34e5 100644
>--- a/vmtemplate.py
>+++ b/vmtemplate.py
>@@ -33,6 +33,7 @@ from wok.plugins.kimchi import imageinfo
> from wok.plugins.kimchi import osinfo
> from wok.plugins.kimchi.isoinfo import IsoImage
> from wok.plugins.kimchi.utils import check_url_path, pool_name_from_uri
>+from wok.plugins.kimchi.xmlutils.bootorder import get_bootorder_xml
> from wok.plugins.kimchi.xmlutils.cpu import get_cpu_xml
> from wok.plugins.kimchi.xmlutils.disk import get_disk_xml
> from wok.plugins.kimchi.xmlutils.graphics import get_graphics_xml
>@@ -146,9 +147,6 @@ class VMTemplate(object):
> d_info = imageinfo.probe_img_info(d['base'])
> d['size'] = d_info['virtual-size']
>- if len(base_imgs) == 0:
>- raise MissingParameter("KCHTMPL0016E")
>-
Why did you remove the above block?
The method of this block is responsible to get the OS info from the given ISO
or image file while creating the VMTemplate instance. Since the idea is create
a netboot template, I removed the check and raise to always return distro and
version as unknow if no file is provided by user.
This is also a backend solution to the Issue #931 (while UI is not reflecting
the new API changes).
> return distro, version
>
> def _gen_name(self, distro, version):
>@@ -170,7 +168,7 @@ class VMTemplate(object):
>
> def _get_cdrom_xml(self, libvirt_stream_protocols):
> if 'cdrom' not in self.info:
>- return ''
>+ return None
>
> params = {}
> params['type'] = 'cdrom'
>@@ -350,12 +348,18 @@ class VMTemplate(object):
> libvirt_stream_protocols = kwargs.get('libvirt_stream_protocols',
[])
> cdrom_xml = self._get_cdrom_xml(libvirt_stream_protocols)
>
>- if not urlparse.urlparse(self.info.get('cdrom',
"")).scheme in \
>- libvirt_stream_protocols and \
>- params.get('iso_stream', False):
>- params['qemu-stream-cmdline'] = cdrom_xml
>+ # Add information of CD-ROM device only if template have info about it.
>+ # Also, set up correct boot order.
>+ if cdrom_xml is not None:
>+ if not urlparse.urlparse(self.info.get('cdrom',
"")).scheme in \
>+ libvirt_stream_protocols and \
>+ params.get('iso_stream', False):
>+ params['qemu-stream-cmdline'] = cdrom_xml
>+ else:
>+ params['cdroms'] = cdrom_xml
>+ params['boot_order'] = get_bootorder_xml()
> else:
>- params['cdroms'] = cdrom_xml
>+ params['boot_order'] = get_bootorder_xml(network=True)
> # Setting maximum number of slots to avoid errors when hotplug memory
> # Number of slots are the numbers of chunks of 1GB that fit inside
>@@ -409,8 +413,7 @@ class VMTemplate(object):
> %(cpu_info_xml)s
> <os>
> <type arch='%(arch)s'>hvm</type>
>- <boot dev='hd'/>
>- <boot dev='cdrom'/>
>+ %(boot_order)s
> </os>
> <features>
> <acpi/>
>diff --git a/xmlutils/bootorder.py b/xmlutils/bootorder.py
>new file mode 100644
>index 0000000..3f364f0
>--- /dev/null
>+++ b/xmlutils/bootorder.py
>@@ -0,0 +1,45 @@
>+#
>+# Project Kimchi
>+#
>+# Copyright IBM Corp, 2016
>+#
>+# This library is free software; you can redistribute it and/or
>+# modify it under the terms of the GNU Lesser General Public
>+# License as published by the Free Software Foundation; either
>+# version 2.1 of the License, or (at your option) any later version.
>+#
>+# This library is distributed in the hope that it will be useful,
>+# but WITHOUT ANY WARRANTY; without even the implied warranty of
>+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>+# Lesser General Public License for more details.
>+#
>+# You should have received a copy of the GNU Lesser General Public
>+# License along with this library; if not, write to the Free Software
>+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>+
>+import lxml.etree as ET
>+from lxml.builder import E
>+
>+
>+def get_bootorder_xml(network=False):
>+ """
>+ <boot dev='hd'/>
>+ <boot dev='cdrom'/>
>+
>+ - For netboot configuration:
>+
>+ <boot dev='hd'/>
>+ <boot dev='cdrom'/>
>+ <boot dev='network'/>
>+ """
>+ boot_order = ['hd', 'cdrom']
>+
>+ if network:
>+ boot_order.append('network')
>+
Why not always add 'network' option as default?
That's OK to do, since this will not impact with guest has a disk
or cdrom set up.
Will remove the new file and change vmtemplate.py
>+ boot_xml = ''
>+ for device in boot_order:
>+ boot = E.boot(dev=device)
>+ boot_xml += ET.tostring(boot, encoding='utf-8', pretty_print=True)
>+
>+ return boot_xml
--
Paulo Ricardo Paz Vital
Linux Technology Center, IBM Systems
http://www.ibm.com/linux/ltc/