Enable ceilometer

In order to enable ceilometer, need add xenapi specific setup in
ceilometer's configure file and update the impatible list.
Note ceilometer is an option service, the users can choose if
enable it or not.
This patch also contains a patch to fix an error on polling cpu_util.

Change-Id: I0b60494aa1d4511b18d6582f15d454af43b8500c
This commit is contained in:
Jianghua Wang 2016-08-03 16:30:23 +08:00
parent d2577d38eb
commit ad57f30d59
4 changed files with 78 additions and 4 deletions

View File

@ -12,8 +12,6 @@
description: ''
- name: 'additional_service:murano'
description: ''
- name: 'additional_service:ceilometer'
description: ''
- name: 'additional_service:mongo'
description: ''
- name: 'additional_service:ironic'

View File

@ -405,6 +405,19 @@ def enable_linux_bridge(himn, username):
ssh(himn, username, 'rm -f /etc/modprobe.d/blacklist-bridge*')
def patch_ceilometer():
"""
Add patches which are not MOS with order:
ceilometer-poll-cpu-util.patch
"""
patchset_dir = sys.path[0]
patchfile_list = [
'%s/patchset/ceilometer-poll-cpu-util.patch' % patchset_dir,
]
for patch_file in patchfile_list:
execute('patch', '-d', DIST_PACKAGES_DIR, '-p1', '-i', patch_file)
def patch_compute_xenapi():
"""
Add patches which are not merged to upstream with order:
@ -440,6 +453,31 @@ def reconfig_multipath():
execute('service', 'multipath-tools', 'restart')
def check_and_setup_ceilometer(himn, username, password):
"""Set xenapi configuration for ceilometer service"""
filename = '/etc/ceilometer/ceilometer.conf'
if not os.path.exists(filename):
reportError("The file: %s doesn't exist" % filename)
return
patch_ceilometer()
cf = ConfigParser.ConfigParser()
try:
cf.read(filename)
cf.set('DEFAULT', 'hypervisor_inspector', 'xenapi')
cf.set('xenapi', 'connection_url', 'http://%s' % himn)
cf.set('xenapi', 'connection_username', username)
cf.set('xenapi', 'connection_password', password)
with open(filename, 'w') as configfile:
cf.write(configfile)
logging.info('Modify file %s successfully', filename)
except Exception:
reportError("Fail to modify file %s", filename)
return
restart_services('ceilometer-polling')
if __name__ == '__main__':
install_xenapi_sdk()
astute = get_astute(ASTUTE_PATH)
@ -478,3 +516,12 @@ if __name__ == '__main__':
restart_services('neutron-openvswitch-agent')
reconfig_multipath()
# Add xenapi specific setup for ceilometer if service is enabled.
is_ceilometer_enabled = astute_get(astute,
('ceilometer', 'enabled'))
if is_ceilometer_enabled:
check_and_setup_ceilometer(HIMN_IP, username, password)
else:
logging.info('Skip ceilomter setup as this service is '
'disabled.')

View File

@ -0,0 +1,30 @@
diff --git a/ceilometer/compute/virt/xenapi/inspector.py b/ceilometer/compute/virt/xenapi/inspector.py
index 19405dd..62960da 100644
--- a/ceilometer/compute/virt/xenapi/inspector.py
+++ b/ceilometer/compute/virt/xenapi/inspector.py
@@ -120,18 +120,15 @@ class XenapiInspector(virt_inspector.Inspector):
def inspect_cpu_util(self, instance, duration=None):
instance_name = util.instance_name(instance)
vm_ref = self._lookup_by_name(instance_name)
- metrics_ref = self._call_xenapi("VM.get_metrics", vm_ref)
- metrics_rec = self._call_xenapi("VM_metrics.get_record",
- metrics_ref)
- vcpus_number = metrics_rec['VCPUs_number']
- vcpus_utils = metrics_rec['VCPUs_utilisation']
- if len(vcpus_utils) == 0:
- msg = _("Could not get VM %s CPU Utilization") % instance_name
+ vcpus_number = int(self._call_xenapi("VM.get_VCPUs_max", vm_ref))
+ if vcpus_number <= 0:
+ msg = _("Could not get VM %s CPU number") % instance_name
raise XenapiException(msg)
-
utils = 0.0
- for num in range(int(vcpus_number)):
- utils += vcpus_utils.get(str(num))
+ for index in range(vcpus_number):
+ utils += float(self._call_xenapi("VM.query_data_source",
+ vm_ref,
+ "cpu%d" % index))
utils = utils / int(vcpus_number) * 100
return virt_inspector.CPUUtilStats(util=utils)

View File

@ -6,7 +6,6 @@ attributes:
- "settings:storage.ephemeral_ceph.value == true"
- "settings:additional_components.sahara.value == true"
- "settings:additional_components.murano.value == true"
- "settings:additional_components.ceilometer.value == true"
- "settings:additional_components.mongo.value == true"
- "settings:additional_components.ironic.value == true"
group: 'compute'
@ -30,4 +29,4 @@ attributes:
label: 'Install Nova Plugins'
description: ''
weight: 30
type: "checkbox"
type: "checkbox"