def getCredentials( self, name, queryprefix, defaultdbenvkeys, show_create_msg=False, note=None, credsfile=None, ): interactive = None in ( _ind_env(self, DEK.HOST), _ind_env(self, DEK.PORT), _ind_env(self, DEK.DATABASE), _ind_env(self, DEK.USER), _ind_env(self, DEK.PASSWORD), ) if interactive: if note is None and credsfile: note = _( "\nPlease provide the following credentials for the " "{name} database.\nThey should be found on the {name} " "server in '{credsfile}'.\n\n").format( name=name, credsfile=credsfile, ) if note: self.dialog.note(text=note) if show_create_msg: self.dialog.note(text=_( "\n" "ATTENTION\n" "\n" "Manual action required.\n" "Please create database for ovirt-engine use. " "Use the following commands as an example:\n" "\n" "create role {user} with login encrypted password " "'{user}';\n" "create database {database} owner {user}\n" " template template0\n" " encoding 'UTF8' lc_collate 'en_US.UTF-8'\n" " lc_ctype 'en_US.UTF-8';\n" "\n" "Make sure that database can be accessed remotely.\n" "\n").format( user=defaultdbenvkeys[DEK.USER], database=defaultdbenvkeys[DEK.DATABASE], ), ) connectionValid = False while not connectionValid: dbenv = {} for k in ( DEK.HOST, DEK.PORT, DEK.SECURED, DEK.HOST_VALIDATION, DEK.DATABASE, DEK.USER, DEK.PASSWORD, ): dbenv[self._dbenvkeys[k]] = _ind_env(self, k) def query_dbenv(what, note, tests=None, **kwargs): dialog.queryEnvKey(name='{qpref}{what}'.format( qpref=queryprefix, what=string.upper(what), ), dialog=self.dialog, logger=self.logger, env=dbenv, key=self._dbenvkeys[what], note=note.format(name=name, ), prompt=True, default=defaultdbenvkeys[what], tests=tests, **kwargs) query_dbenv( what=DEK.HOST, note=_('{name} database host [@DEFAULT@]: '), tests=({ 'test': osetuphostname.Hostname( self._plugin, ).getHostnameTester(), }, ), ) query_dbenv( what=DEK.PORT, note=_('{name} database port [@DEFAULT@]: '), tests=({ 'test': osetuputil.getPortTester() }, ), ) if dbenv[self._dbenvkeys[DEK.SECURED]] is None: dbenv[self._dbenvkeys[DEK.SECURED]] = dialog.queryBoolean( dialog=self.dialog, name='{qpref}SECURED'.format(qpref=queryprefix), note=_('{name} database secured connection (@VALUES@) ' '[@DEFAULT@]: ').format(name=name, ), prompt=True, default=defaultdbenvkeys[DEK.SECURED], ) if not dbenv[self._dbenvkeys[DEK.SECURED]]: dbenv[self._dbenvkeys[DEK.HOST_VALIDATION]] = False if dbenv[self._dbenvkeys[DEK.HOST_VALIDATION]] is None: dbenv[self._dbenvkeys[ DEK.HOST_VALIDATION]] = dialog.queryBoolean( dialog=self.dialog, name='{qpref}SECURED_HOST_VALIDATION'.format( qpref=queryprefix), note=_( '{name} database host name validation in secured ' 'connection (@VALUES@) [@DEFAULT@]: ').format( name=name, ), prompt=True, default=True, ) == 'yes' query_dbenv( what=DEK.DATABASE, note=_('{name} database name [@DEFAULT@]: '), ) query_dbenv( what=DEK.USER, note=_('{name} database user [@DEFAULT@]: '), ) query_dbenv( what=DEK.PASSWORD, note=_('{name} database password: '******'dbenv: %s', dbenv) if interactive: try: self.tryDatabaseConnect(dbenv) self._checkDbConf(environment=dbenv, name=name) self.environment.update(dbenv) connectionValid = True except RuntimeError as e: self.logger.error( _('Cannot connect to {name} database: {error}').format( name=name, error=e, )) else: # this is usally reached in provisioning # or if full ansewr file self.environment.update(dbenv) connectionValid = True try: self.environment[self._dbenvkeys[ DEK.NEW_DATABASE]] = self.isNewDatabase() except: self.logger.debug('database connection failed', exc_info=True) if not _ind_env(self, DEK.NEW_DATABASE): self._checkDbConf(environment=dbenv, name=name)
def getCredentials( self, name, queryprefix, defaultdbenvkeys, show_create_msg=False, note=None, credsfile=None, ): interactive = None in ( _ind_env(self, DEK.HOST), _ind_env(self, DEK.PORT), _ind_env(self, DEK.DATABASE), _ind_env(self, DEK.USER), _ind_env(self, DEK.PASSWORD), ) if interactive: if note is None and credsfile: note = _( "\nPlease provide the following credentials for the " "{name} database.\nThey should be found on the {name} " "server in '{credsfile}'.\n\n" ).format( name=name, credsfile=credsfile, ) if note: self.dialog.note(text=note) if show_create_msg: self.dialog.note( text=_( "\n" "ATTENTION\n" "\n" "Manual action required.\n" "Please create database for ovirt-engine use. " "Use the following commands as an example:\n" "\n" "create role {user} with login encrypted password " "'{user}';\n" "create database {database} owner {user}\n" " template template0\n" " encoding 'UTF8' lc_collate 'en_US.UTF-8'\n" " lc_ctype 'en_US.UTF-8';\n" "\n" "Make sure that database can be accessed remotely.\n" "\n" ).format( user=defaultdbenvkeys[DEK.USER], database=defaultdbenvkeys[DEK.DATABASE], ), ) connectionValid = False while not connectionValid: dbenv = {} for k in ( DEK.HOST, DEK.PORT, DEK.SECURED, DEK.HOST_VALIDATION, DEK.DATABASE, DEK.USER, DEK.PASSWORD, ): dbenv[self._dbenvkeys[k]] = _ind_env(self, k) def query_dbenv( what, note, tests=None, **kwargs ): dialog.queryEnvKey( name='{qpref}{what}'.format( qpref=queryprefix, what=string.upper(what), ), dialog=self.dialog, logger=self.logger, env=dbenv, key=self._dbenvkeys[what], note=note.format( name=name, ), prompt=True, default=defaultdbenvkeys[what], tests=tests, **kwargs ) query_dbenv( what=DEK.HOST, note=_('{name} database host [@DEFAULT@]: '), tests=( { 'test': osetuphostname.Hostname( self._plugin, ).getHostnameTester(), }, ), ) query_dbenv( what=DEK.PORT, note=_('{name} database port [@DEFAULT@]: '), tests=({'test': osetuputil.getPortTester()},), ) if dbenv[self._dbenvkeys[DEK.SECURED]] is None: dbenv[self._dbenvkeys[DEK.SECURED]] = dialog.queryBoolean( dialog=self.dialog, name='{qpref}SECURED'.format(qpref=queryprefix), note=_( '{name} database secured connection (@VALUES@) ' '[@DEFAULT@]: ' ).format( name=name, ), prompt=True, default=defaultdbenvkeys[DEK.SECURED], ) if not dbenv[self._dbenvkeys[DEK.SECURED]]: dbenv[self._dbenvkeys[DEK.HOST_VALIDATION]] = False if dbenv[self._dbenvkeys[DEK.HOST_VALIDATION]] is None: dbenv[ self._dbenvkeys[DEK.HOST_VALIDATION] ] = dialog.queryBoolean( dialog=self.dialog, name='{qpref}SECURED_HOST_VALIDATION'.format( qpref=queryprefix ), note=_( '{name} database host name validation in secured ' 'connection (@VALUES@) [@DEFAULT@]: ' ).format( name=name, ), prompt=True, default=True, ) == 'yes' query_dbenv( what=DEK.DATABASE, note=_('{name} database name [@DEFAULT@]: '), ) query_dbenv( what=DEK.USER, note=_('{name} database user [@DEFAULT@]: '), ) query_dbenv( what=DEK.PASSWORD, note=_('{name} database password: '******'dbenv: %s', dbenv) if interactive: try: self.tryDatabaseConnect(dbenv) self._checkDbConf(environment=dbenv, name=name) self.environment.update(dbenv) connectionValid = True except RuntimeError as e: self.logger.error( _('Cannot connect to {name} database: {error}').format( name=name, error=e, ) ) else: # this is usally reached in provisioning # or if full ansewr file self.environment.update(dbenv) connectionValid = True try: self.environment[ self._dbenvkeys[DEK.NEW_DATABASE] ] = self.isNewDatabase() except: self.logger.debug('database connection failed', exc_info=True) if not _ind_env(self, DEK.NEW_DATABASE): self._checkDbConf(environment=dbenv, name=name)