diff --git a/plugin_source/components.yaml b/plugin_source/components.yaml index 4154ec7..a82ed4a 100644 --- a/plugin_source/components.yaml +++ b/plugin_source/components.yaml @@ -12,8 +12,6 @@ description: '' - name: 'additional_service:murano' description: '' - - name: 'additional_service:ceilometer' - description: '' - name: 'additional_service:mongo' description: '' - name: 'additional_service:ironic' diff --git a/plugin_source/deployment_scripts/compute_post_deployment.py b/plugin_source/deployment_scripts/compute_post_deployment.py index f291723..1860343 100755 --- a/plugin_source/deployment_scripts/compute_post_deployment.py +++ b/plugin_source/deployment_scripts/compute_post_deployment.py @@ -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.') diff --git a/plugin_source/deployment_scripts/patchset/ceilometer-poll-cpu-util.patch b/plugin_source/deployment_scripts/patchset/ceilometer-poll-cpu-util.patch new file mode 100644 index 0000000..0637c9c --- /dev/null +++ b/plugin_source/deployment_scripts/patchset/ceilometer-poll-cpu-util.patch @@ -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) + diff --git a/plugin_source/environment_config.yaml b/plugin_source/environment_config.yaml index 5e69249..c787dc6 100644 --- a/plugin_source/environment_config.yaml +++ b/plugin_source/environment_config.yaml @@ -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" \ No newline at end of file + type: "checkbox"