On 09/01/2014 02:23 PM, Aline Manera wrote:
On 08/26/2014 11:23 AM, Rodrigo Trujillo wrote:
> This patch implements new functionality that allows user to create a
> template based on a givem virtual machine. Template will have same
> number of CPUS, amount of Memory, CDROM attached, disks, etc.
>
> Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)linux.vnet.ibm.com>
> ---
> src/kimchi/API.json | 6 ++++++
> src/kimchi/i18n.py | 1 +
> src/kimchi/model/templates.py | 34 ++++++++++++++++++++++++++++++++++
> 3 files changed, 41 insertions(+)
>
> diff --git a/src/kimchi/API.json b/src/kimchi/API.json
> index c3fc5e3..e1e0218 100644
> --- a/src/kimchi/API.json
> +++ b/src/kimchi/API.json
> @@ -385,6 +385,12 @@
> "minimum": 512,
> "error": "KCHTMPL0013E"
> },
> + "vm": {
> + "description": "Virtual Machine which template
> will be based in",
> + "type": "string",
> + "minimum": 1,
> + "error": "KCHTMPL0025E"
> + },
> "cdrom": {
> "description": "Path for cdrom",
> "type": "string",
> diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
> index 2eae7e8..8b9c713 100644
> --- a/src/kimchi/i18n.py
> +++ b/src/kimchi/i18n.py
> @@ -130,6 +130,7 @@ messages = {
> "KCHTMPL0022E": _("Disk size must be greater than 1GB."),
> "KCHTMPL0023E": _("Template base image must be a valid local
> image file"),
> "KCHTMPL0024E": _("Cannot identify base image %(path)s
format"),
> + "KCHTMPL0025E": _("Virtual machine name must be a string"),
>
> "KCHPOOL0001E": _("Storage pool %(name)s already exists"),
> "KCHPOOL0002E": _("Storage pool %(name)s does not exist"),
> diff --git a/src/kimchi/model/templates.py
> b/src/kimchi/model/templates.py
> index bf04304..15296b0 100644
> --- a/src/kimchi/model/templates.py
> +++ b/src/kimchi/model/templates.py
> @@ -36,6 +36,7 @@ class TemplatesModel(object):
> def __init__(self, **kargs):
> self.objstore = kargs['objstore']
> self.conn = kargs['conn']
> + self.kargs = kargs
>
> def create(self, params):
> name = params.get('name', '').strip()
> @@ -68,6 +69,12 @@ class TemplatesModel(object):
> except Exception:
> raise InvalidParameter("KCHTMPL0003E",
{'network':
> net_name,
> 'template': name})
> +
> + # Template based in a given VM
> + vm = params.get('vm')
> + if vm:
> + params.update(self._get_vm_params(vm))
> +
> # Creates the template class with necessary information
> # Checkings will be done while creating this class, so any
> exception
> # will be raised here
> @@ -83,6 +90,33 @@ class TemplatesModel(object):
>
> return name
>
> + def _get_vm_params(self, vm):
> + from kimchi.model.vms import VMModel
> + vm_info = VMModel(**self.kargs).lookup(vm)
> + ret = {}
> +
> + # Get CPUs, Memory, Graphics
> + ret['cpus'] = vm_info['cpus']
> + ret['memory'] = vm_info['memory']
> + ret['graphics'] = vm_info['graphics']
> +
> + # CDROM
> + from kimchi.model.vmstorages import VMStoragesModel,
> VMStorageModel
> + vmStorages = VMStoragesModel(**self.kargs)
> + disks = vmStorages.get_list(vm)
> + vmStorage = VMStorageModel(**self.kargs)
> + for disk in disks:
> + disk_info = vmStorage.lookup(vm, disk)
> + if disk_info['type'] == 'cdrom':
> + # get first cdrom found
> + ret['cdrom'] = disk_info['path']
> + break
The VM can have multiples cdrom drives.
True
In this code you always override the value as it just accepts one
cdrom drive.
What value am I overwriting ? Not sure if I got your point =)
What I am trying to do is get the first cdrom found, because Templates
can only have one cdrom configured.
> + # ToDo:
> + # Get Disks
> + # Get StoragePool
> + # Get Networks
> + return ret
> +
> def get_list(self):
> with self.objstore as session:
> return session.get_list('template')
_______________________________________________
Kimchi-devel mailing list
Kimchi-devel(a)ovirt.org
http://lists.ovirt.org/mailman/listinfo/kimchi-devel