From fbd2f69df60a5740da6edde3c7dda2210b678915 Mon Sep 17 00:00:00 2001 From: xiaodongwang991481 Date: Thu, 28 Aug 2014 11:29:50 -0700 Subject: [PATCH] update api code to compatible with new ui (flavor support) Change-Id: I3e0cec3830482929d83c8b5cdb606f240a5daf2a --- compass/db/api/metadata_holder.py | 12 ++- compass/db/api/switch.py | 6 +- compass/db/models.py | 158 ++++++++++++++++++++---------- service/compass-celeryd | 12 +-- 4 files changed, 123 insertions(+), 65 deletions(-) diff --git a/compass/db/api/metadata_holder.py b/compass/db/api/metadata_holder.py index ec8fd0da..78f95f11 100644 --- a/compass/db/api/metadata_holder.py +++ b/compass/db/api/metadata_holder.py @@ -80,12 +80,16 @@ def _filter_metadata(metadata): 'name': value['name'], 'description': value.get('description', None), 'default_value': value.get('default_value', None), - 'is_required': value['is_required'], - 'required_in_whole_config': value['required_in_whole_config'], + 'is_required': value.get( + 'is_required', False), + 'required_in_whole_config': value.get( + 'required_in_whole_config', False), 'js_validator': value.get('js_validator', None), 'options': value.get('options', []), - 'required_in_options': value['required_in_options'], - 'field_type': value['field_type_data'], + 'required_in_options': value.get( + 'required_in_options', False), + 'field_type': value.get( + 'field_type_data', 'str'), 'display_type': value.get('display_type', None), 'mapping_to': value.get('mapping_to', None) } diff --git a/compass/db/api/switch.py b/compass/db/api/switch.py index d0b5b1f5..a3ea2fd0 100644 --- a/compass/db/api/switch.py +++ b/compass/db/api/switch.py @@ -79,12 +79,14 @@ RESP_ACTION_FIELDS = [ 'status', 'details' ] RESP_MACHINES_FIELDS = [ - 'id', 'switch_id', 'switch_ip', 'machine_id', 'port', 'vlans', 'mac', + 'id', 'switch_id', 'switch_ip', 'machine_id', 'switch_machine_id', + 'port', 'vlans', 'mac', 'ipmi_credentials', 'tag', 'location', 'created_at', 'updated_at' ] RESP_MACHINES_HOSTS_FIELDS = [ - 'id', 'switch_id', 'switch_ip', 'machine_id', 'port', 'vlans', 'mac', + 'id', 'switch_id', 'switch_ip', 'machine_id', 'switch_machine_id', + 'port', 'vlans', 'mac', 'ipmi_credentials', 'tag', 'location', 'name', 'os_name', 'clusters' ] diff --git a/compass/db/models.py b/compass/db/models.py index 0e58f2c1..2abe50a7 100644 --- a/compass/db/models.py +++ b/compass/db/models.py @@ -324,6 +324,26 @@ class StateMixin(TimestampMixin, HelperMixin): super(StateMixin, self).update() +class LogHistoryMixin(TimestampMixin, HelperMixin): + position = Column(Integer, default=0) + partial_line = Column(Text, default='') + percentage = Column(Float, default=0.0) + message = Column(Text, default='') + severity = Column( + Enum('ERROR', 'WARNING', 'INFO'), + ColumnDefault('INFO') + ) + line_matcher_name = Column( + String(80), default='start' + ) + + def validate(self): + if not self.filename: + raise exception.InvalidParameter( + 'filename is not set in %s' % self.id + ) + + class HostNetwork(BASE, TimestampMixin, HelperMixin): """Host network table.""" __tablename__ = 'host_network' @@ -399,6 +419,54 @@ class HostNetwork(BASE, TimestampMixin, HelperMixin): return dict_info +class ClusterHostLogHistory(BASE, LogHistoryMixin): + """clusterhost installing log history for each file. + """ + __tablename__ = 'clusterhost_log_history' + + clusterhost_id = Column( + 'id', Integer, + ForeignKey('clusterhost.id', onupdate='CASCADE', ondelete='CASCADE'), + primary_key=True + ) + filename = Column(String(80), primary_key=True) + cluster_id = Column( + Integer, + ForeignKey('cluster.id') + ) + host_id = Column( + Integer, + ForeignKey('host.id') + ) + + def __init__(self, clusterhost_id, filename, **kwargs): + self.clusterhost_id = clusterhost_id + self.filename = filename + super(ClusterHostLogHistory, self).__init__(**kwargs) + + def initialize(self): + self.cluster_id = self.clusterhost.cluster_id + self.host_id = self.clusterhost.host_id + super(ClusterHostLogHistory, self).initialize() + + +class HostLogHistory(BASE, LogHistoryMixin): + """host installing log history for each file. + """ + __tablename__ = 'host_log_history' + + id = Column( + Integer, + ForeignKey('host.id', onupdate='CASCADE', ondelete='CASCADE'), + primary_key=True) + filename = Column(String(80), primary_key=True) + + def __init__(self, id, filename, **kwargs): + self.id = id + self.filename = filename + super(HostLogHistory, self).__init__(**kwargs) + + class ClusterHostState(BASE, StateMixin): """ClusterHost state table.""" __tablename__ = 'clusterhost_state' @@ -442,12 +510,19 @@ class ClusterHost(BASE, TimestampMixin, HelperMixin): Integer, ForeignKey('host.id', onupdate='CASCADE', ondelete='CASCADE') ) - _roles = Column(JSONEncoded, default=[]) + _roles = Column('roles', JSONEncoded, default=[]) config_step = Column(String(80), default='') package_config = Column(JSONEncoded, default={}) config_validated = Column(Boolean, default=False) deployed_package_config = Column(JSONEncoded, default={}) + log_history = relationship( + ClusterHostLogHistory, + passive_deletes=True, passive_updates=True, + cascade='all, delete-orphan', + backref=backref('clusterhost') + ) + __table_args__ = ( UniqueConstraint('cluster_id', 'host_id', name='constraint'), ) @@ -485,7 +560,11 @@ class ClusterHost(BASE, TimestampMixin, HelperMixin): @patched_package_config.setter def patched_package_config(self, value): - self.package_config = util.merge_dict(dict(self.package_config), value) + package_config = util.merge_dict(dict(self.package_config), value) + if 'roles' in package_config: + self.patched_roles = package_config['roles'] + del package_config['roles'] + self.package_config = package_config self.config_validated = False @property @@ -496,6 +575,9 @@ class ClusterHost(BASE, TimestampMixin, HelperMixin): def put_package_config(self, value): package_config = dict(self.package_config) package_config.update(value) + if 'roles' in package_config: + self.roles = package_config['roles'] + del package_config['roles'] self.package_config = package_config self.config_validated = False @@ -717,6 +799,12 @@ class Host(BASE, TimestampMixin, HelperMixin): cascade='all, delete-orphan', backref=backref('host') ) + log_history = relationship( + HostLogHistory, + passive_deletes=True, passive_updates=True, + cascade='all, delete-orphan', + backref=backref('host') + ) @hybrid_property def mac(self): @@ -750,12 +838,11 @@ class Host(BASE, TimestampMixin, HelperMixin): def __init__(self, id, **kwargs): self.id = id + self.name = str(self.id) self.state = HostState() super(Host, self).__init__(**kwargs) def initialize(self): - if not self.name: - self.name = str(self.id) super(Host, self).initialize() def update(self): @@ -1307,8 +1394,8 @@ class User(BASE, HelperMixin, TimestampMixin): class SwitchMachine(BASE, HelperMixin, TimestampMixin): """Switch Machine table.""" __tablename__ = 'switch_machine' - id = Column( - Integer, primary_key=True + switch_machine_id = Column( + 'id', Integer, primary_key=True ) switch_id = Column( Integer, @@ -1724,6 +1811,12 @@ class OperatingSystem(BASE, HelperMixin): dict_info.update(self.parent.metadata_dict()) for metadata in self.root_metadatas: dict_info.update(metadata.to_dict()) + dict_info.setdefault( + '_self', { + 'name': 'root', + 'field_type_data': 'dict', + } + ) return dict_info @property @@ -2054,6 +2147,12 @@ class Adapter(BASE, HelperMixin): dict_info.update(self.parent.metadata_dict()) for metadata in self.root_metadatas: dict_info.update(metadata.to_dict()) + dict_info.setdefault( + '_self', { + 'name': 'root', + 'field_type_data': 'dict', + } + ) return dict_info @property @@ -2241,50 +2340,3 @@ class Subnet(BASE, TimestampMixin, HelperMixin): if not self.name: self.name = self.subnet super(Subnet, self).initialize() - - -class LogProgressingHistory(BASE, TimestampMixin, HelperMixin): - """host installing log history for each file. - - :param id: int, identity as primary key. - :param pathname: str, the full path of the installing log file. unique. - :param position: int, the position of the log file it has processed. - :param partial_line: str, partial line of the log. - :param progressing: float, indicate the installing progress between 0 to 1. - :param message: str, str, the installing message. - :param severity: Enum, the installing message severity. - ('ERROR', 'WARNING', 'INFO') - :param line_matcher_name: str, the line matcher name of the log processor. - """ - __tablename__ = 'log_progressing_history' - id = Column(Integer, primary_key=True) - - pathname = Column(String(80), unique=True) - position = Column(Integer, default=0) - partial_line = Column(Text, default='') - percentage = Column(Float, default=0.0) - message = Column(Text, default='') - severity = Column( - Enum('ERROR', 'WARNING', 'INFO'), - ColumnDefault('INFO') - ) - line_matcher_name = Column( - String(80), default='start' - ) - - def __init__(self, pathname, **kwargs): - self.pathname = pathname - super(LogProgressingHistory, self).__init__(**kwargs) - - def __repr__(self): - return ( - 'LogProgressingHistory[%r: position %r,' - 'partial_line %r,percentage %r,message %r,' - 'severity %r]' - ) % ( - self.pathname, self.position, - self.partial_line, - self.percentage, - self.message, - self.severity - ) diff --git a/service/compass-celeryd b/service/compass-celeryd index 12888109..7fefa7b1 100755 --- a/service/compass-celeryd +++ b/service/compass-celeryd @@ -54,14 +54,14 @@ start() { stop() { echo -n "Stopping Compass Celeryd: " if [ -f $SUSE ]; then - killproc -t 10 -p /var/run/celery-worker.pid $CELERY worker + killproc -t 10 -p /var/run/celery-worker.pid $CELERY rc_status -v RETVAL=$? elif [ -f $DEBIAN ]; then - killproc -p /var/run/celery-worker.pid $CELERY worker -TERM + killproc -p /var/run/celery-worker.pid $CELERY -TERM RETVAL=$? else - killproc -p /var/run/celery-worker.pid -d 30 $CELERY worker + killproc -p /var/run/celery-worker.pid -d 30 $CELERY RETVAL=$? fi echo @@ -78,12 +78,12 @@ case "$1" in status) echo -n "Checking compass celeryd: " if [ -f $SUSE ]; then - checkproc -v -p /var/run/celery-worker.pid $CELERY worker + checkproc -v -p /var/run/celery-worker.pid $CELERY rc_status -v elif [ -f $DEBIAN ]; then - status_of_proc -p /var/run/celery-worker.pid $CELERY worker + status_of_proc -p /var/run/celery-worker.pid $CELERY else - status -p /var/run/celery-worker.pid $CELERY worker + status -p /var/run/celery-worker.pid $CELERY echo fi ;;