Hello Sandro Bonazzola,

I'd like you to do a code review.  Please visit

    http://gerrit.ovirt.org/37560

to review the following change.

Change subject: vdsm: use vdscli instead of vdsClient
......................................................................

vdsm: use vdscli instead of vdsClient

Dropping vdsClient usage in favor of
vdscli API.

Using vdscli allows to achieve a better error handling
and to have more control on what's going on.

Bug-Url: https://bugzilla.redhat.com/1144334
Bug-Url: https://bugzilla.redhat.com/1101553
Bug-Url: https://bugzilla.redhat.com/1142098
Related-To: https://bugzilla.redhat.com/1005923
Related-To: https://bugzilla.redhat.com/1150427

Change-Id: I0f17abcc4ec83a69832bdb5a986136831504da2c
Signed-off-by: Simone Tiraboschi <stira...@redhat.com>
Signed-off-by: Sandro Bonazzola <sbona...@redhat.com>
---
M src/ovirt_hosted_engine_setup/constants.py
M src/ovirt_hosted_engine_setup/mixins.py
M src/ovirt_hosted_engine_setup/tasks.py
M src/plugins/ovirt-hosted-engine-setup/engine/add_disk.py
M src/plugins/ovirt-hosted-engine-setup/engine/add_host.py
M src/plugins/ovirt-hosted-engine-setup/engine/os_install.py
M src/plugins/ovirt-hosted-engine-setup/ha/ha_services.py
M src/plugins/ovirt-hosted-engine-setup/network/bridge.py
M src/plugins/ovirt-hosted-engine-setup/storage/storage.py
M src/plugins/ovirt-hosted-engine-setup/system/vdsmenv.py
M src/plugins/ovirt-hosted-engine-setup/vdsmd/cpu.py
M src/plugins/ovirt-hosted-engine-setup/vm/boot_disk.py
M src/plugins/ovirt-hosted-engine-setup/vm/configurevm.py
M src/plugins/ovirt-hosted-engine-setup/vm/image.py
M src/plugins/ovirt-hosted-engine-setup/vm/runvm.py
15 files changed, 261 insertions(+), 147 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-hosted-engine-setup 
refs/changes/60/37560/1

diff --git a/src/ovirt_hosted_engine_setup/constants.py 
b/src/ovirt_hosted_engine_setup/constants.py
index 1af24b6..9d1bbc1 100644
--- a/src/ovirt_hosted_engine_setup/constants.py
+++ b/src/ovirt_hosted_engine_setup/constants.py
@@ -1,6 +1,6 @@
 #
 # ovirt-hosted-engine-setup -- ovirt hosted engine setup
-# Copyright (C) 2013-2014 Red Hat, Inc.
+# Copyright (C) 2013-2015 Red Hat, Inc.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -116,10 +116,6 @@
         OVIRT_HOSTED_ENGINE_SETUP,
     )
 
-    VDS_CLIENT_DIR = os.path.join(
-        DATADIR,
-        'vdsm',
-    )
     ENGINE_VM_TEMPLATE = os.path.join(
         config.DATADIR,
         OVIRT_HOSTED_ENGINE_SETUP,
@@ -687,7 +683,6 @@
     VDSM_UID = 'OVEHOSTED_VDSM/vdsmUid'
     KVM_GID = 'OVEHOSTED_VDSM/kvmGid'
     VDS_CLI = 'OVEHOSTED_VDSM/vdscli'
-    VDS_CLIENT = 'OVEHOSTED_VDSM/vdsClient'
 
     @ohostedattrs(
         answerfile=True,
@@ -796,6 +791,7 @@
         'ohosted.network.firewallmanager.templates.available'
     VDSMD_CONF_LOADED = 'ohosted.vdsm.conf.loaded'
     HOST_ADDED = 'ohosted.engine.host.added'
+    VDSCLI_RECONNECTED = 'ohosted.engine.vdscli.reconnected'
     HA_START = 'ohosted.engine.ha.start'
     VDSM_LIBVIRT_CONFIGURED = 'ohosted.vdsm.libvirt.configured'
     NODE_FILES_PERSIST_S = 'ohosted.node.files.persist.start'
diff --git a/src/ovirt_hosted_engine_setup/mixins.py 
b/src/ovirt_hosted_engine_setup/mixins.py
index fdd4891..279f7aa 100644
--- a/src/ovirt_hosted_engine_setup/mixins.py
+++ b/src/ovirt_hosted_engine_setup/mixins.py
@@ -1,6 +1,6 @@
 #
 # ovirt-hosted-engine-setup -- ovirt hosted engine setup
-# Copyright (C) 2013 Red Hat, Inc.
+# Copyright (C) 2013-2015 Red Hat, Inc.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -36,18 +36,11 @@
     Hosted engine VM manipulation features for otopi Plugin objects
     """
 
+    POWER_MAX_TRIES = 10
+    POWER_DELAY = 1
     TICKET_MAX_TRIES = 10
     TICKET_DELAY = 1
     POWEROFF_CHECK_INTERVALL = 1
-
-    @property
-    def _vdscommand(self):
-        if not hasattr(self, '_vdscommand_val'):
-            self._vdscommand_val = [self.command.get('vdsClient')]
-            if self.environment[ohostedcons.VDSMEnv.USE_SSL]:
-                self._vdscommand_val.append('-s')
-            self._vdscommand_val.append('localhost')
-        return self._vdscommand_val
 
     def _generateTempVncPassword(self):
         self.logger.info(
@@ -61,18 +54,20 @@
     def _generateUserMessage(self, console_type):
         displayPort = 5900
         displaySecurePort = 5901
-        serv = self.environment[ohostedcons.VDSMEnv.VDS_CLIENT]
+        cli = self.environment[ohostedcons.VDSMEnv.VDS_CLI]
         try:
-            stats = serv.s.getVmStats(
+            stats = cli.getVmStats(
                 self.environment[ohostedcons.VMEnv.VM_UUID]
             )
             self.logger.debug(stats)
-            if not stats['status']['code'] == 0:
+            if stats['status']['code'] != 0:
                 self.logger.error(stats['status']['message'])
             else:
                 statsList = stats['statsList'][0]
-                displaySecurePort = statsList['displaySecurePort']
-                displayPort = statsList['displayPort']
+                displaySecurePort = statsList.get(
+                    'displaySecurePort', displaySecurePort
+                )
+                displayPort = statsList.get('displayPort', displayPort)
         except Exception:
             self.logger.debug(
                 'Error getting VM stats',
@@ -132,34 +127,170 @@
                 time.sleep(self.POWEROFF_CHECK_INTERVALL)
 
         self.logger.info(_('Creating VM'))
-        cmd = self._vdscommand + [
-            'create',
-            ohostedcons.FileLocations.ENGINE_VM_CONF,
-        ]
-        self.execute(
-            cmd,
-            raiseOnError=True
-        )
+        # TODO: check if we can move this to configurevm.py
+        # and get rid of the template.
+        conf = {
+            'vmId': self.environment[ohostedcons.VMEnv.VM_UUID],
+            'memSize': self.environment[ohostedcons.VMEnv.MEM_SIZE_MB],
+            'display': self.environment[ohostedcons.VMEnv.CONSOLE_TYPE],
+            'emulatedMachine': self.environment[
+                ohostedcons.VMEnv.EMULATED_MACHINE
+            ],
+            'cpuType': self.environment[
+                ohostedcons.VDSMEnv.VDSM_CPU
+            ].replace('model_', ''),
+            'spiceSecureChannels': (
+                'smain,sdisplay,sinputs,scursor,splayback,'
+                'srecord,ssmartcard,susbredir'
+            ),
+            'vmName': ohostedcons.Const.HOSTED_ENGINE_VM_NAME,
+            'smp': self.environment[ohostedcons.VMEnv.VCPUS],
+            'devices': [
+                {
+                    'device': 'scsi',
+                    'model': 'virtio-scsi',
+                    'type': 'controller'
+                },
+                {
+                    'device': 'console',
+                    'specParams': {},
+                    'type': 'console',
+                    'deviceId': self.environment[
+                        ohostedcons.VMEnv.CONSOLE_UUID
+                    ],
+                    'alias': 'console0'
+                },
+            ],
+        }
+        cdrom = {
+            'index': '2',
+            'iface': 'ide',
+            'address': {
+                'controller': '0',
+                'target': '0',
+                'unit': '0',
+                'bus': '1',
+                'type': 'drive'
+            },
+            'specParams': {},
+            'readonly': 'true',
+            'deviceId': self.environment[ohostedcons.VMEnv.CDROM_UUID],
+            'path': (
+                self.environment[ohostedcons.VMEnv.CDROM]
+                if self.environment[
+                    ohostedcons.VMEnv.CDROM
+                ] is not None
+                else ''
+            ),
+            'device': 'cdrom',
+            'shared': 'false',
+            'type': 'disk',
+        }
+        if self.environment[ohostedcons.VMEnv.BOOT] == 'cdrom':
+            cdrom['bootOrder'] = '1'
+        conf['devices'].append(cdrom)
+        disk = {
+            'index': '0',
+            'iface': 'virtio',
+            'format': 'raw',
+            'poolID': ohostedcons.Const.BLANK_UUID,
+            'volumeID': self.environment[ohostedcons.StorageEnv.VOL_UUID],
+            'imageID': self.environment[ohostedcons.StorageEnv.IMG_UUID],
+            'specParams': {},
+            'readonly': 'false',
+            'domainID': self.environment[ohostedcons.StorageEnv.SD_UUID],
+            'optional': 'false',
+            'deviceId': self.environment[ohostedcons.StorageEnv.IMG_UUID],
+            'address': {
+                'bus': '0x00',
+                'slot': '0x06',
+                'domain': '0x0000',
+                'type': 'pci',
+                'function': '0x0'
+            },
+            'device': 'disk',
+            'shared': 'exclusive',
+            'propagateErrors': 'off',
+            'type': 'disk',
+        }
+        if self.environment[ohostedcons.VMEnv.BOOT] == 'disk':
+            disk['bootOrder'] = '1'
+        conf['devices'].append(disk)
+        nic = {
+            'nicModel': 'pv',
+            'macAddr': self.environment[ohostedcons.VMEnv.MAC_ADDR],
+            'linkActive': 'true',
+            'network': self.environment[ohostedcons.NetworkEnv.BRIDGE_NAME],
+            'filter': 'vdsm-no-mac-spoofing',
+            'specParams': {},
+            'deviceId': self.environment[ohostedcons.VMEnv.NIC_UUID],
+            'address': {
+                'bus': '0x00',
+                'slot': '0x03',
+                'domain': '0x0000',
+                'type': 'pci',
+                'function': '0x0'
+            },
+            'device': 'bridge',
+            'type': 'interface',
+        }
+        if self.environment[ohostedcons.VMEnv.BOOT] == 'pxe':
+            nic['bootOrder'] = '1'
+        conf['devices'].append(nic)
+
+        cli = self.environment[ohostedcons.VDSMEnv.VDS_CLI]
+        status = cli.create(conf)
+        self.logger.debug(status)
+        if status['status']['code'] != 0:
+            raise RuntimeError(
+                _(
+                    'Cannot create the VM: {message}'
+                ).format(
+                    message=status['status']['message']
+                )
+            )
+        # Now it's in WaitForLaunch, need to be on powering up
+        powering = False
+        tries = self.POWER_MAX_TRIES
+        while not powering and tries > 0:
+            tries -= 1
+            stats = cli.getVmStats(
+                self.environment[ohostedcons.VMEnv.VM_UUID]
+            )
+            self.logger.debug(stats)
+            if stats['status']['code'] != 0:
+                raise RuntimeError(stats['status']['message'])
+            else:
+                statsList = stats['statsList'][0]
+                if statsList['status'] in ('Powering up', 'Up'):
+                    powering = True
+                elif statsList['status'] == 'Down':
+                    # VM creation failure
+                    tries = 0
+                else:
+                    time.sleep(self.POWER_DELAY)
+        if not powering:
+            raise RuntimeError(
+                _(
+                    'The VM is not powering up: please check VDSM logs'
+                )
+            )
+
         password_set = False
         tries = self.TICKET_MAX_TRIES
         while not password_set and tries > 0:
             tries -= 1
-            try:
-                cmd = self._vdscommand + [
-                    'setVmTicket',
-                    self.environment[ohostedcons.VMEnv.VM_UUID],
-                    self.environment[ohostedcons.VMEnv.VM_PASSWD],
-                    self.environment[
-                        ohostedcons.VMEnv.VM_PASSWD_VALIDITY_SECS
-                    ],
-                ]
-                self.execute(
-                    cmd,
-                    raiseOnError=True
-                )
+            status = cli.setVmTicket(
+                self.environment[ohostedcons.VMEnv.VM_UUID],
+                self.environment[ohostedcons.VMEnv.VM_PASSWD],
+                self.environment[
+                    ohostedcons.VMEnv.VM_PASSWD_VALIDITY_SECS
+                ],
+            )
+            self.logger.debug(status)
+            if status['status']['code'] == 0:
                 password_set = True
-            except RuntimeError as e:
-                self.logger.debug(str(e))
+            else:
                 time.sleep(self.TICKET_DELAY)
         if not password_set:
             raise RuntimeError(
@@ -218,11 +349,9 @@
             )
 
     def _destroy_vm(self):
-        cmd = self._vdscommand + [
-            'destroy',
-            self.environment[ohostedcons.VMEnv.VM_UUID]
-        ]
-        self.execute(cmd, raiseOnError=True)
+        cli = self.environment[ohostedcons.VDSMEnv.VDS_CLI]
+        res = cli.destroy(self.environment[ohostedcons.VMEnv.VM_UUID])
+        self.logger.debug(res)
 
     def _wait_vm_destroyed(self):
         waiter = tasks.VMDownWaiter(self.environment)
diff --git a/src/ovirt_hosted_engine_setup/tasks.py 
b/src/ovirt_hosted_engine_setup/tasks.py
index 173fed8..e0d298f 100644
--- a/src/ovirt_hosted_engine_setup/tasks.py
+++ b/src/ovirt_hosted_engine_setup/tasks.py
@@ -1,6 +1,6 @@
 #
 # ovirt-hosted-engine-setup -- ovirt hosted engine setup
-# Copyright (C) 2013-2014 Red Hat, Inc.
+# Copyright (C) 2013-2015 Red Hat, Inc.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -42,11 +42,11 @@
         self.environment = environment
 
     def wait(self):
-        serv = self.environment[ohostedcons.VDSMEnv.VDS_CLIENT]
+        cli = self.environment[ohostedcons.VDSMEnv.VDS_CLI]
         wait = True
         while wait:
             self.logger.debug('Waiting for existing tasks to complete')
-            statuses = serv.s.getAllTasksStatuses()
+            statuses = cli.getAllTasksStatuses()
             code = statuses['status']['code']
             message = statuses['status']['message']
             if code != 0:
@@ -63,7 +63,7 @@
                 if tasksStatuses[taskID]['taskState'] != 'finished':
                     all_completed = False
                 else:
-                    serv.clearTask([taskID])
+                    cli.clearTask(taskID)
             if all_completed:
                 wait = False
             else:
@@ -83,13 +83,13 @@
         self.environment = environment
 
     def wait(self):
-        serv = self.environment[ohostedcons.VDSMEnv.VDS_CLIENT]
+        cli = self.environment[ohostedcons.VDSMEnv.VDS_CLI]
         down = False
         destroyed = False
         while not down:
             time.sleep(self.POLLING_INTERVAL)
             self.logger.debug('Waiting for VM down')
-            response = serv.s.getVmStats(
+            response = cli.getVmStats(
                 self.environment[ohostedcons.VMEnv.VM_UUID]
             )
             code = response['status']['code']
@@ -120,12 +120,12 @@
         self.environment = environment
 
     def wait(self, sdUUID):
-        serv = self.environment[ohostedcons.VDSMEnv.VDS_CLIENT]
+        cli = self.environment[ohostedcons.VDSMEnv.VDS_CLI]
         acquired = False
         while not acquired:
             time.sleep(self.POLLING_INTERVAL)
             self.logger.debug('Waiting for domain monitor')
-            response = serv.s.getVdsStats()
+            response = cli.getVdsStats()
             self.logger.debug(response)
             if response['status']['code'] != 0:
                 self.logger.debug(response['status']['message'])
diff --git a/src/plugins/ovirt-hosted-engine-setup/engine/add_disk.py 
b/src/plugins/ovirt-hosted-engine-setup/engine/add_disk.py
index 57825de..c5c687b 100644
--- a/src/plugins/ovirt-hosted-engine-setup/engine/add_disk.py
+++ b/src/plugins/ovirt-hosted-engine-setup/engine/add_disk.py
@@ -89,7 +89,7 @@
     @plugin.event(
         stage=plugin.Stages.STAGE_CLOSEUP,
         after=(
-            ohostedcons.Stages.HOST_ADDED,
+            ohostedcons.Stages.VDSCLI_RECONNECTED,
         ),
         condition=(
             lambda self: self.environment[
diff --git a/src/plugins/ovirt-hosted-engine-setup/engine/add_host.py 
b/src/plugins/ovirt-hosted-engine-setup/engine/add_host.py
index 0ad258a..598e043 100644
--- a/src/plugins/ovirt-hosted-engine-setup/engine/add_host.py
+++ b/src/plugins/ovirt-hosted-engine-setup/engine/add_host.py
@@ -45,7 +45,6 @@
 
 
 from vdsm import netinfo
-from vdsm import vdscli
 
 
 from ovirt_hosted_engine_setup import constants as ohostedcons
@@ -567,7 +566,7 @@
             )
 
         try:
-            conn = vdscli.connect()
+            conn = self.environment[ohostedcons.VDSMEnv.VDS_CLI]
             net_info = netinfo.NetInfo(vds_info.capabilities(conn))
             bridge_port = self.environment[ohostedcons.NetworkEnv.BRIDGE_IF]
             if bridge_port in net_info.vlans:
@@ -672,6 +671,8 @@
             engine_api,
             self.environment[ohostedcons.EngineEnv.APP_HOST_NAME]
         )
+        # TODO: host-deploy restarted vdscli so we need to
+        # connect again
         if not up:
             self.logger.error(
                 _(
diff --git a/src/plugins/ovirt-hosted-engine-setup/engine/os_install.py 
b/src/plugins/ovirt-hosted-engine-setup/engine/os_install.py
index 78c5c0b..c1e7d36 100644
--- a/src/plugins/ovirt-hosted-engine-setup/engine/os_install.py
+++ b/src/plugins/ovirt-hosted-engine-setup/engine/os_install.py
@@ -59,6 +59,10 @@
         ],
     )
     def _closeup(self):
+        # TODO: now mixins._create_vm dinamically generates
+        # VM config from env variables.
+        # It would be better to do it from the template
+        self.environment[ohostedcons.VMEnv.BOOT] = 'disk'
         self.environment[ohostedcons.VMEnv.SUBST][
             '@BOOT_DISK@'
         ] = ',bootOrder:1'
diff --git a/src/plugins/ovirt-hosted-engine-setup/ha/ha_services.py 
b/src/plugins/ovirt-hosted-engine-setup/ha/ha_services.py
index ce3f9b4..b20c0ff 100644
--- a/src/plugins/ovirt-hosted-engine-setup/ha/ha_services.py
+++ b/src/plugins/ovirt-hosted-engine-setup/ha/ha_services.py
@@ -1,6 +1,6 @@
 #
 # ovirt-hosted-engine-setup -- ovirt hosted engine setup
-# Copyright (C) 2013-2014 Red Hat, Inc.
+# Copyright (C) 2013-2015 Red Hat, Inc.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -85,7 +85,7 @@
     @plugin.event(
         stage=plugin.Stages.STAGE_CLOSEUP,
         after=(
-            ohostedcons.Stages.HOST_ADDED,
+            ohostedcons.Stages.VDSCLI_RECONNECTED,
         ),
         name=ohostedcons.Stages.HA_START,
     )
@@ -102,18 +102,20 @@
             waiter = tasks.VMDownWaiter(self.environment)
             if not waiter.wait():
                 # The VM is down but not destroyed
-                vdscommand = [self.command.get('vdsClient')]
-                if self.environment[ohostedcons.VDSMEnv.USE_SSL]:
-                    vdscommand.append('-s')
-                vdscommand += [
-                    'localhost',
-                    'destroy',
-                    self.environment[ohostedcons.VMEnv.VM_UUID],
-                ]
-                self.execute(
-                    vdscommand,
-                    raiseOnError=True
+                status = self.environment[
+                    ohostedcons.VDSMEnv.VDS_CLI
+                ].destroy(
+                    self.environment[ohostedcons.VMEnv.VM_UUID]
                 )
+                self.logger.debug(status)
+                if status['status']['code'] != 0:
+                    self.logger.error(
+                        _(
+                            'Cannot destroy the Hosted Engine VM: ' +
+                            status['status']['message']
+                        )
+                    )
+                    raise RuntimeError(status['status']['message'])
         self.logger.info(_('Enabling and starting HA services'))
         for service in (
             ohostedcons.Const.HA_AGENT_SERVICE,
@@ -128,4 +130,5 @@
                 state=True,
             )
 
+
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/plugins/ovirt-hosted-engine-setup/network/bridge.py 
b/src/plugins/ovirt-hosted-engine-setup/network/bridge.py
index b62d21f..29cc680 100644
--- a/src/plugins/ovirt-hosted-engine-setup/network/bridge.py
+++ b/src/plugins/ovirt-hosted-engine-setup/network/bridge.py
@@ -1,6 +1,6 @@
 #
 # ovirt-hosted-engine-setup -- ovirt hosted engine setup
-# Copyright (C) 2013-2014 Red Hat, Inc.
+# Copyright (C) 2013-2015 Red Hat, Inc.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -34,7 +34,6 @@
 from otopi import util
 from otopi import plugin
 from vdsm import netinfo
-from vdsm import vdscli
 
 
 from ovirt_hosted_engine_setup import constants as ohostedcons
@@ -83,8 +82,6 @@
                 )
             )
             self._enabled = False
-        else:
-            self.command.detect('vdsClient')
 
     @plugin.event(
         stage=plugin.Stages.STAGE_CUSTOMIZATION,
@@ -196,7 +193,7 @@
     )
     def _misc(self):
         self.logger.info(_('Configuring the management bridge'))
-        conn = vdscli.connect()
+        conn = self.environment[ohostedcons.VDSMEnv.VDS_CLI]
         networks = {
             self.environment[ohostedcons.NetworkEnv.BRIDGE_NAME]:
             vds_info.network(
diff --git a/src/plugins/ovirt-hosted-engine-setup/storage/storage.py 
b/src/plugins/ovirt-hosted-engine-setup/storage/storage.py
index df6bb8e..de82a38 100644
--- a/src/plugins/ovirt-hosted-engine-setup/storage/storage.py
+++ b/src/plugins/ovirt-hosted-engine-setup/storage/storage.py
@@ -555,6 +555,7 @@
             domList,
             mVer
         )
+        self.logger.debug(status)
         if status['status']['code'] != 0:
             raise RuntimeError(status['status']['message'])
 
@@ -628,6 +629,7 @@
             maxHostID,
             version
         )
+        self.logger.debug(status)
         if status['status']['code'] != 0:
             raise RuntimeError(status['status']['message'])
 
@@ -637,9 +639,9 @@
         status = self.cli.spmStop(
             spUUID,
         )
+        self.logger.debug(status)
         if status['status']['code'] != 0:
             raise RuntimeError(status['status']['message'])
-        self.logger.debug(status)
 
     def _activateStorageDomain(self):
         self.logger.debug('activateStorageDomain')
@@ -736,7 +738,7 @@
             ] = self.dialog.queryString(
                 name='OVEHOSTED_STORAGE_DATACENTER_NAME',
                 note=_(
-                    'Local storage datacenter name is an internal name '
+                    'Local storage datacenter name is an internal name\n'
                     'and currently will not be shown in engine\'s admin UI.\n'
                     'Please enter local datacenter name [@DEFAULT@]: '
                 ),
diff --git a/src/plugins/ovirt-hosted-engine-setup/system/vdsmenv.py 
b/src/plugins/ovirt-hosted-engine-setup/system/vdsmenv.py
index 59db87b..0d2c4c2 100644
--- a/src/plugins/ovirt-hosted-engine-setup/system/vdsmenv.py
+++ b/src/plugins/ovirt-hosted-engine-setup/system/vdsmenv.py
@@ -1,6 +1,6 @@
 #
 # ovirt-hosted-engine-setup -- ovirt hosted engine setup
-# Copyright (C) 2013-2014 Red Hat, Inc.
+# Copyright (C) 2013-2015 Red Hat, Inc.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -50,35 +50,14 @@
         super(Plugin, self).__init__(context=context)
 
     def _connect(self):
-        vdsClient = util.loadModule(
-            path=ohostedcons.FileLocations.VDS_CLIENT_DIR,
-            name='vdsClient'
-        )
-        serv = None
-        if vdsClient._glusterEnabled:
-            serv = vdsClient.ge.GlusterService()
-        else:
-            serv = vdsClient.service()
-        serv.useSSL = self.environment[ohostedcons.VDSMEnv.USE_SSL]
-        if hasattr(vdscli, 'cannonizeAddrPort'):
-            server, serverPort = vdscli.cannonizeAddrPort(
-                'localhost'
-            ).split(':', 1)
-            serv.do_connect(server, serverPort)
-        else:
-            hostPort = vdscli.cannonizeHostPort('localhost')
-            serv.do_connect(hostPort)
-
         cli = vdscli.connect()
         self.environment[ohostedcons.VDSMEnv.VDS_CLI] = cli
-
-        self.environment[ohostedcons.VDSMEnv.VDS_CLIENT] = serv
         vdsmReady = False
         retry = 0
         while not vdsmReady and retry < self.MAX_RETRY:
             retry += 1
             try:
-                hwinfo = serv.s.getVdsHardwareInfo()
+                hwinfo = cli.getVdsHardwareInfo()
                 self.logger.debug(str(hwinfo))
                 if hwinfo['status']['code'] == 0:
                     vdsmReady = True
@@ -104,10 +83,6 @@
         self.environment.setdefault(
             ohostedcons.VDSMEnv.KVM_GID,
             grp.getgrnam('kvm').gr_gid
-        )
-        self.environment.setdefault(
-            ohostedcons.VDSMEnv.VDS_CLIENT,
-            None
         )
         self.environment.setdefault(
             ohostedcons.VDSMEnv.VDS_CLI,
@@ -196,5 +171,16 @@
             )
         self._connect()
 
+    @plugin.event(
+        stage=plugin.Stages.STAGE_CLOSEUP,
+        after=(
+            ohostedcons.Stages.HOST_ADDED,
+        ),
+        name=ohostedcons.Stages.VDSCLI_RECONNECTED,
+    )
+    def _closeup(self):
+        # We need to reconnect cause host-deploy
+        # restarted vdsm adding the host
+        self._connect()
 
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/plugins/ovirt-hosted-engine-setup/vdsmd/cpu.py 
b/src/plugins/ovirt-hosted-engine-setup/vdsmd/cpu.py
index e413395..74ca6f6 100644
--- a/src/plugins/ovirt-hosted-engine-setup/vdsmd/cpu.py
+++ b/src/plugins/ovirt-hosted-engine-setup/vdsmd/cpu.py
@@ -1,6 +1,6 @@
 #
 # ovirt-hosted-engine-setup -- ovirt hosted engine setup
-# Copyright (C) 2013-2014 Red Hat, Inc.
+# Copyright (C) 2013-2015 Red Hat, Inc.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -23,7 +23,6 @@
 """
 
 
-import sys
 import gettext
 
 
@@ -65,21 +64,19 @@
         super(Plugin, self).__init__(context=context)
 
     def _getCompatibleCpuModels(self):
-        self.logger.debug('Attempting to load the caps vdsm module')
-        savedPath = sys.path
-        ret = None
-        try:
-            sys.path.append(ohostedcons.FileLocations.VDS_CLIENT_DIR)
-            caps = util.loadModule(
-                path=ohostedcons.FileLocations.VDS_CLIENT_DIR,
-                name='caps',
-            )
-            ret = (
-                caps.CpuInfo().model(),
-                caps._getCompatibleCpuModels(),
-            )
-        finally:
-            sys.path = savedPath
+        cli = self.environment[ohostedcons.VDSMEnv.VDS_CLI]
+        caps = cli.getVdsCapabilities()
+        if caps['status']['code'] != 0:
+            raise RuntimeError(caps['status']['message'])
+        cpuModel = caps['info']['cpuModel']
+        cpuCompatibles = [
+            x for x in caps['info']['cpuFlags'].split(',')
+            if x.startswith('model_')
+        ]
+        ret = (
+            cpuModel,
+            cpuCompatibles
+        )
         return ret
 
     @plugin.event(
diff --git a/src/plugins/ovirt-hosted-engine-setup/vm/boot_disk.py 
b/src/plugins/ovirt-hosted-engine-setup/vm/boot_disk.py
index f9d228b..2b229e0 100644
--- a/src/plugins/ovirt-hosted-engine-setup/vm/boot_disk.py
+++ b/src/plugins/ovirt-hosted-engine-setup/vm/boot_disk.py
@@ -1,6 +1,6 @@
 #
 # ovirt-hosted-engine-setup -- ovirt hosted engine setup
-# Copyright (C) 2013-2014 Red Hat, Inc.
+# Copyright (C) 2013-2015 Red Hat, Inc.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -115,8 +115,8 @@
         info = json.decoder.JSONDecoder().decode('\n'.join(stdout))
         source_size = int(info['virtual-size'])
 
-        serv = self._parent.environment[ohostedcons.VDSMEnv.VDS_CLIENT]
-        size = serv.s.getVolumeSize(
+        cli = self._parent.environment[ohostedcons.VDSMEnv.VDS_CLI]
+        size = cli.getVolumeSize(
             self._parent.environment[ohostedcons.StorageEnv.SD_UUID],
             self._parent.environment[ohostedcons.StorageEnv.SP_UUID],
             self._parent.environment[ohostedcons.StorageEnv.IMG_UUID],
diff --git a/src/plugins/ovirt-hosted-engine-setup/vm/configurevm.py 
b/src/plugins/ovirt-hosted-engine-setup/vm/configurevm.py
index 8ccaefb..b45cc8d 100644
--- a/src/plugins/ovirt-hosted-engine-setup/vm/configurevm.py
+++ b/src/plugins/ovirt-hosted-engine-setup/vm/configurevm.py
@@ -1,6 +1,6 @@
 #
 # ovirt-hosted-engine-setup -- ovirt hosted engine setup
-# Copyright (C) 2013 Red Hat, Inc.
+# Copyright (C) 2013-2015 Red Hat, Inc.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -55,10 +55,6 @@
 
     def __init__(self, context):
         super(Plugin, self).__init__(context=context)
-        self.vdsClient = util.loadModule(
-            path=ohostedcons.FileLocations.VDS_CLIENT_DIR,
-            name='vdsClient'
-        )
 
     @plugin.event(
         stage=plugin.Stages.STAGE_INIT,
@@ -95,8 +91,8 @@
         name=ohostedcons.Stages.VDSMD_LATE_SETUP_READY,
     )
     def _late_setup(self):
-        serv = self.environment[ohostedcons.VDSMEnv.VDS_CLIENT]
-        response = serv.s.list()
+        cli = self.environment[ohostedcons.VDSMEnv.VDS_CLI]
+        response = cli.list()
         if response['status']['code'] == 0:
             self.logger.debug(response['vmList'])
             if response['vmList']:
@@ -180,7 +176,7 @@
     def _misc(self):
         self.logger.info(_('Configuring VM'))
         subst = {
-            '@SP_UUID@': self.vdsClient.BLANK_UUID,
+            '@SP_UUID@': ohostedcons.Const.BLANK_UUID,
             '@SD_UUID@': self.environment[
                 ohostedcons.StorageEnv.SD_UUID
             ],
diff --git a/src/plugins/ovirt-hosted-engine-setup/vm/image.py 
b/src/plugins/ovirt-hosted-engine-setup/vm/image.py
index 4617a8d..65c3703 100644
--- a/src/plugins/ovirt-hosted-engine-setup/vm/image.py
+++ b/src/plugins/ovirt-hosted-engine-setup/vm/image.py
@@ -1,6 +1,6 @@
 #
 # ovirt-hosted-engine-setup -- ovirt hosted engine setup
-# Copyright (C) 2013-2014 Red Hat, Inc.
+# Copyright (C) 2013-2015 Red Hat, Inc.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -183,14 +183,14 @@
         spUUID = self.environment[ohostedcons.StorageEnv.SP_UUID]
         imgUUID = self.environment[ohostedcons.StorageEnv.IMG_UUID]
         volUUID = self.environment[ohostedcons.StorageEnv.VOL_UUID]
-        serv = self.environment[ohostedcons.VDSMEnv.VDS_CLIENT]
+        cli = self.environment[ohostedcons.VDSMEnv.VDS_CLI]
 
         if self.environment[ohostedcons.StorageEnv.DOMAIN_TYPE] in (
             ohostedcons.DomainTypes.ISCSI,
         ):
             # Checking the available space on VG where
             # we have to preallocate the image
-            vginfo = serv.s.getVGInfo(
+            vginfo = cli.getVGInfo(
                 self.environment[ohostedcons.StorageEnv.VG_UUID]
             )
             self.logger.debug(vginfo)
@@ -227,31 +227,36 @@
             preallocate = ohostedcons.VolumeTypes.PREALLOCATED_VOL
 
         diskType = 2
-        status, message = serv.createVolume([
+        status = cli.createVolume(
             sdUUID,
             spUUID,
             imgUUID,
-            self.environment[ohostedcons.StorageEnv.IMAGE_SIZE_GB],
+            str(
+                int(
+                    self.environment[ohostedcons.StorageEnv.IMAGE_SIZE_GB]
+                ) * pow(2, 30)
+            ),
             volFormat,
             preallocate,
             diskType,
             volUUID,
             self.environment[ohostedcons.StorageEnv.IMAGE_DESC],
-        ])
-        if status == 0:
+        )
+        self.logger.debug(status)
+        if status['status']['code'] == 0:
             self.logger.debug(
                 (
                     'Created volume {newUUID}, request was:\n'
                     '- image: {imgUUID}\n'
                     '- volume: {volUUID}'
                 ).format(
-                    newUUID=message,
+                    newUUID=status['status']['message'],
                     imgUUID=imgUUID,
                     volUUID=volUUID,
                 )
             )
         else:
-            raise RuntimeError(message)
+            raise RuntimeError(status['status']['message'])
         waiter = tasks.TaskWaiter(self.environment)
         waiter.wait()
 
diff --git a/src/plugins/ovirt-hosted-engine-setup/vm/runvm.py 
b/src/plugins/ovirt-hosted-engine-setup/vm/runvm.py
index b728d41..be6d95f 100644
--- a/src/plugins/ovirt-hosted-engine-setup/vm/runvm.py
+++ b/src/plugins/ovirt-hosted-engine-setup/vm/runvm.py
@@ -1,6 +1,6 @@
 #
 # ovirt-hosted-engine-setup -- ovirt hosted engine setup
-# Copyright (C) 2013-2014 Red Hat, Inc.
+# Copyright (C) 2013-2015 Red Hat, Inc.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -70,8 +70,6 @@
         stage=plugin.Stages.STAGE_SETUP,
     )
     def _setup(self):
-        # Can't use python api here, it will call sys.exit
-        self.command.detect('vdsClient')
         self.command.detect('remote-viewer')
 
     @plugin.event(


-- 
To view, visit http://gerrit.ovirt.org/37560
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0f17abcc4ec83a69832bdb5a986136831504da2c
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-hosted-engine-setup
Gerrit-Branch: ovirt-hosted-engine-setup-1.2
Gerrit-Owner: Simone Tiraboschi <stira...@redhat.com>
Gerrit-Reviewer: Sandro Bonazzola <sbona...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to