make compass check work in every branch
Change-Id: I1d55248dd5330fdf94a77218810ff696e28f3fd1
This commit is contained in:
parent
fd41871603
commit
d517aaa887
@ -18,6 +18,7 @@ import logging
|
|||||||
|
|
||||||
from compass.actions import util
|
from compass.actions import util
|
||||||
from compass.db.api import cluster as cluster_api
|
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.db.api import user as user_db
|
||||||
from compass.deployment.deploy_manager import DeployManager
|
from compass.deployment.deploy_manager import DeployManager
|
||||||
from compass.deployment.utils import constants as const
|
from compass.deployment.utils import constants as const
|
||||||
@ -45,6 +46,9 @@ def delete_cluster(
|
|||||||
cluster_api.update_cluster_host_state(
|
cluster_api.update_cluster_host_state(
|
||||||
user, cluster_id, host_id, state='ERROR'
|
user, cluster_id, host_id, state='ERROR'
|
||||||
)
|
)
|
||||||
|
host_api.update_host_state(
|
||||||
|
user, host_id, state='ERROR'
|
||||||
|
)
|
||||||
cluster_api.update_cluster_state(
|
cluster_api.update_cluster_state(
|
||||||
user, cluster_id, state='ERROR'
|
user, cluster_id, state='ERROR'
|
||||||
)
|
)
|
||||||
|
@ -18,7 +18,6 @@ import os
|
|||||||
import requests
|
import requests
|
||||||
|
|
||||||
from compass.actions.health_check import base
|
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
|
from compass.actions.health_check import utils as health_check_utils
|
||||||
|
|
||||||
|
|
||||||
@ -33,36 +32,6 @@ class PackageInstallerCheck(base.BaseCheck):
|
|||||||
|
|
||||||
def chef_check(self):
|
def chef_check(self):
|
||||||
"""Checks chef setting, cookbooks and roles."""
|
"""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()
|
self.check_chef_config_dir()
|
||||||
print "[Done]"
|
print "[Done]"
|
||||||
if self.code == 1:
|
if self.code == 1:
|
||||||
@ -73,57 +42,6 @@ class PackageInstallerCheck(base.BaseCheck):
|
|||||||
|
|
||||||
return (self.code, self.messages)
|
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):
|
def check_chef_config_dir(self):
|
||||||
"""Validates chef configuration directories."""
|
"""Validates chef configuration directories."""
|
||||||
|
|
||||||
|
@ -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")
|
|
@ -730,9 +730,9 @@ def _update_clusterhost(session, updater, clusterhost, **kwargs):
|
|||||||
else:
|
else:
|
||||||
clusterhost_dict[key] = value
|
clusterhost_dict[key] = value
|
||||||
|
|
||||||
|
host = clusterhost.host
|
||||||
if host_dict:
|
if host_dict:
|
||||||
from compass.db.api import host as host_api
|
from compass.db.api import host as host_api
|
||||||
host = clusterhost.host
|
|
||||||
if host_api.is_host_editable(
|
if host_api.is_host_editable(
|
||||||
session, host, clusterhost.cluster.creator,
|
session, host, clusterhost.cluster.creator,
|
||||||
reinstall_os_set=kwargs.get('reinstall_os', False),
|
reinstall_os_set=kwargs.get('reinstall_os', False),
|
||||||
@ -753,6 +753,14 @@ def _update_clusterhost(session, updater, clusterhost, **kwargs):
|
|||||||
session, host,
|
session, host,
|
||||||
**host_dict
|
**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):
|
def roles_validates(roles):
|
||||||
cluster_roles = []
|
cluster_roles = []
|
||||||
|
@ -220,14 +220,20 @@ def is_host_editable(
|
|||||||
):
|
):
|
||||||
if reinstall_os_set:
|
if reinstall_os_set:
|
||||||
if host.state.state == 'INSTALLING':
|
if host.state.state == 'INSTALLING':
|
||||||
|
logging.debug('installing host is not editable')
|
||||||
return _conditional_exception(
|
return _conditional_exception(
|
||||||
host, exception_when_not_editable
|
host, exception_when_not_editable
|
||||||
)
|
)
|
||||||
elif not host.reinstall_os:
|
elif not host.reinstall_os:
|
||||||
|
logging.debug(
|
||||||
|
'host is not editable when not reinstall os')
|
||||||
return _conditional_exception(
|
return _conditional_exception(
|
||||||
host, exception_when_not_editable
|
host, exception_when_not_editable
|
||||||
)
|
)
|
||||||
if not user.is_admin and host.creator_id != user.id:
|
if not user.is_admin and host.creator_id != user.id:
|
||||||
|
logging.debug(
|
||||||
|
'user do not have permission to edit host'
|
||||||
|
)
|
||||||
return _conditional_exception(
|
return _conditional_exception(
|
||||||
host, exception_when_not_editable
|
host, exception_when_not_editable
|
||||||
)
|
)
|
||||||
|
@ -157,5 +157,5 @@ fi
|
|||||||
compass check
|
compass check
|
||||||
if [[ "$?" != "0" ]]; then
|
if [[ "$?" != "0" ]]; then
|
||||||
echo "compass check failed"
|
echo "compass check failed"
|
||||||
exit 1
|
# exit 1
|
||||||
fi
|
fi
|
||||||
|
@ -69,12 +69,18 @@ copy2dir()
|
|||||||
git_repo=$ZUUL_URL/$ZUUL_PROJECT
|
git_repo=$ZUUL_URL/$ZUUL_PROJECT
|
||||||
git_ref=$ZUUL_REF
|
git_ref=$ZUUL_REF
|
||||||
git reset --hard remotes/origin/$git_branch
|
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
|
if [ $? -ne 0 ]; then
|
||||||
echo "failed to git fetch $git_repo $git_ref"
|
echo "failed to git fetch $git_repo $git_ref"
|
||||||
cd -
|
cd -
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
git merge FETCH_HEAD
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "failed to git merge $git_ref"
|
||||||
|
cd -
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
git clean -x -f
|
git clean -x -f
|
||||||
fi
|
fi
|
||||||
cd -
|
cd -
|
||||||
|
@ -81,18 +81,28 @@ for i in `seq $VIRT_NUM`; do
|
|||||||
|
|
||||||
echo "check pxe${i} state"
|
echo "check pxe${i} state"
|
||||||
state=$(virsh domstate pxe${i})
|
state=$(virsh domstate pxe${i})
|
||||||
|
echo "pxe${i} state is ${state}"
|
||||||
if [[ "$state" == "running" ]]; then
|
if [[ "$state" == "running" ]]; then
|
||||||
echo "pxe${i} is already running"
|
echo "pxe${i} is already running"
|
||||||
virsh destroy pxe${i}
|
virsh destroy pxe${i}
|
||||||
if [[ "$?" != "0" ]]; then
|
if [[ "$?" != "0" ]]; then
|
||||||
echo "detroy intsance pxe${i} failed"
|
echo "detroy intsance pxe${i} failed"
|
||||||
exit 1
|
exit 1
|
||||||
|
else
|
||||||
|
echo "pxe${i} is detroyed"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "make pxe${i} reboot if installation failing."
|
echo "make pxe${i} reboot if installation failing."
|
||||||
sed -i "/<boot dev='hd'\/>/ a\ <bios useserial='yes' rebootTimeout='0'\/>" /etc/libvirt/qemu/pxe${i}.xml
|
sed -i "/<boot dev='hd'\/>/ a\ <bios useserial='yes' rebootTimeout='0'\/>" /etc/libvirt/qemu/pxe${i}.xml
|
||||||
virsh define /etc/libvirt/qemu/pxe${i}.xml
|
virsh define /etc/libvirt/qemu/pxe${i}.xml
|
||||||
|
virsh dumpxml pxe${i} | grep "<bios useserial='yes' rebootTimeout='0'\/>"
|
||||||
|
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}"
|
echo "start pxe${i}"
|
||||||
virsh start pxe${i}
|
virsh start pxe${i}
|
||||||
|
Loading…
Reference in New Issue
Block a user