update code

Change-Id: Ia54bf3c0b3780e96a1b5bf4c6585855e3517f962
This commit is contained in:
xiaodongwang 2014-08-08 09:19:31 -07:00
parent c03d4f849c
commit 70778da3d0
13 changed files with 90 additions and 51 deletions

View File

@ -30,6 +30,7 @@ SUPPORTED_FIELDS = [
RESP_FIELDS = [ RESP_FIELDS = [
'id', 'name', 'roles', 'id', 'name', 'roles',
'os_installer', 'package_installer', 'os_installer', 'package_installer',
'distributed_system_id',
'distributed_system_name', 'distributed_system_name',
'supported_oses', 'display_name' 'supported_oses', 'display_name'
] ]

View File

@ -33,7 +33,7 @@ SUPPORTED_FIELDS = [
SUPPORTED_CLUSTERHOST_FIELDS = [] SUPPORTED_CLUSTERHOST_FIELDS = []
RESP_FIELDS = [ RESP_FIELDS = [
'id', 'name', 'os_name', 'os_id', 'distributed_system_id', 'id', 'name', 'os_name', 'os_id', 'distributed_system_id',
'reinstall_distributed_system', 'reinstall_distributed_system', 'flavor',
'distributed_system_name', 'distributed_system_installed', 'distributed_system_name', 'distributed_system_installed',
'owner', 'adapter_id', 'owner', 'adapter_id',
'created_at', 'updated_at' 'created_at', 'updated_at'
@ -95,9 +95,9 @@ RESP_REVIEW_FIELDS = [
RESP_DEPLOY_FIELDS = [ RESP_DEPLOY_FIELDS = [
'status', 'cluster', 'clusterhosts' 'status', 'cluster', 'clusterhosts'
] ]
ADDED_FIELDS = ['name', 'adapter_id'] ADDED_FIELDS = ['name', 'adapter_id', 'os_id']
OPTIONAL_ADDED_FIELDS = ['os_id'] OPTIONAL_ADDED_FIELDS = ['flavor']
UPDATED_FIELDS = ['name', 'reinstall_distributed_system'] UPDATED_FIELDS = ['name', 'reinstall_distributed_system', 'flavor']
ADDED_HOST_FIELDS = ['machine_id'] ADDED_HOST_FIELDS = ['machine_id']
UPDATED_HOST_FIELDS = ['name', 'reinstall_os'] UPDATED_HOST_FIELDS = ['name', 'reinstall_os']
UPDATED_CONFIG_FIELDS = [ UPDATED_CONFIG_FIELDS = [

View File

@ -74,6 +74,7 @@ def _filter_metadata(metadata):
filtered_metadata[key] = { filtered_metadata[key] = {
'name': value['name'], 'name': value['name'],
'description': value.get('description', None), 'description': value.get('description', None),
'default_value': value.get('default_value', None),
'is_required': value['is_required'], 'is_required': value['is_required'],
'required_in_whole_config': value['required_in_whole_config'], 'required_in_whole_config': value['required_in_whole_config'],
'js_validator': value.get('js_validator', None), 'js_validator': value.get('js_validator', None),

View File

@ -302,9 +302,7 @@ def filter_output(filter_callbacks, filters, obj, missing_ok=False):
if missing_ok: if missing_ok:
continue continue
else: else:
raise exception.InvalidResponse( return False
'%s is not in %s' % (callback_key, obj)
)
if not callback_value( if not callback_value(
filters[callback_key], obj[callback_key] filters[callback_key], obj[callback_key]
): ):

View File

@ -394,7 +394,7 @@ class ClusterHostState(BASE, StateMixin):
) )
def update(self): def update(self):
host_state = self.host.state host_state = self.clusterhost.host.state
if self.state == 'INITIALIZED': if self.state == 'INITIALIZED':
if host_state.state in ['UNINITIALIZED']: if host_state.state in ['UNINITIALIZED']:
host_state.state = 'INITIALIZED' host_state.state = 'INITIALIZED'
@ -403,6 +403,10 @@ class ClusterHostState(BASE, StateMixin):
if host_state.state in ['UNINITIALIZED', 'INITIALIZED']: if host_state.state in ['UNINITIALIZED', 'INITIALIZED']:
host_state.state = 'INSTALLING' host_state.state = 'INSTALLING'
host_state.update() host_state.update()
elif self.state == 'SUCCESSFUL':
if host_state.state != 'SUCCESSFUL':
host_state.state = 'SUCCESSFUL'
host_state.update()
super(ClusterHostState, self).update() super(ClusterHostState, self).update()
@ -433,7 +437,7 @@ class ClusterHost(BASE, TimestampMixin, HelperMixin):
uselist=False, uselist=False,
passive_deletes=True, passive_updates=True, passive_deletes=True, passive_updates=True,
cascade='all, delete-orphan', cascade='all, delete-orphan',
backref=backref('host') backref=backref('clusterhost')
) )
def __init__(self, cluster_id, host_id, **kwargs): def __init__(self, cluster_id, host_id, **kwargs):
@ -834,7 +838,7 @@ class ClusterState(BASE, StateMixin):
host = clusterhost.host host = clusterhost.host
host_state = host.state.state host_state = host.state.state
if host_state == 'INSTALLING': if host_state == 'INSTALLING':
self.intsalling_hosts += 1 self.installing_hosts += 1
elif host_state == 'ERROR': elif host_state == 'ERROR':
self.failed_hosts += 1 self.failed_hosts += 1
elif host_state == 'SUCCESSFUL': elif host_state == 'SUCCESSFUL':
@ -843,7 +847,7 @@ class ClusterState(BASE, StateMixin):
for clusterhost in clusterhosts: for clusterhost in clusterhosts:
clusterhost_state = clusterhost.state.state clusterhost_state = clusterhost.state.state
if clusterhost_state == 'INSTALLING': if clusterhost_state == 'INSTALLING':
self.intsalling_hosts += 1 self.installing_hosts += 1
elif clusterhost_state == 'ERROR': elif clusterhost_state == 'ERROR':
self.failed_hosts += 1 self.failed_hosts += 1
elif clusterhost_state == 'SUCCESSFUL': elif clusterhost_state == 'SUCCESSFUL':
@ -855,10 +859,10 @@ class ClusterState(BASE, StateMixin):
float(self.total_hosts) float(self.total_hosts)
) )
self.message = ( 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.total_hosts, self.completed_hosts,
self.intsalling_hosts, self.failed_hosts self.installing_hosts, self.failed_hosts
) )
if self.failed_hosts: if self.failed_hosts:
self.severity = 'ERROR' self.severity = 'ERROR'
@ -875,6 +879,7 @@ class Cluster(BASE, TimestampMixin, HelperMixin):
config_step = Column(String(80), default='') config_step = Column(String(80), default='')
os_id = Column(Integer, ForeignKey('os.id'), nullable=True) os_id = Column(Integer, ForeignKey('os.id'), nullable=True)
os_name = Column(String(80), nullable=True) os_name = Column(String(80), nullable=True)
flavor = Column(String(80), nullable=True)
distributed_system_id = Column( distributed_system_id = Column(
Integer, ForeignKey('distributed_system.id'), Integer, ForeignKey('distributed_system.id'),
nullable=True nullable=True
@ -1872,8 +1877,9 @@ class Adapter(BASE, HelperMixin):
for adapter_os in self.adapter_supported_oses for adapter_os in self.adapter_supported_oses
], ],
}) })
distributed_system = self.distributed_system distributed_system = self.adapter_distributed_system
if distributed_system: if distributed_system:
dict_info['distributed_system_id'] = distributed_system.id
dict_info['distributed_system_name'] = distributed_system.name dict_info['distributed_system_name'] = distributed_system.name
os_installer = self.adapter_os_installer os_installer = self.adapter_os_installer
if os_installer: if os_installer:

View File

@ -16,6 +16,7 @@
.. moduleauthor:: Xiaodong Wang <xiaodongwang@huawei.com> .. moduleauthor:: Xiaodong Wang <xiaodongwang@huawei.com>
""" """
import datetime
import logging import logging
import re import re
@ -29,8 +30,7 @@ from compass.db.models import ClusterHost
from compass.db.models import Host from compass.db.models import Host
from compass.log_analyzor.line_matcher import Progress from compass.log_analyzor.line_matcher import Progress
from compass.utils import setting_wrapper as setting
import datetime
class AdapterItemMatcher(object): class AdapterItemMatcher(object):
@ -436,9 +436,7 @@ class AdapterMatcher(object):
host_progresses = {} host_progresses = {}
clusterhost_progresses = {} clusterhost_progresses = {}
updater = user_api.get_user_object( updater = user_api.get_user_object(
'admin@abc.com', setting.COMPASS_ADMIN_EMAIL
expire_timestamp=datetime.datetime.now() +
datetime.timedelta(seconds=10000)
) )
with database.session(): with database.session():
for hostid in hostids: for hostid in hostids:

View File

@ -17,6 +17,14 @@ import logging
import os import os
import unittest2 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 database
from compass.db.api import permission from compass.db.api import permission
from compass.db.api import user as user_api 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 flags
from compass.utils import logsetting from compass.utils import logsetting
os.environ['COMPASS_IGNORE_SETTING'] = 'true'
class BaseTest(unittest2.TestCase): class BaseTest(unittest2.TestCase):
"""Base Class for unit test.""" """Base Class for unit test."""
@ -36,7 +42,7 @@ class BaseTest(unittest2.TestCase):
database.create_db() database.create_db()
self.user_object = ( self.user_object = (
user_api.get_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) get_permission = permission.get_permission(self.user_object, 1)
self.assertIsNotNone(get_permission) self.assertIsNotNone(get_permission)
if __name__ == '__main__': if __name__ == '__main__':
flags.init()
logsetting.init()
unittest2.main() unittest2.main()

View File

@ -17,14 +17,20 @@ import logging
import os import os
import unittest2 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 database
from compass.db.api import user as user_api from compass.db.api import user as user_api
from compass.db import exception from compass.db import exception
from compass.utils import flags from compass.utils import flags
from compass.utils import logsetting from compass.utils import logsetting
os.environ['COMPASS_IGNORE_SETTING'] = 'true'
class BaseTest(unittest2.TestCase): class BaseTest(unittest2.TestCase):
"""Base Class for unit test.""" """Base Class for unit test."""
@ -35,7 +41,7 @@ class BaseTest(unittest2.TestCase):
database.create_db() database.create_db()
self.user_object = ( self.user_object = (
user_api.get_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() super(TestGetUserObject, self).tearDown()
def test_get_user_object(self): 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) self.assertIsNotNone(user_object)
def test_get_user_object_unauthorized(self): def test_get_user_object_unauthorized(self):
@ -194,14 +200,14 @@ class TestUpdateUser(BaseTest):
user_objs = user_api.update_user( user_objs = user_api.update_user(
self.user_object, self.user_object,
self.user_object.id, self.user_object.id,
email='admin@abc.com', email=setting.COMPASS_ADMIN_EMAIL,
firstname='a', firstname='a',
lastname='b', lastname='b',
password='ab', password='ab',
is_admin=True, is_admin=True,
active=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): def test_user_id(self):
user_api.add_user( user_api.add_user(
@ -325,5 +331,8 @@ class TestUpdatePermissions(BaseTest):
item in add_permission[0].items() for item in expected.items() item in add_permission[0].items() for item in expected.items()
) )
if __name__ == '__main__': if __name__ == '__main__':
flags.init()
logsetting.init()
unittest2.main() unittest2.main()

View File

@ -17,6 +17,13 @@ import logging
import os import os
import unittest2 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 database
from compass.db.api import user as user_api from compass.db.api import user as user_api
from compass.db.api import user_log 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 flags
from compass.utils import logsetting from compass.utils import logsetting
os.environ['COMPASS_IGNORE_SETTING'] = 'true'
class BaseTest(unittest2.TestCase): class BaseTest(unittest2.TestCase):
"""Base Class for unit test.""" """Base Class for unit test."""
@ -36,7 +41,7 @@ class BaseTest(unittest2.TestCase):
database.create_db() database.create_db()
self.user_object = ( self.user_object = (
user_api.get_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) self.assertEqual([], del_action)
if __name__ == '__main__': if __name__ == '__main__':
flags.init()
logsetting.init()
unittest2.main() unittest2.main()

View File

@ -21,6 +21,8 @@ os.environ['COMPASS_IGNORE_SETTING'] = 'true'
from compass.utils import setting_wrapper as setting from compass.utils import setting_wrapper as setting
reload(setting)
from compass.db.api import database from compass.db.api import database
from compass.db.api import utils from compass.db.api import utils
@ -30,8 +32,6 @@ from compass.db import models
from compass.utils import flags from compass.utils import flags
from compass.utils import logsetting from compass.utils import logsetting
reload(setting)
class TestModelQuery(unittest2.TestCase): class TestModelQuery(unittest2.TestCase):
"""Test model query.""" """Test model query."""

View File

@ -51,7 +51,7 @@ SWITCHES = [
USER_SECRET_KEY = datetime.datetime.now().isoformat() USER_SECRET_KEY = datetime.datetime.now().isoformat()
USER_AUTH_HEADER_NAME = 'X-Auth-Token' USER_AUTH_HEADER_NAME = 'X-Auth-Token'
USER_TOKEN_DURATION = '2h' USER_TOKEN_DURATION = '2h'
COMPASS_ADMIN_EMAIL = 'admin@abc.com' COMPASS_ADMIN_EMAIL = 'admin@huawei.com'
COMPASS_ADMIN_PASSWORD = 'admin' COMPASS_ADMIN_PASSWORD = 'admin'
COMPASS_DEFAULT_PERMISSIONS = [ COMPASS_DEFAULT_PERMISSIONS = [
'list_permissions', 'list_permissions',

View File

@ -30,9 +30,9 @@ METADATA = {
'http_proxy': { 'http_proxy': {
'_self': { '_self': {
'field': 'general', 'field': 'general',
'default_value': 'http://10.145.88.211:3128', 'default_value': 'http://$ipaddr:3128',
'options': [ 'options': [
'http://10.145.88.211:3128' 'http://$ipaddr:3128'
], ],
'mapping_to': 'http_proxy' 'mapping_to': 'http_proxy'
} }
@ -40,9 +40,9 @@ METADATA = {
'https_proxy': { 'https_proxy': {
'_self': { '_self': {
'field': 'general', 'field': 'general',
'default_value': 'http://10.145.88.211:3128', 'default_value': 'http://$ipaddr:3128',
'options': [ 'options': [
'http://10.145.88.211:3128' 'http://$ipaddr:3128'
], ],
'mapping_to': 'https_proxy' 'mapping_to': 'https_proxy'
} }
@ -52,13 +52,13 @@ METADATA = {
'field': 'general_list', 'field': 'general_list',
'default_value': [ 'default_value': [
'127.0.0.1', '127.0.0.1',
'compass', '$hostname',
'10.145.88.211' '$ipaddr'
], ],
'options': [ 'options': [
'127.0.0.1', '127.0.0.1',
'compass', '$hostname',
'10.145.88.211' '$ipaddr'
], ],
'mapping_to': 'no_proxy' 'mapping_to': 'no_proxy'
} }
@ -67,9 +67,9 @@ METADATA = {
'_self': { '_self': {
'is_required': True, 'is_required': True,
'field': 'general', 'field': 'general',
'default_value': '10.145.88.211', 'default_value': '$ipaddr',
'options': [ 'options': [
'10.145.88.211' '$ipaddr'
], ],
'mapping_to': 'ntp_server' 'mapping_to': 'ntp_server'
} }
@ -79,10 +79,10 @@ METADATA = {
'is_required': True, 'is_required': True,
'field': 'general_list', 'field': 'general_list',
'default_value': [ 'default_value': [
'10.145.88.211', '$ipaddr',
], ],
'options': [ 'options': [
'10.145.88.211' '$ipaddr'
], ],
'mapping_to': 'nameservers' 'mapping_to': 'nameservers'
} }
@ -91,17 +91,17 @@ METADATA = {
'_self': { '_self': {
'field': 'general', 'field': 'general',
'is_required' : True, 'is_required' : True,
'default_value': 'ods.com', 'default_value': ['$domain'][0],
'options': ['ods.com'], 'options': ['$domain'],
} }
}, },
'search_path': { 'search_path': {
'_self': { '_self': {
'field': 'general_list', 'field': 'general_list',
'default_value': [ 'default_value': [
'ods.com' '$domain'
], ],
'options': ['ods.com'], 'options': ['$domain'],
'mapping_to': 'search_path' 'mapping_to': 'search_path'
} }
}, },
@ -109,7 +109,7 @@ METADATA = {
'_self': { '_self': {
'is_required': True, 'is_required': True,
'field': 'ip', 'field': 'ip',
'default_value': '10.145.88.1', 'default_value': '$gateway',
'mapping_to': 'gateway' 'mapping_to': 'gateway'
} }
} }
@ -122,6 +122,7 @@ METADATA = {
'username': { 'username': {
'_self': { '_self': {
'is_required': True, 'is_required': True,
'default_value': 'root',
'field': 'username', 'field': 'username',
'mapping_to': 'username' 'mapping_to': 'username'
} }
@ -129,6 +130,7 @@ METADATA = {
'password': { 'password': {
'_self': { '_self': {
'is_required': True, 'is_required': True,
'default_value': 'root',
'field': 'password', 'field': 'password',
'mapping_to': 'password' 'mapping_to': 'password'
} }
@ -153,12 +155,14 @@ METADATA = {
'percentage': { 'percentage': {
'_self': { '_self': {
'field': 'percentage', 'field': 'percentage',
'default_value': 10,
'mapping_to': 'vol_percentage' 'mapping_to': 'vol_percentage'
} }
}, },
'size': { 'size': {
'_self': { '_self': {
'field': 'size', 'field': 'size',
'default_value': '1G',
'mapping_to': 'vol_size' 'mapping_to': 'vol_size'
}, },
} }

View File

@ -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|$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|$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 -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 # add cookbooks, databags and roles
sudo chmod +x /opt/compass/bin/addcookbooks.py sudo chmod +x /opt/compass/bin/addcookbooks.py