コード例 #1
0
 def delete_database(self, database):
     """Delete the specified database"""
     client = LocalSqlClient(get_engine())
     with client:
         mydb = models.MySQLDatabase()
         mydb.deserialize(database)
         t = text("""DROP DATABASE `%s`;""" % mydb.name)
         client.execute(t)
コード例 #2
0
 def delete_database(self, database):
     """Delete the specified database"""
     with LocalSqlClient(get_engine()) as client:
         mydb = models.MySQLDatabase()
         mydb.deserialize(database)
         dd = query.DropDatabase(mydb.name)
         t = text(str(dd))
         client.execute(t)
コード例 #3
0
 def create_database(self, databases):
     """Create the list of specified databases"""
     with LocalSqlClient(get_engine()) as client:
         for item in databases:
             mydb = models.MySQLDatabase()
             mydb.deserialize(item)
             cd = query.CreateDatabase(mydb.name, mydb.character_set,
                                       mydb.collate)
             t = text(str(cd))
             client.execute(t)
コード例 #4
0
 def delete(self, req, tenant_id, instance_id, id):
     LOG.info(_("Deleting schema for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     try:
         schema = guest_models.MySQLDatabase()
         schema.name = id
         models.Schema.delete(context, instance_id, schema.serialize())
     except (ValueError, AttributeError) as e:
         raise exception.BadRequest(msg=e)
     return wsgi.Result(None, 202)
コード例 #5
0
 def create_database(self, databases):
     """Create the list of specified databases"""
     client = LocalSqlClient(get_engine())
     with client:
         for item in databases:
             mydb = models.MySQLDatabase()
             mydb.deserialize(item)
             t = text("""CREATE DATABASE IF NOT EXISTS
                         `%s` CHARACTER SET = %s COLLATE = %s;""" %
                      (mydb.name, mydb.character_set, mydb.collate))
             client.execute(t)
コード例 #6
0
ファイル: models.py プロジェクト: tanisdeluna/reddwarf
 def load_with_client(cls, client, limit, marker, include_marker):
     schemas, next_marker = client.list_databases(
         limit=limit, marker=marker, include_marker=include_marker)
     model_schemas = []
     ignore_dbs = CONF.ignore_dbs
     for schema in schemas:
         mysql_schema = guest_models.MySQLDatabase()
         mysql_schema.deserialize(schema)
         if mysql_schema.name in ignore_dbs:
             continue
         model_schemas.append(
             Schema(mysql_schema.name, mysql_schema.collate,
                    mysql_schema.character_set))
     return model_schemas, next_marker
コード例 #7
0
    def list_users(self, limit=None, marker=None, include_marker=False):
        """List users that have access to the database"""
        LOG.debug(_("---Listing Users---"))
        users = []
        client = LocalSqlClient(get_engine())
        with client:
            mysql_user = models.MySQLUser()
            q = Query()
            q.columns = ['User']
            q.tables = ['mysql.user']
            q.where = ["host != 'localhost'"]
            q.order = ['User']
            if marker:
                q.where.append(
                    "User %s '%s'" %
                    (INCLUDE_MARKER_OPERATORS[include_marker], marker))
            if limit:
                q.limit = limit + 1
            t = text(str(q))
            result = client.execute(t)
            next_marker = None
            LOG.debug("result = " + str(result))
            for count, row in enumerate(result):
                if count >= limit:
                    break
                LOG.debug("user = "******"^'(.+)'@", db['grantee'])
                    if (matches is not None
                            and matches.group(1) == mysql_user.name):
                        mysql_db = models.MySQLDatabase()
                        mysql_db.name = db['table_schema']
                        mysql_user.databases.append(mysql_db.serialize())
                users.append(mysql_user.serialize())
        if result.rowcount <= limit:
            next_marker = None
        LOG.debug("users = " + str(users))

        return users, next_marker
コード例 #8
0
 def list_databases(self, limit=None, marker=None, include_marker=False):
     """List databases the user created on this mysql instance"""
     LOG.debug(_("---Listing Databases---"))
     databases = []
     client = LocalSqlClient(get_engine())
     with client:
         # If you have an external volume mounted at /var/lib/mysql
         # the lost+found directory will show up in mysql as a database
         # which will create errors if you try to do any database ops
         # on it.  So we remove it here if it exists.
         q = Query()
         q.columns = [
             'schema_name as name',
             'default_character_set_name as charset',
             'default_collation_name as collation',
         ]
         q.tables = ['information_schema.schemata']
         q.where = [
             '''schema_name not in (
                         'mysql', 'information_schema',
                         'lost+found', '#mysql50#lost+found'
                     )'''
         ]
         q.order = ['schema_name ASC']
         if limit:
             q.limit = limit + 1
         if marker:
             q.where.append(
                 "schema_name %s '%s'" %
                 (INCLUDE_MARKER_OPERATORS[include_marker], marker))
         t = text(str(q))
         database_names = client.execute(t)
         next_marker = None
         LOG.debug(_("database_names = %r") % database_names)
         for count, database in enumerate(database_names):
             if count >= limit:
                 break
             LOG.debug(_("database = %s ") % str(database))
             mysql_db = models.MySQLDatabase()
             mysql_db.name = database[0]
             next_marker = mysql_db.name
             mysql_db.character_set = database[1]
             mysql_db.collate = database[2]
             databases.append(mysql_db.serialize())
     LOG.debug(_("databases = ") + str(databases))
     if database_names.rowcount <= limit:
         next_marker = None
     return databases, next_marker
コード例 #9
0
def populate_databases(dbs):
    """
    Create a serializable request with user provided data
    for creating new databases.
    """
    try:
        databases = []
        for database in dbs:
            mydb = guest_models.MySQLDatabase()
            mydb.name = database.get('name', '')
            mydb.character_set = database.get('character_set', '')
            mydb.collate = database.get('collate', '')
            databases.append(mydb.serialize())
        return databases
    except ValueError as ve:
        raise exception.BadRequest(str(ve))
コード例 #10
0
 def _associate_dbs(self, user):
     """Internal. Given a MySQLUser, populate its databases attribute."""
     LOG.debug("Associating dbs to user %s at %s" % (user.name, user.host))
     with LocalSqlClient(get_engine()) as client:
         q = query.Query()
         q.columns = ["grantee", "table_schema"]
         q.tables = ["information_schema.SCHEMA_PRIVILEGES"]
         q.group = ["grantee", "table_schema"]
         q.where = ["privilege_type != 'USAGE'"]
         t = text(str(q))
         db_result = client.execute(t)
         for db in db_result:
             LOG.debug("\t db: %s" % db)
             if db['grantee'] == "'%s'@'%s'" % (user.name, user.host):
                 mysql_db = models.MySQLDatabase()
                 mysql_db.name = db['table_schema']
                 user.databases.append(mysql_db.serialize())
コード例 #11
0
 def create_user(self, users):
     """Create users and grant them privileges for the
        specified databases"""
     host = "%"
     client = LocalSqlClient(get_engine())
     with client:
         for item in users:
             user = models.MySQLUser()
             user.deserialize(item)
             # TODO(cp16net):Should users be allowed to create users
             # 'os_admin' or 'debian-sys-maint'
             t = text("""GRANT USAGE ON *.* TO '%s'@\"%s\"
                         IDENTIFIED BY '%s';""" %
                      (user.name, host, user.password))
             client.execute(t)
             for database in user.databases:
                 mydb = models.MySQLDatabase()
                 mydb.deserialize(database)
                 t = text("""
                          GRANT ALL PRIVILEGES ON `%s`.* TO `%s`@:host;
                          """ % (mydb.name, user.name))
                 client.execute(t, host=host)
コード例 #12
0
 def create_user(self, users):
     """Create users and grant them privileges for the
        specified databases"""
     with LocalSqlClient(get_engine()) as client:
         for item in users:
             user = models.MySQLUser()
             user.deserialize(item)
             # TODO(cp16net):Should users be allowed to create users
             # 'os_admin' or 'debian-sys-maint'
             g = query.Grant(user=user.name,
                             host=user.host,
                             clear=user.password)
             t = text(str(g))
             client.execute(t)
             for database in user.databases:
                 mydb = models.MySQLDatabase()
                 mydb.deserialize(database)
                 g = query.Grant(permissions='ALL',
                                 database=mydb.name,
                                 user=user.name,
                                 host=user.host,
                                 clear=user.password)
                 t = text(str(g))
                 client.execute(t)
コード例 #13
0
ファイル: test_dbmodels.py プロジェクト: jeredding/reddwarf
    def setUp(self):
        super(MySQLDatabaseTest, self).setUp()

        self.mysqlDb = dbmodels.MySQLDatabase()
        self.origin_ignore_db = self.mysqlDb._ignore_dbs
        self.mysqlDb._ignore_dbs = ['mysql']