diff options
author | Gary Kotton <gkotton@redhat.com> | 2013-05-09 13:42:44 +0000 |
---|---|---|
committer | Gary Kotton <gkotton@redhat.com> | 2013-06-11 08:50:50 +0000 |
commit | 501ff418df4c08e52a697772200aa08dd67a4a43 (patch) | |
tree | 983c4e5fcf3015d880f7c974a933cfd75e3bd2ec /nova/db/sqlalchemy/models.py | |
parent | a79eea05db0e907c3f942fd8380f238aa34b8f2b (diff) | |
download | nova-501ff418df4c08e52a697772200aa08dd67a4a43.tar.gz nova-501ff418df4c08e52a697772200aa08dd67a4a43.tar.xz nova-501ff418df4c08e52a697772200aa08dd67a4a43.zip |
Nova instance group DB support
DB support for blueprint instance-group-api-extension
Change-Id: I615af9826ef61fd63d4cd8017908f943969bf177
Diffstat (limited to 'nova/db/sqlalchemy/models.py')
-rw-r--r-- | nova/db/sqlalchemy/models.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/nova/db/sqlalchemy/models.py b/nova/db/sqlalchemy/models.py index 386fcbdad..28fe36a0d 100644 --- a/nova/db/sqlalchemy/models.py +++ b/nova/db/sqlalchemy/models.py @@ -1039,3 +1039,72 @@ class TaskLog(BASE, NovaBase): message = Column(String(255), nullable=False) task_items = Column(Integer(), default=0) errors = Column(Integer(), default=0) + + +class InstanceGroupMember(BASE, NovaBase): + """Represents the members for an instance group.""" + __tablename__ = 'instance_group_member' + id = Column(Integer, primary_key=True, nullable=False) + instance_id = Column(String(255), nullable=False) + group_id = Column(Integer, ForeignKey('instance_groups.id'), + nullable=False) + + +class InstanceGroupPolicy(BASE, NovaBase): + """Represents the policy type for an instance group.""" + __tablename__ = 'instance_group_policy' + id = Column(Integer, primary_key=True, nullable=False) + policy = Column(String(255), nullable=False) + group_id = Column(Integer, ForeignKey('instance_groups.id'), + nullable=False) + + +class InstanceGroupMetadata(BASE, NovaBase): + """Represents a key/value pair for an instance group.""" + __tablename__ = 'instance_group_metadata' + id = Column(Integer, primary_key=True, nullable=False) + key = Column(String(255), nullable=False) + value = Column(String(255), nullable=False) + group_id = Column(Integer, ForeignKey('instance_groups.id'), + nullable=False) + + +class InstanceGroup(BASE, NovaBase): + """Represents an instance group. + + A group will maintain a collection of instances and the relationship + between them. + """ + + __tablename__ = 'instance_groups' + __table_args__ = (schema.UniqueConstraint("uuid", "deleted"), ) + + id = Column(Integer, primary_key=True, autoincrement=True) + user_id = Column(String(255)) + project_id = Column(String(255)) + uuid = Column(String(36), nullable=False) + name = Column(String(255)) + _policies = relationship(InstanceGroupPolicy, primaryjoin='and_(' + 'InstanceGroup.id == InstanceGroupPolicy.group_id,' + 'InstanceGroupPolicy.deleted == 0,' + 'InstanceGroup.deleted == 0)') + _metadata = relationship(InstanceGroupMetadata, primaryjoin='and_(' + 'InstanceGroup.id == InstanceGroupMetadata.group_id,' + 'InstanceGroupMetadata.deleted == 0,' + 'InstanceGroup.deleted == 0)') + _members = relationship(InstanceGroupMember, primaryjoin='and_(' + 'InstanceGroup.id == InstanceGroupMember.group_id,' + 'InstanceGroupMember.deleted == 0,' + 'InstanceGroup.deleted == 0)') + + @property + def policies(self): + return [p.policy for p in self._policies] + + @property + def metadetails(self): + return dict((m.key, m.value) for m in self._metadata) + + @property + def members(self): + return [m.instance_id for m in self._members] |