From 70778da3d0321f17b52db2efa80d16caed512085 Mon Sep 17 00:00:00 2001 From: xiaodongwang Date: Fri, 8 Aug 2014 09:19:31 -0700 Subject: [PATCH] update code Change-Id: Ia54bf3c0b3780e96a1b5bf4c6585855e3517f962 --- compass/db/api/adapter_holder.py | 1 + compass/db/api/cluster.py | 8 +++--- compass/db/api/metadata_holder.py | 1 + compass/db/api/utils.py | 4 +-- compass/db/models.py | 20 ++++++++----- compass/log_analyzor/adapter_matcher.py | 8 ++---- compass/tests/db/api/test_permission.py | 15 ++++++++-- compass/tests/db/api/test_user.py | 21 ++++++++++---- compass/tests/db/api/test_user_log.py | 14 +++++++-- compass/tests/db/api/test_utils.py | 4 +-- compass/utils/setting_wrapper.py | 2 +- conf/os_metadata/general.conf | 38 ++++++++++++++----------- install/compass.sh | 5 ++++ 13 files changed, 90 insertions(+), 51 deletions(-) diff --git a/compass/db/api/adapter_holder.py b/compass/db/api/adapter_holder.py index 08cc6643..91039276 100644 --- a/compass/db/api/adapter_holder.py +++ b/compass/db/api/adapter_holder.py @@ -30,6 +30,7 @@ SUPPORTED_FIELDS = [ RESP_FIELDS = [ 'id', 'name', 'roles', 'os_installer', 'package_installer', + 'distributed_system_id', 'distributed_system_name', 'supported_oses', 'display_name' ] diff --git a/compass/db/api/cluster.py b/compass/db/api/cluster.py index 16e06157..307b64f9 100644 --- a/compass/db/api/cluster.py +++ b/compass/db/api/cluster.py @@ -33,7 +33,7 @@ SUPPORTED_FIELDS = [ SUPPORTED_CLUSTERHOST_FIELDS = [] RESP_FIELDS = [ 'id', 'name', 'os_name', 'os_id', 'distributed_system_id', - 'reinstall_distributed_system', + 'reinstall_distributed_system', 'flavor', 'distributed_system_name', 'distributed_system_installed', 'owner', 'adapter_id', 'created_at', 'updated_at' @@ -95,9 +95,9 @@ RESP_REVIEW_FIELDS = [ RESP_DEPLOY_FIELDS = [ 'status', 'cluster', 'clusterhosts' ] -ADDED_FIELDS = ['name', 'adapter_id'] -OPTIONAL_ADDED_FIELDS = ['os_id'] -UPDATED_FIELDS = ['name', 'reinstall_distributed_system'] +ADDED_FIELDS = ['name', 'adapter_id', 'os_id'] +OPTIONAL_ADDED_FIELDS = ['flavor'] +UPDATED_FIELDS = ['name', 'reinstall_distributed_system', 'flavor'] ADDED_HOST_FIELDS = ['machine_id'] UPDATED_HOST_FIELDS = ['name', 'reinstall_os'] UPDATED_CONFIG_FIELDS = [ diff --git a/compass/db/api/metadata_holder.py b/compass/db/api/metadata_holder.py index 339b9442..38097aa0 100644 --- a/compass/db/api/metadata_holder.py +++ b/compass/db/api/metadata_holder.py @@ -74,6 +74,7 @@ def _filter_metadata(metadata): filtered_metadata[key] = { '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'], 'js_validator': value.get('js_validator', None), diff --git a/compass/db/api/utils.py b/compass/db/api/utils.py index a5286ef5..5efc0560 100644 --- a/compass/db/api/utils.py +++ b/compass/db/api/utils.py @@ -302,9 +302,7 @@ def filter_output(filter_callbacks, filters, obj, missing_ok=False): if missing_ok: continue else: - raise exception.InvalidResponse( - '%s is not in %s' % (callback_key, obj) - ) + return False if not callback_value( filters[callback_key], obj[callback_key] ): diff --git a/compass/db/models.py b/compass/db/models.py index abbb0b9d..f6b0affb 100644 --- a/compass/db/models.py +++ b/compass/db/models.py @@ -394,7 +394,7 @@ class ClusterHostState(BASE, StateMixin): ) def update(self): - host_state = self.host.state + host_state = self.clusterhost.host.state if self.state == 'INITIALIZED': if host_state.state in ['UNINITIALIZED']: host_state.state = 'INITIALIZED' @@ -403,6 +403,10 @@ class ClusterHostState(BASE, StateMixin): if host_state.state in ['UNINITIALIZED', 'INITIALIZED']: host_state.state = 'INSTALLING' host_state.update() + elif self.state == 'SUCCESSFUL': + if host_state.state != 'SUCCESSFUL': + host_state.state = 'SUCCESSFUL' + host_state.update() super(ClusterHostState, self).update() @@ -433,7 +437,7 @@ class ClusterHost(BASE, TimestampMixin, HelperMixin): uselist=False, passive_deletes=True, passive_updates=True, cascade='all, delete-orphan', - backref=backref('host') + backref=backref('clusterhost') ) def __init__(self, cluster_id, host_id, **kwargs): @@ -834,7 +838,7 @@ class ClusterState(BASE, StateMixin): host = clusterhost.host host_state = host.state.state if host_state == 'INSTALLING': - self.intsalling_hosts += 1 + self.installing_hosts += 1 elif host_state == 'ERROR': self.failed_hosts += 1 elif host_state == 'SUCCESSFUL': @@ -843,7 +847,7 @@ class ClusterState(BASE, StateMixin): for clusterhost in clusterhosts: clusterhost_state = clusterhost.state.state if clusterhost_state == 'INSTALLING': - self.intsalling_hosts += 1 + self.installing_hosts += 1 elif clusterhost_state == 'ERROR': self.failed_hosts += 1 elif clusterhost_state == 'SUCCESSFUL': @@ -855,10 +859,10 @@ class ClusterState(BASE, StateMixin): float(self.total_hosts) ) self.message = ( - 'toal %s, installing %s, complted: %s, error $s' + 'total %s, installing %s, completed: %s, error %s' ) % ( self.total_hosts, self.completed_hosts, - self.intsalling_hosts, self.failed_hosts + self.installing_hosts, self.failed_hosts ) if self.failed_hosts: self.severity = 'ERROR' @@ -875,6 +879,7 @@ class Cluster(BASE, TimestampMixin, HelperMixin): config_step = Column(String(80), default='') os_id = Column(Integer, ForeignKey('os.id'), nullable=True) os_name = Column(String(80), nullable=True) + flavor = Column(String(80), nullable=True) distributed_system_id = Column( Integer, ForeignKey('distributed_system.id'), nullable=True @@ -1872,8 +1877,9 @@ class Adapter(BASE, HelperMixin): for adapter_os in self.adapter_supported_oses ], }) - distributed_system = self.distributed_system + distributed_system = self.adapter_distributed_system if distributed_system: + dict_info['distributed_system_id'] = distributed_system.id dict_info['distributed_system_name'] = distributed_system.name os_installer = self.adapter_os_installer if os_installer: diff --git a/compass/log_analyzor/adapter_matcher.py b/compass/log_analyzor/adapter_matcher.py index 16a7de81..1960ec62 100644 --- a/compass/log_analyzor/adapter_matcher.py +++ b/compass/log_analyzor/adapter_matcher.py @@ -16,6 +16,7 @@ .. moduleauthor:: Xiaodong Wang """ +import datetime import logging import re @@ -29,8 +30,7 @@ from compass.db.models import ClusterHost from compass.db.models import Host from compass.log_analyzor.line_matcher import Progress - -import datetime +from compass.utils import setting_wrapper as setting class AdapterItemMatcher(object): @@ -436,9 +436,7 @@ class AdapterMatcher(object): host_progresses = {} clusterhost_progresses = {} updater = user_api.get_user_object( - 'admin@abc.com', - expire_timestamp=datetime.datetime.now() + - datetime.timedelta(seconds=10000) + setting.COMPASS_ADMIN_EMAIL ) with database.session(): for hostid in hostids: diff --git a/compass/tests/db/api/test_permission.py b/compass/tests/db/api/test_permission.py index f3a4e098..441da88f 100644 --- a/compass/tests/db/api/test_permission.py +++ b/compass/tests/db/api/test_permission.py @@ -17,6 +17,14 @@ import logging import os import unittest2 + +os.environ['COMPASS_IGNORE_SETTING'] = 'true' + + +from compass.utils import setting_wrapper as setting +reload(setting) + + from compass.db.api import database from compass.db.api import permission from compass.db.api import user as user_api @@ -24,8 +32,6 @@ from compass.db import exception from compass.utils import flags from compass.utils import logsetting -os.environ['COMPASS_IGNORE_SETTING'] = 'true' - class BaseTest(unittest2.TestCase): """Base Class for unit test.""" @@ -36,7 +42,7 @@ class BaseTest(unittest2.TestCase): database.create_db() self.user_object = ( user_api.get_user_object( - 'admin@abc.com' + setting.COMPASS_ADMIN_EMAIL ) ) @@ -76,5 +82,8 @@ class TestGetPermission(BaseTest): get_permission = permission.get_permission(self.user_object, 1) self.assertIsNotNone(get_permission) + if __name__ == '__main__': + flags.init() + logsetting.init() unittest2.main() diff --git a/compass/tests/db/api/test_user.py b/compass/tests/db/api/test_user.py index 2b058881..a1120195 100644 --- a/compass/tests/db/api/test_user.py +++ b/compass/tests/db/api/test_user.py @@ -17,14 +17,20 @@ import logging import os import unittest2 + +os.environ['COMPASS_IGNORE_SETTING'] = 'true' + + +from compass.utils import setting_wrapper as setting +reload(setting) + + from compass.db.api import database from compass.db.api import user as user_api from compass.db import exception from compass.utils import flags from compass.utils import logsetting -os.environ['COMPASS_IGNORE_SETTING'] = 'true' - class BaseTest(unittest2.TestCase): """Base Class for unit test.""" @@ -35,7 +41,7 @@ class BaseTest(unittest2.TestCase): database.create_db() self.user_object = ( user_api.get_user_object( - 'admin@abc.com' + setting.COMPASS_ADMIN_EMAIL ) ) @@ -58,7 +64,7 @@ class TestGetUserObject(unittest2.TestCase): super(TestGetUserObject, self).tearDown() def test_get_user_object(self): - user_object = user_api.get_user_object('admin@abc.com') + user_object = user_api.get_user_object(setting.COMPASS_ADMIN_EMAIL) self.assertIsNotNone(user_object) def test_get_user_object_unauthorized(self): @@ -194,14 +200,14 @@ class TestUpdateUser(BaseTest): user_objs = user_api.update_user( self.user_object, self.user_object.id, - email='admin@abc.com', + email=setting.COMPASS_ADMIN_EMAIL, firstname='a', lastname='b', password='ab', is_admin=True, active=True ) - self.assertEqual('admin@abc.com', user_objs['email']) + self.assertEqual(setting.COMPASS_ADMIN_EMAIL, user_objs['email']) def test_user_id(self): user_api.add_user( @@ -325,5 +331,8 @@ class TestUpdatePermissions(BaseTest): item in add_permission[0].items() for item in expected.items() ) + if __name__ == '__main__': + flags.init() + logsetting.init() unittest2.main() diff --git a/compass/tests/db/api/test_user_log.py b/compass/tests/db/api/test_user_log.py index 2847e347..f0ef9568 100644 --- a/compass/tests/db/api/test_user_log.py +++ b/compass/tests/db/api/test_user_log.py @@ -17,6 +17,13 @@ import logging import os import unittest2 +os.environ['COMPASS_IGNORE_SETTING'] = 'true' + + +from compass.utils import setting_wrapper as setting +reload(setting) + + from compass.db.api import database from compass.db.api import user as user_api from compass.db.api import user_log @@ -24,8 +31,6 @@ from compass.db import exception from compass.utils import flags from compass.utils import logsetting -os.environ['COMPASS_IGNORE_SETTING'] = 'true' - class BaseTest(unittest2.TestCase): """Base Class for unit test.""" @@ -36,7 +41,7 @@ class BaseTest(unittest2.TestCase): database.create_db() self.user_object = ( user_api.get_user_object( - 'admin@abc.com', + setting.COMPASS_ADMIN_EMAIL, ) ) @@ -153,5 +158,8 @@ class TestDelActions(BaseTest): ) self.assertEqual([], del_action) + if __name__ == '__main__': + flags.init() + logsetting.init() unittest2.main() diff --git a/compass/tests/db/api/test_utils.py b/compass/tests/db/api/test_utils.py index 0b96b467..4080cb6a 100644 --- a/compass/tests/db/api/test_utils.py +++ b/compass/tests/db/api/test_utils.py @@ -21,6 +21,8 @@ os.environ['COMPASS_IGNORE_SETTING'] = 'true' from compass.utils import setting_wrapper as setting +reload(setting) + from compass.db.api import database from compass.db.api import utils @@ -30,8 +32,6 @@ from compass.db import models from compass.utils import flags from compass.utils import logsetting -reload(setting) - class TestModelQuery(unittest2.TestCase): """Test model query.""" diff --git a/compass/utils/setting_wrapper.py b/compass/utils/setting_wrapper.py index 5de5c1a2..d913af98 100644 --- a/compass/utils/setting_wrapper.py +++ b/compass/utils/setting_wrapper.py @@ -51,7 +51,7 @@ SWITCHES = [ USER_SECRET_KEY = datetime.datetime.now().isoformat() USER_AUTH_HEADER_NAME = 'X-Auth-Token' USER_TOKEN_DURATION = '2h' -COMPASS_ADMIN_EMAIL = 'admin@abc.com' +COMPASS_ADMIN_EMAIL = 'admin@huawei.com' COMPASS_ADMIN_PASSWORD = 'admin' COMPASS_DEFAULT_PERMISSIONS = [ 'list_permissions', diff --git a/conf/os_metadata/general.conf b/conf/os_metadata/general.conf index a945f5fe..840bee24 100644 --- a/conf/os_metadata/general.conf +++ b/conf/os_metadata/general.conf @@ -30,9 +30,9 @@ METADATA = { 'http_proxy': { '_self': { 'field': 'general', - 'default_value': 'http://10.145.88.211:3128', + 'default_value': 'http://$ipaddr:3128', 'options': [ - 'http://10.145.88.211:3128' + 'http://$ipaddr:3128' ], 'mapping_to': 'http_proxy' } @@ -40,9 +40,9 @@ METADATA = { 'https_proxy': { '_self': { 'field': 'general', - 'default_value': 'http://10.145.88.211:3128', + 'default_value': 'http://$ipaddr:3128', 'options': [ - 'http://10.145.88.211:3128' + 'http://$ipaddr:3128' ], 'mapping_to': 'https_proxy' } @@ -52,13 +52,13 @@ METADATA = { 'field': 'general_list', 'default_value': [ '127.0.0.1', - 'compass', - '10.145.88.211' + '$hostname', + '$ipaddr' ], 'options': [ '127.0.0.1', - 'compass', - '10.145.88.211' + '$hostname', + '$ipaddr' ], 'mapping_to': 'no_proxy' } @@ -67,9 +67,9 @@ METADATA = { '_self': { 'is_required': True, 'field': 'general', - 'default_value': '10.145.88.211', + 'default_value': '$ipaddr', 'options': [ - '10.145.88.211' + '$ipaddr' ], 'mapping_to': 'ntp_server' } @@ -79,10 +79,10 @@ METADATA = { 'is_required': True, 'field': 'general_list', 'default_value': [ - '10.145.88.211', + '$ipaddr', ], 'options': [ - '10.145.88.211' + '$ipaddr' ], 'mapping_to': 'nameservers' } @@ -91,17 +91,17 @@ METADATA = { '_self': { 'field': 'general', 'is_required' : True, - 'default_value': 'ods.com', - 'options': ['ods.com'], + 'default_value': ['$domain'][0], + 'options': ['$domain'], } }, 'search_path': { '_self': { 'field': 'general_list', 'default_value': [ - 'ods.com' + '$domain' ], - 'options': ['ods.com'], + 'options': ['$domain'], 'mapping_to': 'search_path' } }, @@ -109,7 +109,7 @@ METADATA = { '_self': { 'is_required': True, 'field': 'ip', - 'default_value': '10.145.88.1', + 'default_value': '$gateway', 'mapping_to': 'gateway' } } @@ -122,6 +122,7 @@ METADATA = { 'username': { '_self': { 'is_required': True, + 'default_value': 'root', 'field': 'username', 'mapping_to': 'username' } @@ -129,6 +130,7 @@ METADATA = { 'password': { '_self': { 'is_required': True, + 'default_value': 'root', 'field': 'password', 'mapping_to': 'password' } @@ -153,12 +155,14 @@ METADATA = { 'percentage': { '_self': { 'field': 'percentage', + 'default_value': 10, 'mapping_to': 'vol_percentage' } }, 'size': { '_self': { 'field': 'size', + 'default_value': '1G', 'mapping_to': 'vol_size' }, } diff --git a/install/compass.sh b/install/compass.sh index 5205038b..74a5865c 100755 --- a/install/compass.sh +++ b/install/compass.sh @@ -54,6 +54,11 @@ sudo sed -e 's|$PythonHome|'$VIRTUAL_ENV'|' -i /var/www/compass/compass.wsgi sudo sed -e 's|$Python|'$VIRTUAL_ENV/bin/python'|' -i /etc/init.d/compass-progress-updated sudo sed -e 's|$CeleryPath|'$VIRTUAL_ENV/bin/celeryd'|' -i /etc/init.d/compass-celeryd sudo sed -e 's|$Python|'$VIRTUAL_ENV/bin/python'|' -i /usr/bin/compassd +sudo sed -i "s/\$ipaddr/$ipaddr/g" /etc/compass/os_metadata/general.conf +sudo sed -i "s/\$hostname/$HOSTNAME/g" /etc/compass/os_metadata/general.conf +sed -i "s/\$gateway/$OPTION_ROUTER/g" /etc/compass/os_metadata/general.conf +domains=$(echo $NAMESERVER_DOMAINS | sed "s/,/','/g") +sudo sed -i "s/\$domain/$domains/g" /etc/compass/os_metadata/general.conf # add cookbooks, databags and roles sudo chmod +x /opt/compass/bin/addcookbooks.py