Revisions to cluster/node db model

This patch adds 'user' and 'domain' properties to node objects so that
they can be created with needed identity information. These identity
information will later be used to authenticate with keystone when the
physical resources are to be operated, i.e. created/update/delete.

This patch also makes the 'user', 'project', 'domain' fields fit the
current data models we get from keystone. Each of these entities has an
ID field of 32 bytes, instead of 36 bytes. For nodes or clusters, the
'user' and 'project' fields cannot be NULL.

Change-Id: If7fb248d6430bc0d499d45589fd99923b200d25e
This commit is contained in:
tengqm 2015-04-18 21:35:35 -04:00
parent 3d78f4a358
commit 052af1eb05
4 changed files with 45 additions and 22 deletions

View File

@ -45,8 +45,8 @@ def upgrade(migrate_engine):
sqlalchemy.Column('profile_id', sqlalchemy.String(36), sqlalchemy.Column('profile_id', sqlalchemy.String(36),
sqlalchemy.ForeignKey('profile.id'), sqlalchemy.ForeignKey('profile.id'),
nullable=False), nullable=False),
sqlalchemy.Column('user', sqlalchemy.String(36)), sqlalchemy.Column('user', sqlalchemy.String(32), nullable=False),
sqlalchemy.Column('project', sqlalchemy.String(36)), sqlalchemy.Column('project', sqlalchemy.String(32), nullable=False),
sqlalchemy.Column('domain', sqlalchemy.String(36)), sqlalchemy.Column('domain', sqlalchemy.String(36)),
sqlalchemy.Column('parent', sqlalchemy.String(36)), sqlalchemy.Column('parent', sqlalchemy.String(36)),
sqlalchemy.Column('init_time', sqlalchemy.DateTime), sqlalchemy.Column('init_time', sqlalchemy.DateTime),
@ -75,7 +75,9 @@ def upgrade(migrate_engine):
sqlalchemy.Column('profile_id', sqlalchemy.String(36), sqlalchemy.Column('profile_id', sqlalchemy.String(36),
sqlalchemy.ForeignKey('profile.id'), sqlalchemy.ForeignKey('profile.id'),
nullable=False), nullable=False),
sqlalchemy.Column('project', sqlalchemy.String(36)), sqlalchemy.Column('user', sqlalchemy.String(32)),
sqlalchemy.Column('project', sqlalchemy.String(32)),
sqlalchemy.Column('domain', sqlalchemy.String(32)),
sqlalchemy.Column('index', sqlalchemy.Integer), sqlalchemy.Column('index', sqlalchemy.Integer),
sqlalchemy.Column('role', sqlalchemy.String(64)), sqlalchemy.Column('role', sqlalchemy.String(64)),
sqlalchemy.Column('init_time', sqlalchemy.DateTime), sqlalchemy.Column('init_time', sqlalchemy.DateTime),
@ -151,9 +153,9 @@ def upgrade(migrate_engine):
sqlalchemy.Column('id', sqlalchemy.String(36), primary_key=True, sqlalchemy.Column('id', sqlalchemy.String(36), primary_key=True,
nullable=False), nullable=False),
sqlalchemy.Column('name', sqlalchemy.String(255)), sqlalchemy.Column('name', sqlalchemy.String(255)),
sqlalchemy.Column('user', sqlalchemy.String(36)), sqlalchemy.Column('user', sqlalchemy.String(32)),
sqlalchemy.Column('project', sqlalchemy.String(36)), sqlalchemy.Column('project', sqlalchemy.String(32)),
sqlalchemy.Column('domain', sqlalchemy.String(36)), sqlalchemy.Column('domain', sqlalchemy.String(32)),
sqlalchemy.Column('created_time', sqlalchemy.DateTime), sqlalchemy.Column('created_time', sqlalchemy.DateTime),
sqlalchemy.Column('deleted_time', sqlalchemy.DateTime), sqlalchemy.Column('deleted_time', sqlalchemy.DateTime),
sqlalchemy.Column('obj_id', sqlalchemy.String(36), nullable=False), sqlalchemy.Column('obj_id', sqlalchemy.String(36), nullable=False),
@ -167,9 +169,9 @@ def upgrade(migrate_engine):
credential = sqlalchemy.Table( credential = sqlalchemy.Table(
'credential', meta, 'credential', meta,
sqlalchemy.Column('user', sqlalchemy.String(36), primary_key=True, sqlalchemy.Column('user', sqlalchemy.String(32), primary_key=True,
nullable=False), nullable=False),
sqlalchemy.Column('project', sqlalchemy.String(36), primary_key=True, sqlalchemy.Column('project', sqlalchemy.String(32), primary_key=True,
nullable=False), nullable=False),
sqlalchemy.Column('cred', types.Dict, nullable=False), sqlalchemy.Column('cred', types.Dict, nullable=False),
sqlalchemy.Column('data', types.Dict), sqlalchemy.Column('data', types.Dict),
@ -216,8 +218,8 @@ def upgrade(migrate_engine):
sqlalchemy.Column('obj_type', sqlalchemy.String(36)), sqlalchemy.Column('obj_type', sqlalchemy.String(36)),
sqlalchemy.Column('cluster_id', sqlalchemy.String(36)), sqlalchemy.Column('cluster_id', sqlalchemy.String(36)),
sqlalchemy.Column('level', sqlalchemy.String(63)), sqlalchemy.Column('level', sqlalchemy.String(63)),
sqlalchemy.Column('user', sqlalchemy.String(36)), sqlalchemy.Column('user', sqlalchemy.String(32)),
sqlalchemy.Column('project', sqlalchemy.String(36)), sqlalchemy.Column('project', sqlalchemy.String(32)),
sqlalchemy.Column('action', sqlalchemy.String(36)), sqlalchemy.Column('action', sqlalchemy.String(36)),
sqlalchemy.Column('status', sqlalchemy.String(255)), sqlalchemy.Column('status', sqlalchemy.String(255)),
sqlalchemy.Column('status_reason', sqlalchemy.String(255)), sqlalchemy.Column('status_reason', sqlalchemy.String(255)),

View File

@ -93,9 +93,9 @@ class Cluster(BASE, SenlinBase, SoftDelete):
profile_id = sqlalchemy.Column(sqlalchemy.String(36), profile_id = sqlalchemy.Column(sqlalchemy.String(36),
sqlalchemy.ForeignKey('profile.id'), sqlalchemy.ForeignKey('profile.id'),
nullable=False) nullable=False)
user = sqlalchemy.Column(sqlalchemy.String(36)) user = sqlalchemy.Column(sqlalchemy.String(32), nullable=False)
domain = sqlalchemy.Column(sqlalchemy.String(36)) project = sqlalchemy.Column(sqlalchemy.String(32), nullable=False)
project = sqlalchemy.Column(sqlalchemy.String(36)) domain = sqlalchemy.Column(sqlalchemy.String(32))
parent = sqlalchemy.Column(sqlalchemy.String(36)) parent = sqlalchemy.Column(sqlalchemy.String(36))
init_time = sqlalchemy.Column(sqlalchemy.DateTime) init_time = sqlalchemy.Column(sqlalchemy.DateTime)
@ -126,7 +126,9 @@ class Node(BASE, SenlinBase, SoftDelete):
sqlalchemy.ForeignKey('cluster.id')) sqlalchemy.ForeignKey('cluster.id'))
profile_id = sqlalchemy.Column(sqlalchemy.String(36), profile_id = sqlalchemy.Column(sqlalchemy.String(36),
sqlalchemy.ForeignKey('profile.id')) sqlalchemy.ForeignKey('profile.id'))
project = sqlalchemy.Column(sqlalchemy.String(36)) user = sqlalchemy.Column(sqlalchemy.String(32), nullable=False)
project = sqlalchemy.Column(sqlalchemy.String(32), nullable=False)
domain = sqlalchemy.Column(sqlalchemy.String(32))
index = sqlalchemy.Column(sqlalchemy.Integer) index = sqlalchemy.Column(sqlalchemy.Integer)
role = sqlalchemy.Column(sqlalchemy.String(64)) role = sqlalchemy.Column(sqlalchemy.String(64))
@ -236,9 +238,9 @@ class Webhook(BASE, SenlinBase, SoftDelete):
id = sqlalchemy.Column('id', sqlalchemy.String(36), primary_key=True, id = sqlalchemy.Column('id', sqlalchemy.String(36), primary_key=True,
default=lambda: str(uuid.uuid4())) default=lambda: str(uuid.uuid4()))
name = sqlalchemy.Column('name', sqlalchemy.String(255)) name = sqlalchemy.Column('name', sqlalchemy.String(255))
user = sqlalchemy.Column(sqlalchemy.String(36)) user = sqlalchemy.Column(sqlalchemy.String(32))
domain = sqlalchemy.Column(sqlalchemy.String(36)) domain = sqlalchemy.Column(sqlalchemy.String(32))
project = sqlalchemy.Column(sqlalchemy.String(36)) project = sqlalchemy.Column(sqlalchemy.String(32))
created_time = sqlalchemy.Column(sqlalchemy.DateTime) created_time = sqlalchemy.Column(sqlalchemy.DateTime)
deleted_time = sqlalchemy.Column(sqlalchemy.DateTime) deleted_time = sqlalchemy.Column(sqlalchemy.DateTime)
@ -255,7 +257,7 @@ class Credential(BASE, SenlinBase):
__tablename__ = 'credential' __tablename__ = 'credential'
user = sqlalchemy.Column(sqlalchemy.String(36), primary_key=True, user = sqlalchemy.Column(sqlalchemy.String(32), primary_key=True,
nullable=False) nullable=False)
project = sqlalchemy.Column(sqlalchemy.String(32), primary_key=True, project = sqlalchemy.Column(sqlalchemy.String(32), primary_key=True,
nullable=False) nullable=False)
@ -310,8 +312,8 @@ class Event(BASE, SenlinBase, SoftDelete):
nullable=True) nullable=True)
cluster = relationship(Cluster, backref=backref('events')) cluster = relationship(Cluster, backref=backref('events'))
level = sqlalchemy.Column(sqlalchemy.String(64)) level = sqlalchemy.Column(sqlalchemy.String(64))
user = sqlalchemy.Column(sqlalchemy.String(36)) user = sqlalchemy.Column(sqlalchemy.String(32))
project = sqlalchemy.Column(sqlalchemy.String(36)) project = sqlalchemy.Column(sqlalchemy.String(32))
action = sqlalchemy.Column(sqlalchemy.String(36)) action = sqlalchemy.Column(sqlalchemy.String(36))
status = sqlalchemy.Column(sqlalchemy.String(255)) status = sqlalchemy.Column(sqlalchemy.String(255))
status_reason = sqlalchemy.Column(sqlalchemy.String(255)) status_reason = sqlalchemy.Column(sqlalchemy.String(255))

View File

@ -87,6 +87,12 @@ class Cluster(periodic_task.PeriodicTasks):
self.rt = {} self.rt = {}
if context is not None: if context is not None:
if self.user == '':
self.user = context.user
if self.project == '':
self.project = context.project
if self.domain == '':
self.domain = context.domain
self._load_runtime_data(context) self._load_runtime_data(context)
def _load_runtime_data(self, context): def _load_runtime_data(self, context):

View File

@ -51,7 +51,9 @@ class Node(object):
self.physical_id = kwargs.get('physical_id', '') self.physical_id = kwargs.get('physical_id', '')
self.profile_id = profile_id self.profile_id = profile_id
self.project = kwargs.get('project', None) self.user = kwargs.get('user', '')
self.project = kwargs.get('project', '')
self.domain = kwargs.get('domain', '')
self.cluster_id = cluster_id self.cluster_id = cluster_id
self.index = kwargs.get('index', -1) self.index = kwargs.get('index', -1)
self.role = kwargs.get('role', '') self.role = kwargs.get('role', '')
@ -68,7 +70,12 @@ class Node(object):
self.rt = {} self.rt = {}
if context is not None: if context is not None:
self.project = context.project if self.user == '':
self.user = context.user
if self.project == '':
self.project = context.project
if self.domain == '':
self.domain = context.domain
self._load_runtime_data(context) self._load_runtime_data(context)
def _load_runtime_data(self, context): def _load_runtime_data(self, context):
@ -88,7 +95,9 @@ class Node(object):
'physical_id': self.physical_id, 'physical_id': self.physical_id,
'cluster_id': self.cluster_id, 'cluster_id': self.cluster_id,
'profile_id': self.profile_id, 'profile_id': self.profile_id,
'user': self.user,
'project': self.project, 'project': self.project,
'domain': self.domain,
'index': self.index, 'index': self.index,
'role': self.role, 'role': self.role,
'init_time': self.init_time, 'init_time': self.init_time,
@ -125,7 +134,9 @@ class Node(object):
kwargs = { kwargs = {
'id': record.id, 'id': record.id,
'physical_id': record.physical_id, 'physical_id': record.physical_id,
'user': record.user,
'project': record.project, 'project': record.project,
'domain': record.domain,
'index': record.index, 'index': record.index,
'role': record.role, 'role': record.role,
'init_time': record.init_time, 'init_time': record.init_time,
@ -173,7 +184,9 @@ class Node(object):
'cluster_id': self.cluster_id, 'cluster_id': self.cluster_id,
'physical_id': self.physical_id, 'physical_id': self.physical_id,
'profile_id': self.profile_id, 'profile_id': self.profile_id,
'user': self.user,
'project': self.project, 'project': self.project,
'domain': self.domain,
'index': self.index, 'index': self.index,
'role': self.role, 'role': self.role,
'init_time': self.init_time, 'init_time': self.init_time,