Alon Bar-Lev has uploaded a new change for review. Change subject: packaging: setup: database: apply indirect reference to db vars ......................................................................
packaging: setup: database: apply indirect reference to db vars this enables reuse using different database connections. Change-Id: I587c287d822a7ea8e7ebf34ca70960172edc3fbc Signed-off-by: Alon Bar-Lev <alo...@redhat.com> --- M packaging/setup/ovirt_engine_setup/constants.py M packaging/setup/ovirt_engine_setup/database.py M packaging/setup/plugins/ovirt-engine-common/base/db/connection.py M packaging/setup/plugins/ovirt-engine-common/base/db/pgpass.py M packaging/setup/plugins/ovirt-engine-remove/ovirt-engine/db/clear.py M packaging/setup/plugins/ovirt-engine-rename/core/database.py M packaging/setup/plugins/ovirt-engine-setup/ovirt-engine-common/db/connection.py M packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/db/schema.py M packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/database.py M packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/datadomain.py M packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/isodomain.py M packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/provisioning/postgres.py M packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/upgrade/asynctasks.py 13 files changed, 176 insertions(+), 105 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/22987/1 diff --git a/packaging/setup/ovirt_engine_setup/constants.py b/packaging/setup/ovirt_engine_setup/constants.py index 74eaf4d..dbeb205 100644 --- a/packaging/setup/ovirt_engine_setup/constants.py +++ b/packaging/setup/ovirt_engine_setup/constants.py @@ -648,6 +648,20 @@ ISO_DOMAIN_NFS_DEFAULT_ACL = '0.0.0.0/0.0.0.0(rw)' ENGINE_DB_BACKUP_PREFIX = 'engine' + @classproperty + def ENGINE_DB_ENV_KEYS(self): + return { + 'host': DBEnv.HOST, + 'port': DBEnv.PORT, + 'secured': DBEnv.SECURED, + 'hostValidation': DBEnv.SECURED_HOST_VALIDATION, + 'user': DBEnv.USER, + 'password': DBEnv.PASSWORD, + 'database': DBEnv.DATABASE, + 'connection': DBEnv.CONNECTION, + 'pgpassfile': DBEnv.PGPASS_FILE, + } + @util.export @util.codegen diff --git a/packaging/setup/ovirt_engine_setup/database.py b/packaging/setup/ovirt_engine_setup/database.py index 3328997..68c1a09 100644 --- a/packaging/setup/ovirt_engine_setup/database.py +++ b/packaging/setup/ovirt_engine_setup/database.py @@ -16,6 +16,7 @@ # +import atexit import os import base64 import tempfile @@ -35,6 +36,9 @@ from otopi import util +from ovirt_engine import util as outil + + from ovirt_engine_setup import constants as osetupcons @@ -45,9 +49,14 @@ def environment(self): return self._environment - def __init__(self, environment): + def __init__( + self, + dbenvkeys, + environment, + ): super(Statement, self).__init__() self._environment = environment + self._dbenvkeys = dbenvkeys def execute( self, @@ -89,21 +98,21 @@ ret = [] if host is None: - host = self.environment[osetupcons.DBEnv.HOST] + host = self.environment[self._dbenvkeys['host']] if port is None: - port = self.environment[osetupcons.DBEnv.PORT] + port = self.environment[self._dbenvkeys['port']] if secured is None: - secured = self.environment[osetupcons.DBEnv.SECURED] + secured = self.environment[self._dbenvkeys['secured']] if securedHostValidation is None: securedHostValidation = self.environment[ - osetupcons.DBEnv.SECURED_HOST_VALIDATION + self._dbenvkeys['hostValidation'] ] if user is None: - user = self.environment[osetupcons.DBEnv.USER] + user = self.environment[self._dbenvkeys['user']] if password is None: - password = self.environment[osetupcons.DBEnv.PASSWORD] + password = self.environment[self._dbenvkeys['password']] if database is None: - database = self.environment[osetupcons.DBEnv.DATABASE] + database = self.environment[self._dbenvkeys['database']] sslmode = 'allow' if secured: @@ -123,7 +132,7 @@ args, ) if not ownConnection: - connection = self.environment[osetupcons.DBEnv.CONNECTION] + connection = self.environment[self._dbenvkeys['connection']] else: self.logger.debug('Creating own connection') @@ -266,7 +275,12 @@ def command(self): return self._plugin.command - def __init__(self, plugin, environment=None): + def __init__( + self, + plugin, + dbenvkeys, + environment=None, + ): super(OvirtUtils, self).__init__() self._plugin = plugin self._environment = ( @@ -274,10 +288,32 @@ if environment is None else environment ) + self._dbenvkeys = dbenvkeys def detectCommands(self): self.command.detect('pg_dump') self.command.detect('psql') + + def createPgPass(self): + fd, pgpass = tempfile.mkstemp() + atexit.register(os.unlink, pgpass) + with os.fdopen(fd, 'w') as f: + f.write( + ( + '# DB USER credentials.\n' + '{host}:{port}:{database}:{user}:{password}\n' + ).format( + host=self.environment[self._dbenvkeys['host']], + port=self.environment[self._dbenvkeys['port']], + database=self.environment[self._dbenvkeys['database']], + user=self.environment[self._dbenvkeys['user']], + password=outil.escape( + self.environment[self._dbenvkeys['password']], + ':\\', + ), + ), + ) + self.environment[self._dbenvkeys['pgpassfile']] = pgpass def tryDatabaseConnect(self, environment=None): @@ -285,7 +321,10 @@ environment = self.environment try: - statement = Statement(environment=environment) + statement = Statement( + environment=environment, + dbenvkeys=self._dbenvkeys, + ) statement.execute( statement=""" select 1 @@ -313,6 +352,7 @@ ): statement = Statement( environment=self.environment, + dbenvkeys=self._dbenvkeys, ) ret = statement.execute( statement=""" @@ -334,9 +374,10 @@ ) return ret[0]['count'] == 0 - def clearOvirtEngineDatabase(self): + def clearDatabase(self): statement = Statement( environment=self.environment, + dbenvkeys=self._dbenvkeys, ) statement.execute( @@ -497,17 +538,15 @@ '--disable-dollar-quoting', '--disable-triggers', '--format=p', - '-U', self.environment[osetupcons.DBEnv.USER], - '-h', self.environment[osetupcons.DBEnv.HOST], - '-p', str(self.environment[osetupcons.DBEnv.PORT]), + '-U', self.environment[self._dbenvkeys['user']], + '-h', self.environment[self._dbenvkeys['host']], + '-p', str(self.environment[self._dbenvkeys['port']]), '-f', backupFile, - self.environment[osetupcons.DBEnv.DATABASE], + self.environment[self._dbenvkeys['database']], ), envAppend={ 'PGPASSWORD': '', - 'PGPASSFILE': self.environment[ - osetupcons.DBEnv.PGPASS_FILE - ] + 'PGPASSFILE': self.environment[self._dbenvkeys['pgpassfile']], }, ) @@ -521,18 +560,17 @@ ( self.command.get('psql'), '-w', - '-h', self.environment[osetupcons.DBEnv.HOST], - '-p', str(self.environment[osetupcons.DBEnv.PORT]), - '-U', self.environment[osetupcons.DBEnv.USER], - '-d', self.environment[osetupcons.DBEnv.DATABASE], + '-h', self.environment[self._dbenvkeys['host']], + '-p', str(self.environment[self._dbenvkeys['port']]), + '-U', self.environment[self._dbenvkeys['user']], + '-d', self.environment[self._dbenvkeys['database']], '-f', backupFile, ), envAppend={ 'PGPASSWORD': '', - 'PGPASSFILE': self.environment[ - osetupcons.DBEnv.PGPASS_FILE - ] + 'PGPASSFILE': self.environment[self._dbenvkeys['pgpassfile']], }, ) + # vim: expandtab tabstop=4 shiftwidth=4 diff --git a/packaging/setup/plugins/ovirt-engine-common/base/db/connection.py b/packaging/setup/plugins/ovirt-engine-common/base/db/connection.py index 4680cbe..818a7e7 100644 --- a/packaging/setup/plugins/ovirt-engine-common/base/db/connection.py +++ b/packaging/setup/plugins/ovirt-engine-common/base/db/connection.py @@ -93,7 +93,10 @@ stage=plugin.Stages.STAGE_SETUP, ) def _commands(self): - dbovirtutils = database.OvirtUtils(plugin=self) + dbovirtutils = database.OvirtUtils( + plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ) dbovirtutils.detectCommands() @plugin.event( @@ -132,7 +135,10 @@ dbenv[osetupcons.DBEnv.PASSWORD] ) - dbovirtutils = database.OvirtUtils(plugin=self) + dbovirtutils = database.OvirtUtils( + plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ) dbovirtutils.tryDatabaseConnect(dbenv) self.environment.update(dbenv) self.environment[ diff --git a/packaging/setup/plugins/ovirt-engine-common/base/db/pgpass.py b/packaging/setup/plugins/ovirt-engine-common/base/db/pgpass.py index 6ac350c..e461c3b 100644 --- a/packaging/setup/plugins/ovirt-engine-common/base/db/pgpass.py +++ b/packaging/setup/plugins/ovirt-engine-common/base/db/pgpass.py @@ -19,8 +19,6 @@ """DB pgpass plugin.""" -import os -import tempfile import gettext _ = lambda m: gettext.dgettext(message=m, domain='ovirt-engine-setup') @@ -29,10 +27,8 @@ from otopi import plugin -from ovirt_engine import util as outil - - from ovirt_engine_setup import constants as osetupcons +from ovirt_engine_setup import database @util.export @@ -40,47 +36,6 @@ """DB pgpass plugin.""" def __init__(self, context): super(Plugin, self).__init__(context=context) - - def _createTempPgPass(self): - pgpass = None - if self.environment[ - osetupcons.DBEnv.PGPASS_FILE - ] is not None: - pgpass = self.environment[ - osetupcons.DBEnv.PGPASS_FILE - ] - else: - fd, pgpass = tempfile.mkstemp( - prefix='pgpass', - suffix='.tmp', - ) - os.close(fd) - os.chmod(pgpass, 0o600) - self.logger.debug( - 'Password==None %s', - self.environment[osetupcons.DBEnv.PASSWORD] is None, - ) - if self.environment[osetupcons.DBEnv.PASSWORD] is not None: - with open(pgpass, 'w') as f: - f.write( - ( - '# DB USER credentials.\n' - '{host}:{port}:{database}:{user}:{password}\n' - ).format( - host=self.environment[osetupcons.DBEnv.HOST], - port=self.environment[osetupcons.DBEnv.PORT], - database=self.environment[osetupcons.DBEnv.DATABASE], - user=self.environment[osetupcons.DBEnv.USER], - password=outil.escape( - self.environment[osetupcons.DBEnv.PASSWORD], - ':\\', - ), - ), - ) - - self.environment[ - osetupcons.DBEnv.PGPASS_FILE - ] = pgpass @plugin.event( stage=plugin.Stages.STAGE_INIT, @@ -91,27 +46,29 @@ @plugin.event( stage=plugin.Stages.STAGE_VALIDATION, name=osetupcons.Stages.DB_CREDENTIALS_AVAILABLE_EARLY, + condition=lambda self: self.environment[ + osetupcons.DBEnv.PASSWORD + ] is not None ) def _validation(self): - self._createTempPgPass() + # this required for dbvalidations + database.OvirtUtils( + plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ).createPgPass() @plugin.event( stage=plugin.Stages.STAGE_MISC, name=osetupcons.Stages.DB_CREDENTIALS_AVAILABLE_LATE, - ) - def _misc(self): - self._createTempPgPass() - - @plugin.event( - stage=plugin.Stages.STAGE_CLEANUP, condition=lambda self: self.environment[ osetupcons.DBEnv.PGPASS_FILE - ] is not None, + ] is None ) - def _cleanup(self): - f = self.environment[osetupcons.DBEnv.PGPASS_FILE] - if os.path.exists(f): - os.unlink(f) + def _misc(self): + database.OvirtUtils( + plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ).createPgPass() # vim: expandtab tabstop=4 shiftwidth=4 diff --git a/packaging/setup/plugins/ovirt-engine-remove/ovirt-engine/db/clear.py b/packaging/setup/plugins/ovirt-engine-remove/ovirt-engine/db/clear.py index b32cec9..d23698c 100644 --- a/packaging/setup/plugins/ovirt-engine-remove/ovirt-engine/db/clear.py +++ b/packaging/setup/plugins/ovirt-engine-remove/ovirt-engine/db/clear.py @@ -94,7 +94,10 @@ def _misc(self): try: - dbovirtutils = database.OvirtUtils(plugin=self) + dbovirtutils = database.OvirtUtils( + plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ) dbovirtutils.tryDatabaseConnect() self._bkpfile = dbovirtutils.backup( dir=osetupcons.FileLocations.OVIRT_ENGINE_DB_BACKUP_DIR, @@ -105,7 +108,7 @@ database=self.environment[osetupcons.DBEnv.DATABASE], ) ) - dbovirtutils.clearOvirtEngineDatabase() + dbovirtutils.clearDatabase() except RuntimeError as e: self.logger.debug('exception', exc_info=True) diff --git a/packaging/setup/plugins/ovirt-engine-rename/core/database.py b/packaging/setup/plugins/ovirt-engine-rename/core/database.py index e49d970..e59eb1f 100644 --- a/packaging/setup/plugins/ovirt-engine-rename/core/database.py +++ b/packaging/setup/plugins/ovirt-engine-rename/core/database.py @@ -92,6 +92,7 @@ self.environment[ osetupcons.DBEnv.STATEMENT ] = database.Statement( + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, environment=self.environment, ) @@ -99,9 +100,15 @@ stage=plugin.Stages.STAGE_VALIDATION, ) def _validation(self): - dbovirtutils = database.OvirtUtils(plugin=self) + dbovirtutils = database.OvirtUtils( + plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ) dbovirtutils.tryDatabaseConnect() - dbstatement = database.Statement(environment=self.environment) + dbstatement = database.Statement( + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + environment=self.environment, + ) my_domains = [] rows = dbstatement.execute( statement=""" diff --git a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine-common/db/connection.py b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine-common/db/connection.py index 4cc183e..e854d0b 100644 --- a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine-common/db/connection.py +++ b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine-common/db/connection.py @@ -68,7 +68,10 @@ def _checkDbEncoding(self, environment): - statement = database.Statement(environment=environment) + statement = database.Statement( + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + environment=environment, + ) encoding = statement.execute( statement=""" show server_encoding @@ -110,7 +113,10 @@ ), ) def _customization(self): - dbovirtutils = database.OvirtUtils(plugin=self) + dbovirtutils = database.OvirtUtils( + plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ) interactive = None in ( self.environment[osetupcons.DBEnv.HOST], @@ -296,6 +302,7 @@ self.environment[ osetupcons.DBEnv.STATEMENT ] = database.Statement( + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, environment=self.environment, ) diff --git a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/db/schema.py b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/db/schema.py index 3841c7a..03e88c5 100644 --- a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/db/schema.py +++ b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/db/schema.py @@ -54,7 +54,10 @@ def abort(self): self._parent.logger.info(_('Rolling back database schema')) try: - dbovirtutils = database.OvirtUtils(plugin=self._parent) + dbovirtutils = database.OvirtUtils( + plugin=self._parent, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ) self._parent.logger.info( _('Clearing Engine database {database}').format( database=self._parent.environment[ @@ -62,7 +65,7 @@ ], ) ) - dbovirtutils.clearOvirtEngineDatabase() + dbovirtutils.clearDatabase() if self._backup is not None and os.path.exists(self._backup): self._parent.logger.info( _('Restoring Engine database {database}').format( @@ -90,7 +93,10 @@ super(Plugin, self).__init__(context=context) def _checkDatabaseOwnership(self): - statement = database.Statement(environment=self.environment) + statement = database.Statement( + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + environment=self.environment, + ) result = statement.execute( statement=""" select @@ -154,7 +160,10 @@ def _checkSupportedVersionsPresent(self): # TODO: figure out a better way to do this for the future - statement = database.Statement(environment=self.environment) + statement = database.Statement( + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + environment=self.environment, + ) dcVersions = statement.execute( statement=""" SELECT compatibility_version FROM storage_pool; @@ -272,7 +281,10 @@ ) def _miscUpgrade(self): self._checkSupportedVersionsPresent() - dbovirtutils = database.OvirtUtils(plugin=self) + dbovirtutils = database.OvirtUtils( + plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ) backupFile = dbovirtutils.backup( dir=osetupcons.FileLocations.OVIRT_ENGINE_DB_BACKUP_DIR, prefix=osetupcons.Const.ENGINE_DB_BACKUP_PREFIX, diff --git a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/database.py b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/database.py index c4d7205..94446b9 100644 --- a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/database.py +++ b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/database.py @@ -105,7 +105,10 @@ ].append( self.environment[osetupcons.DBEnv.PASSWORD] ) - dbovirtutils = database.OvirtUtils(plugin=self) + dbovirtutils = database.OvirtUtils( + plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ) dbovirtutils.tryDatabaseConnect() if dbovirtutils.isNewDatabase(): raise RuntimeError( diff --git a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/datadomain.py b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/datadomain.py index 4e79687..0f784ba 100644 --- a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/datadomain.py +++ b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/datadomain.py @@ -55,9 +55,15 @@ ), ) def _customization(self): - dbovirtutils = database.OvirtUtils(plugin=self) + dbovirtutils = database.OvirtUtils( + plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ) dbovirtutils.tryDatabaseConnect() - dbstatement = database.Statement(environment=self.environment) + dbstatement = database.Statement( + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + environment=self.environment, + ) rows = dbstatement.execute( statement=""" select diff --git a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/isodomain.py b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/isodomain.py index 70bae5c..751ee23 100644 --- a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/isodomain.py +++ b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/legacy/isodomain.py @@ -54,9 +54,15 @@ ), ) def _customization(self): - dbovirtutils = database.OvirtUtils(plugin=self) + dbovirtutils = database.OvirtUtils( + plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ) dbovirtutils.tryDatabaseConnect() - dbstatement = database.Statement(environment=self.environment) + dbstatement = database.Statement( + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + environment=self.environment, + ) rows = dbstatement.execute( statement=""" select diff --git a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/provisioning/postgres.py b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/provisioning/postgres.py index 7a29ff7..3f676a0 100644 --- a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/provisioning/postgres.py +++ b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/provisioning/postgres.py @@ -211,7 +211,10 @@ ].append(filename) def _waitDatabase(self, environment=None): - dbovirtutils = database.OvirtUtils(plugin=self) + dbovirtutils = database.OvirtUtils( + plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + ) for i in range(60): try: self.logger.debug('Attempting to connect database') @@ -232,6 +235,7 @@ def _setDatabaseResources(self, environment): dbstatement = database.Statement( + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, environment=environment, ) hasDatabase = dbstatement.execute( @@ -269,6 +273,7 @@ if hasDatabase and hasUser: dbovirtutils = database.OvirtUtils( plugin=self, + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, environment=environment, ) if dbovirtutils.isNewDatabase( @@ -333,6 +338,7 @@ ] dbstatement = database.Statement( + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, environment=environment, ) for statement in statements: diff --git a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/upgrade/asynctasks.py b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/upgrade/asynctasks.py index 3ed0ef8..0a1de1b 100644 --- a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/upgrade/asynctasks.py +++ b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/upgrade/asynctasks.py @@ -239,7 +239,10 @@ ) def _checkRunningTasks(self): - dbstatement = database.Statement(self.environment) + dbstatement = database.Statement( + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + environment=self.environment, + ) return ( self._getRunningTasks(dbstatement), self._getCompensations(dbstatement), @@ -350,7 +353,10 @@ runningTasks, compensations = self._checkRunningTasks() if runningTasks or compensations: self._askUserToStopTasks(runningTasks, compensations) - dbstatement = database.Statement(self.environment) + dbstatement = database.Statement( + dbenvkeys=osetupcons.Const.ENGINE_DB_ENV_KEYS, + environment=self.environment, + ) try: self._waitForTasksToClear(dbstatement) except KeyboardInterrupt: -- To view, visit http://gerrit.ovirt.org/22987 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I587c287d822a7ea8e7ebf34ca70960172edc3fbc Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alon Bar-Lev <alo...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches