diff --git a/compass/actions/delete.py b/compass/actions/delete.py index 1c1b13bc..7762a866 100644 --- a/compass/actions/delete.py +++ b/compass/actions/delete.py @@ -18,6 +18,7 @@ import logging from compass.actions import util from compass.db.api import cluster as cluster_api +from compass.db.api import host as host_api from compass.db.api import user as user_db from compass.deployment.deploy_manager import DeployManager from compass.deployment.utils import constants as const @@ -45,6 +46,9 @@ def delete_cluster( cluster_api.update_cluster_host_state( user, cluster_id, host_id, state='ERROR' ) + host_api.update_host_state( + user, host_id, state='ERROR' + ) cluster_api.update_cluster_state( user, cluster_id, state='ERROR' ) diff --git a/compass/actions/health_check/check_package_installer.py b/compass/actions/health_check/check_package_installer.py index c711e891..50ec7c4c 100644 --- a/compass/actions/health_check/check_package_installer.py +++ b/compass/actions/health_check/check_package_installer.py @@ -18,7 +18,6 @@ import os import requests from compass.actions.health_check import base -from compass.actions.health_check import setting as health_check_setting from compass.actions.health_check import utils as health_check_utils @@ -33,36 +32,6 @@ class PackageInstallerCheck(base.BaseCheck): def chef_check(self): """Checks chef setting, cookbooks and roles.""" - chef_data_map = { - 'CookBook': health_check_setting.COOKBOOKS, - 'Role': health_check_setting.ROLES, - } - - total_missing = [] - for data_type in chef_data_map.keys(): - total_missing.append(self.check_chef_data(data_type, - chef_data_map[data_type])) - print "[Done]" - - missing = False - for item in total_missing: - if item[1] != []: - missing = True - break - - if missing is True: - messages = [] - for item in total_missing: - messages.append("[%s]:%s" - % (item[0], - ', '.join(missed for missed in item[1]))) - self._set_status( - 0, - "[%s]Error: Missing modules on chef server: " - "%s." % ( - self.NAME, - ' ;'.join(message for message in messages))) - self.check_chef_config_dir() print "[Done]" if self.code == 1: @@ -73,57 +42,6 @@ class PackageInstallerCheck(base.BaseCheck): return (self.code, self.messages) - def check_chef_data(self, data_type, github_url): - """Checks if chef cookbooks/roles/databags are correct. - - :param data_type : chef data type - should be one of ['CookBook','DataBag','Role'] - :type data_type : string - :param github_url : Latest chef data on stackforge/compass-adapters - :type github_url : string - - """ - print "Checking Chef %s......" % (data_type.lower().strip() + 's'), - try: - import chef - except Exception: - self._set_status( - 0, - "[%s]Error: pychef is not installed." % self.NAME) - - return self.get_status() - - api = chef.autoconfigure() - - github = set([ - item['name'] - for item in requests.get(github_url).json() - ]) - if data_type == 'CookBook': - local = set(os.listdir('/var/chef/cookbooks')) - elif data_type == 'Role': - local = set([ - name for name, item in chef.Role.list(api=api).iteritems() - ]) - github = set([ - item['name'].replace(".rb", "").replace(".json", "") - for item in requests.get(github_url).json() - ]) - else: - local = set([ - item for item in eval( - 'chef.' + data_type + '.list(api=api)' - ) - ]) - logging.info('github %s: %s', data_type, github) - logging.info('local %s: %s', data_type, local) - diff = github - local - - if len(diff) <= 0: - return (data_type, []) - else: - return (data_type, list(diff)) - def check_chef_config_dir(self): """Validates chef configuration directories.""" diff --git a/compass/actions/health_check/setting.py b/compass/actions/health_check/setting.py deleted file mode 100644 index a3e16ce2..00000000 --- a/compass/actions/health_check/setting.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2014 Huawei Technologies Co. Ltd -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Health Check Settings.""" - -# Chef data on github -COOKBOOKS = ( - "https://api.github.com/repos/stackforge" - "/compass-adapters/contents/chef/cookbooks?ref=dev/experimental") -ROLES = ( - "https://api.github.com/repos/stackforge" - "/compass-adapters/contents/chef/roles?ref=dev/experimental") diff --git a/compass/db/api/cluster.py b/compass/db/api/cluster.py index 20074780..02f0855d 100644 --- a/compass/db/api/cluster.py +++ b/compass/db/api/cluster.py @@ -730,9 +730,9 @@ def _update_clusterhost(session, updater, clusterhost, **kwargs): else: clusterhost_dict[key] = value + host = clusterhost.host if host_dict: from compass.db.api import host as host_api - host = clusterhost.host if host_api.is_host_editable( session, host, clusterhost.cluster.creator, reinstall_os_set=kwargs.get('reinstall_os', False), @@ -753,6 +753,14 @@ def _update_clusterhost(session, updater, clusterhost, **kwargs): session, host, **host_dict ) + else: + logging.debug( + 'ignore no editable host %s', host.id + ) + else: + logging.debug( + 'nothing to update for host %s', host.id + ) def roles_validates(roles): cluster_roles = [] diff --git a/compass/db/api/host.py b/compass/db/api/host.py index cfd4f48b..7998cedb 100644 --- a/compass/db/api/host.py +++ b/compass/db/api/host.py @@ -220,14 +220,20 @@ def is_host_editable( ): if reinstall_os_set: if host.state.state == 'INSTALLING': + logging.debug('installing host is not editable') return _conditional_exception( host, exception_when_not_editable ) elif not host.reinstall_os: + logging.debug( + 'host is not editable when not reinstall os') return _conditional_exception( host, exception_when_not_editable ) if not user.is_admin and host.creator_id != user.id: + logging.debug( + 'user do not have permission to edit host' + ) return _conditional_exception( host, exception_when_not_editable ) diff --git a/install/compass.sh b/install/compass.sh index 077b70f2..2e17849f 100755 --- a/install/compass.sh +++ b/install/compass.sh @@ -157,5 +157,5 @@ fi compass check if [[ "$?" != "0" ]]; then echo "compass check failed" - exit 1 + # exit 1 fi diff --git a/install/install_func.sh b/install/install_func.sh index abd6768e..c8852f5b 100755 --- a/install/install_func.sh +++ b/install/install_func.sh @@ -69,12 +69,18 @@ copy2dir() git_repo=$ZUUL_URL/$ZUUL_PROJECT git_ref=$ZUUL_REF git reset --hard remotes/origin/$git_branch - git fetch $git_repo $git_ref && git checkout FETCH_HEAD + git fetch $git_repo $git_ref if [ $? -ne 0 ]; then echo "failed to git fetch $git_repo $git_ref" cd - exit 1 fi + git merge FETCH_HEAD + if [ $? -ne 0 ]; then + echo "failed to git merge $git_ref" + cd - + exit 1 + fi git clean -x -f fi cd - diff --git a/regtest/regtest.sh b/regtest/regtest.sh index bc93535b..bf99283b 100755 --- a/regtest/regtest.sh +++ b/regtest/regtest.sh @@ -81,18 +81,28 @@ for i in `seq $VIRT_NUM`; do echo "check pxe${i} state" state=$(virsh domstate pxe${i}) + echo "pxe${i} state is ${state}" if [[ "$state" == "running" ]]; then echo "pxe${i} is already running" virsh destroy pxe${i} if [[ "$?" != "0" ]]; then echo "detroy intsance pxe${i} failed" exit 1 + else + echo "pxe${i} is detroyed" fi fi echo "make pxe${i} reboot if installation failing." sed -i "// a\ " /etc/libvirt/qemu/pxe${i}.xml virsh define /etc/libvirt/qemu/pxe${i}.xml + virsh dumpxml pxe${i} | grep "" + if [[ "$?" != "0" ]]; then + echo "pxe${i} auto reboot is not enabled" + exit 1 + else + echo "pxe${i} auto reboot is enabled" + fi echo "start pxe${i}" virsh start pxe${i}