Yedidyah Bar David has uploaded a new change for review. Change subject: packaging: setup: Use constants for db env keys ......................................................................
packaging: setup: Use constants for db env keys Change-Id: I271b1c7c3682a3d0bcc69ae6ea6c9e717ed029d1 Signed-off-by: Yedidyah Bar David <[email protected]> --- M packaging/setup/ovirt_engine_setup/engine/constants.py M packaging/setup/ovirt_engine_setup/engine_common/constants.py M packaging/setup/ovirt_engine_setup/engine_common/database.py M packaging/setup/ovirt_engine_setup/engine_common/postgres.py 4 files changed, 151 insertions(+), 95 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/61/39061/1 diff --git a/packaging/setup/ovirt_engine_setup/engine/constants.py b/packaging/setup/ovirt_engine_setup/engine/constants.py index a400d88..3a69fc3 100644 --- a/packaging/setup/ovirt_engine_setup/engine/constants.py +++ b/packaging/setup/ovirt_engine_setup/engine/constants.py @@ -29,6 +29,7 @@ from ovirt_engine_setup.constants import osetupattrs from ovirt_engine_setup.constants import osetupattrsclass from ovirt_engine_setup.engine_common import constants as oengcommcons +dek = oengcommcons.DBEnvKeysConst from . import config @@ -364,28 +365,28 @@ @classproperty def ENGINE_DB_ENV_KEYS(self): return { - 'host': EngineDBEnv.HOST, - 'port': EngineDBEnv.PORT, - 'secured': EngineDBEnv.SECURED, - 'hostValidation': EngineDBEnv.SECURED_HOST_VALIDATION, - 'user': EngineDBEnv.USER, - 'password': EngineDBEnv.PASSWORD, - 'database': EngineDBEnv.DATABASE, - 'connection': EngineDBEnv.CONNECTION, - 'pgpassfile': EngineDBEnv.PGPASS_FILE, - 'newDatabase': EngineDBEnv.NEW_DATABASE, + dek.HOST: EngineDBEnv.HOST, + dek.PORT: EngineDBEnv.PORT, + dek.SECURED: EngineDBEnv.SECURED, + dek.HOST_VALIDATION: EngineDBEnv.SECURED_HOST_VALIDATION, + dek.USER: EngineDBEnv.USER, + dek.PASSWORD: EngineDBEnv.PASSWORD, + dek.DATABASE: EngineDBEnv.DATABASE, + dek.CONNECTION: EngineDBEnv.CONNECTION, + dek.PGPASSFILE: EngineDBEnv.PGPASS_FILE, + dek.NEW_DATABASE: EngineDBEnv.NEW_DATABASE, } @classproperty def DEFAULT_ENGINE_DB_ENV_KEYS(self): return { - 'host': Defaults.DEFAULT_DB_HOST, - 'port': Defaults.DEFAULT_DB_PORT, - 'secured': Defaults.DEFAULT_DB_SECURED, - 'hostValidation': Defaults.DEFAULT_DB_SECURED_HOST_VALIDATION, - 'user': Defaults.DEFAULT_DB_USER, - 'password': Defaults.DEFAULT_DB_PASSWORD, - 'database': Defaults.DEFAULT_DB_DATABASE, + dek.HOST: Defaults.DEFAULT_DB_HOST, + dek.PORT: Defaults.DEFAULT_DB_PORT, + dek.SECURED: Defaults.DEFAULT_DB_SECURED, + dek.HOST_VALIDATION: Defaults.DEFAULT_DB_SECURED_HOST_VALIDATION, + dek.USER: Defaults.DEFAULT_DB_USER, + dek.PASSWORD: Defaults.DEFAULT_DB_PASSWORD, + dek.DATABASE: Defaults.DEFAULT_DB_DATABASE, } diff --git a/packaging/setup/ovirt_engine_setup/engine_common/constants.py b/packaging/setup/ovirt_engine_setup/engine_common/constants.py index 32eab30..89097f8 100644 --- a/packaging/setup/ovirt_engine_setup/engine_common/constants.py +++ b/packaging/setup/ovirt_engine_setup/engine_common/constants.py @@ -193,6 +193,43 @@ @util.export @util.codegen @osetupattrsclass +class DBEnvKeysConst(object): + HOST = 'host' + PORT = 'port' + SECURED = 'secured' + HOST_VALIDATION = 'hostValidation' + USER = 'user' + PASSWORD = 'password' + DATABASE = 'database' + CONNECTION = 'connection' + PGPASSFILE = 'pgpassfile' + NEW_DATABASE = 'newDatabase' + + REQUIRED_KEYS = ( + HOST, + PORT, + SECURED, + HOST_VALIDATION, + USER, + PASSWORD, + DATABASE, + CONNECTION, + PGPASSFILE, + NEW_DATABASE, + ) + + DEFAULTS_KEYS = ( + USER, + DATABASE, + PORT, + SECURED, + HOST_VALIDATION, + ) + + [email protected] [email protected] +@osetupattrsclass class SystemEnv(object): USER_APACHE = 'OVESETUP_SYSTEM/userApache' diff --git a/packaging/setup/ovirt_engine_setup/engine_common/database.py b/packaging/setup/ovirt_engine_setup/engine_common/database.py index 298cb5b..b241168 100644 --- a/packaging/setup/ovirt_engine_setup/engine_common/database.py +++ b/packaging/setup/ovirt_engine_setup/engine_common/database.py @@ -31,6 +31,7 @@ from ovirt_engine_setup import util as osetuputil from ovirt_engine_setup import dialog from ovirt_engine_setup.engine_common import constants as oengcommcons +dek = oengcommcons.DBEnvKeysConst def _(m): @@ -51,6 +52,12 @@ ): super(Statement, self).__init__() self._environment = environment + if not set(dek.REQUIRED_KEYS) <= set(dbenvkeys.keys()): + raise RuntimeError( + _('Missing required db env keys: {keys}').format( + keys=list(set(dek.REQUIRED_KEYS) - set(dbenvkeys.keys())), + ) + ) self._dbenvkeys = dbenvkeys def connect( @@ -64,21 +71,21 @@ database=None, ): if host is None: - host = self.environment[self._dbenvkeys['host']] + host = self.environment[self._dbenvkeys[dek.HOST]] if port is None: - port = self.environment[self._dbenvkeys['port']] + port = self.environment[self._dbenvkeys[dek.PORT]] if secured is None: - secured = self.environment[self._dbenvkeys['secured']] + secured = self.environment[self._dbenvkeys[dek.SECURED]] if securedHostValidation is None: securedHostValidation = self.environment[ - self._dbenvkeys['hostValidation'] + self._dbenvkeys[dek.HOST_VALIDATION] ] if user is None: - user = self.environment[self._dbenvkeys['user']] + user = self.environment[self._dbenvkeys[dek.USER]] if password is None: - password = self.environment[self._dbenvkeys['password']] + password = self.environment[self._dbenvkeys[dek.PASSWORD]] if database is None: - database = self.environment[self._dbenvkeys['database']] + database = self.environment[self._dbenvkeys[dek.DATABASE]] sslmode = 'allow' if secured: @@ -162,7 +169,7 @@ args, ) if not ownConnection: - connection = self.environment[self._dbenvkeys['connection']] + connection = self.environment[self._dbenvkeys[dek.CONNECTION]] else: self.logger.debug('Creating own connection') @@ -243,6 +250,12 @@ if environment is None else environment ) + if not set(dek.REQUIRED_KEYS) <= set(dbenvkeys.keys()): + raise RuntimeError( + _('Missing required db env keys: {keys}').format( + keys=list(set(dek.REQUIRED_KEYS) - set(dbenvkeys.keys())), + ) + ) self._dbenvkeys = dbenvkeys def detectCommands(self): @@ -277,21 +290,21 @@ '# 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']], + host=self.environment[self._dbenvkeys[dek.HOST]], + port=self.environment[self._dbenvkeys[dek.PORT]], + database=self.environment[self._dbenvkeys[dek.DATABASE]], + user=self.environment[self._dbenvkeys[dek.USER]], password=( - self.environment[self._dbenvkeys['password']] + self.environment[self._dbenvkeys[dek.PASSWORD]] if type(self)._plainPassword else outil.escape( - self.environment[self._dbenvkeys['password']], + self.environment[self._dbenvkeys[dek.PASSWORD]], ':\\', ) ), ), ) - self.environment[self._dbenvkeys['pgpassfile']] = pgpass + self.environment[self._dbenvkeys[dek.PGPASSFILE]] = pgpass def tryDatabaseConnect(self, environment=None): @@ -538,8 +551,8 @@ self.logger.info( _("Backing up database {host}:{database} to '{file}'.").format( - host=self.environment[self._dbenvkeys['host']], - database=self.environment[self._dbenvkeys['database']], + host=self.environment[self._dbenvkeys[dek.HOST]], + database=self.environment[self._dbenvkeys[dek.DATABASE]], file=backupFile, ) ) @@ -550,15 +563,17 @@ '--disable-dollar-quoting', '--disable-triggers', '--format=c', - '-U', self.environment[self._dbenvkeys['user']], - '-h', self.environment[self._dbenvkeys['host']], - '-p', str(self.environment[self._dbenvkeys['port']]), + '-U', self.environment[self._dbenvkeys[dek.USER]], + '-h', self.environment[self._dbenvkeys[dek.HOST]], + '-p', str(self.environment[self._dbenvkeys[dek.PORT]]), '-f', backupFile, - self.environment[self._dbenvkeys['database']], + self.environment[self._dbenvkeys[dek.DATABASE]], ), envAppend={ 'PGPASSWORD': '', - 'PGPASSFILE': self.environment[self._dbenvkeys['pgpassfile']], + 'PGPASSFILE': self.environment[ + self._dbenvkeys[dek.PGPASSFILE] + ], }, ) @@ -598,16 +613,18 @@ ( self.command.get('pg_restore'), '-w', - '-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']], + '-h', self.environment[self._dbenvkeys[dek.HOST]], + '-p', str(self.environment[self._dbenvkeys[dek.PORT]]), + '-U', self.environment[self._dbenvkeys[dek.USER]], + '-d', self.environment[self._dbenvkeys[dek.DATABASE]], '-j', '2', backupFile, ), envAppend={ 'PGPASSWORD': '', - 'PGPASSFILE': self.environment[self._dbenvkeys['pgpassfile']], + 'PGPASSFILE': self.environment[ + self._dbenvkeys[dek.PGPASSFILE] + ], }, raiseOnError=False, ) @@ -622,7 +639,7 @@ 'Errors while restoring {name} database, please check ' 'the log file for details' ).format( - name=self.environment[self._dbenvkeys['database']], + name=self.environment[self._dbenvkeys[dek.DATABASE]], ) ) self.logger.debug( @@ -784,11 +801,11 @@ credsfile=None, ): interactive = None in ( - self.environment[self._dbenvkeys['host']], - self.environment[self._dbenvkeys['port']], - self.environment[self._dbenvkeys['database']], - self.environment[self._dbenvkeys['user']], - self.environment[self._dbenvkeys['password']], + self.environment[self._dbenvkeys[dek.HOST]], + self.environment[self._dbenvkeys[dek.PORT]], + self.environment[self._dbenvkeys[dek.DATABASE]], + self.environment[self._dbenvkeys[dek.USER]], + self.environment[self._dbenvkeys[dek.PASSWORD]], ) if interactive: @@ -825,22 +842,22 @@ "Make sure that database can be accessed remotely.\n" "\n" ).format( - user=defaultdbenvkeys['user'], - database=defaultdbenvkeys['database'], + user=defaultdbenvkeys[dek.USER], + database=defaultdbenvkeys[dek.DATABASE], ), ) connectionValid = False while not connectionValid: - host = self.environment[self._dbenvkeys['host']] - port = self.environment[self._dbenvkeys['port']] - secured = self.environment[self._dbenvkeys['secured']] + host = self.environment[self._dbenvkeys[dek.HOST]] + port = self.environment[self._dbenvkeys[dek.PORT]] + secured = self.environment[self._dbenvkeys[dek.SECURED]] securedHostValidation = self.environment[ - self._dbenvkeys['hostValidation'] + self._dbenvkeys[dek.HOST_VALIDATION] ] - db = self.environment[self._dbenvkeys['database']] - user = self.environment[self._dbenvkeys['user']] - password = self.environment[self._dbenvkeys['password']] + db = self.environment[self._dbenvkeys[dek.DATABASE]] + user = self.environment[self._dbenvkeys[dek.USER]] + password = self.environment[self._dbenvkeys[dek.PASSWORD]] if host is None: while True: @@ -852,7 +869,7 @@ name=name, ), prompt=True, - default=defaultdbenvkeys['host'], + default=defaultdbenvkeys[dek.HOST], ) try: socket.getaddrinfo(host, None) @@ -876,7 +893,7 @@ name=name, ), prompt=True, - default=defaultdbenvkeys['port'], + default=defaultdbenvkeys[dek.PORT], ) ) break # do while missing in python @@ -894,7 +911,7 @@ name=name, ), prompt=True, - default=defaultdbenvkeys['secured'], + default=defaultdbenvkeys[dek.SECURED], ) if not secured: @@ -925,7 +942,7 @@ name=name, ), prompt=True, - default=defaultdbenvkeys['database'], + default=defaultdbenvkeys[dek.DATABASE], ) if user is None: @@ -937,7 +954,7 @@ name=name, ), prompt=True, - default=defaultdbenvkeys['user'], + default=defaultdbenvkeys[dek.USER], ) if password is None: @@ -953,13 +970,13 @@ ) dbenv = { - self._dbenvkeys['host']: host, - self._dbenvkeys['port']: port, - self._dbenvkeys['secured']: secured, - self._dbenvkeys['hostValidation']: securedHostValidation, - self._dbenvkeys['user']: user, - self._dbenvkeys['password']: password, - self._dbenvkeys['database']: db, + self._dbenvkeys[dek.HOST]: host, + self._dbenvkeys[dek.PORT]: port, + self._dbenvkeys[dek.SECURED]: secured, + self._dbenvkeys[dek.HOST_VALIDATION]: securedHostValidation, + self._dbenvkeys[dek.USER]: user, + self._dbenvkeys[dek.PASSWORD]: password, + self._dbenvkeys[dek.DATABASE]: db, } if interactive: @@ -983,12 +1000,12 @@ try: self.environment[ - self._dbenvkeys['newDatabase'] + self._dbenvkeys[dek.NEW_DATABASE] ] = self.isNewDatabase() except: self.logger.debug('database connection failed', exc_info=True) - if not self.environment[self._dbenvkeys['newDatabase']]: + if not self.environment[self._dbenvkeys[dek.NEW_DATABASE]]: self._checkDbConf(environment=dbenv, name=name) diff --git a/packaging/setup/ovirt_engine_setup/engine_common/postgres.py b/packaging/setup/ovirt_engine_setup/engine_common/postgres.py index 897c977..77ad64a 100644 --- a/packaging/setup/ovirt_engine_setup/engine_common/postgres.py +++ b/packaging/setup/ovirt_engine_setup/engine_common/postgres.py @@ -30,6 +30,7 @@ from ovirt_engine_setup import constants as osetupcons from ovirt_engine_setup import util as osetuputil from ovirt_engine_setup.engine_common import constants as oengcommcons +dek = oengcommcons.DBEnvKeysConst from ovirt_engine_setup.engine_common import database @@ -100,7 +101,7 @@ """, args=dict( database=self.environment[ - self._dbenvkeys['database'] + self._dbenvkeys[dek.DATABASE] ], ), ownConnection=True, @@ -114,7 +115,7 @@ """, args=dict( user=self.environment[ - self._dbenvkeys['user'] + self._dbenvkeys[dek.USER] ], ), ownConnection=True, @@ -132,7 +133,7 @@ ) if dbovirtutils.isNewDatabase( database=self.environment[ - self._dbenvkeys['database'] + self._dbenvkeys[dek.DATABASE] ], ): self.logger.debug('Found empty database') @@ -144,8 +145,8 @@ if generate: self.logger.debug('Existing resources found, generating names') suffix = '_%s' % datetime.datetime.now().strftime('%Y%m%d%H%M%S') - self.environment[self._dbenvkeys['database']] += suffix - self.environment[self._dbenvkeys['user']] += suffix + self.environment[self._dbenvkeys[dek.DATABASE]] += suffix + self.environment[self._dbenvkeys[dek.USER]] += suffix self._renamedDBResources = True return existing @@ -166,7 +167,7 @@ ).format( op=op, user=self.environment[ - self._dbenvkeys['user'] + self._dbenvkeys[dek.USER] ], ), @@ -180,10 +181,10 @@ op=op, to='to' if op == 'alter' else '', database=self.environment[ - self._dbenvkeys['database'] + self._dbenvkeys[dek.DATABASE] ], user=self.environment[ - self._dbenvkeys['user'] + self._dbenvkeys[dek.USER] ], encoding=""" template template0 @@ -203,7 +204,7 @@ statement=statement, args=dict( password=self.environment[ - self._dbenvkeys['password'] + self._dbenvkeys[dek.PASSWORD] ], ), ownConnection=True, @@ -328,10 +329,10 @@ ).format( host='host', user=self.environment[ - self._dbenvkeys['user'] + self._dbenvkeys[dek.USER] ], database=self.environment[ - self._dbenvkeys['database'] + self._dbenvkeys[dek.DATABASE] ], address=address, auth='md5', @@ -445,12 +446,12 @@ return ''.join([rand.choice(self._PASSWORD_CHARS) for i in range(22)]) def applyEnvironment(self): - for k in ('user', 'database', 'port', 'secured', 'hostValidation'): + for k in dek.DEFAULTS_KEYS: if self.environment[self._dbenvkeys[k]] is None: self.environment[self._dbenvkeys[k]] = self._defaults[k] - if self.environment[self._dbenvkeys['password']] is None: + if self.environment[self._dbenvkeys[dek.PASSWORD]] is None: self.environment[ - self._dbenvkeys['password'] + self._dbenvkeys[dek.PASSWORD] ] = self.generatePassword() def provision(self): @@ -466,7 +467,7 @@ self.logger.info( _("Creating PostgreSQL '{database}' database").format( - database=self.environment[self._dbenvkeys['database']], + database=self.environment[self._dbenvkeys[dek.DATABASE]], ) ) localtransaction = transaction.Transaction() @@ -485,13 +486,13 @@ ], ): usockenv = { - self._dbenvkeys['host']: '', # usock - self._dbenvkeys['port']: '', - self._dbenvkeys['secured']: False, - self._dbenvkeys['hostValidation']: False, - self._dbenvkeys['user']: 'postgres', - self._dbenvkeys['password']: '', - self._dbenvkeys['database']: 'template1', + self._dbenvkeys[dek.HOST]: '', # usock + self._dbenvkeys[dek.PORT]: '', + self._dbenvkeys[dek.SECURED]: False, + self._dbenvkeys[dek.HOST_VALIDATION]: False, + self._dbenvkeys[dek.USER]: 'postgres', + self._dbenvkeys[dek.PASSWORD]: '', + self._dbenvkeys[dek.DATABASE]: 'template1', } self._waitForDatabase( environment=usockenv, -- To view, visit https://gerrit.ovirt.org/39061 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I271b1c7c3682a3d0bcc69ae6ea6c9e717ed029d1 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yedidyah Bar David <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
