From 8646b8d62cf4ca7b6bccae537a0c9e72ba45eab3 Mon Sep 17 00:00:00 2001 From: Harry Huang Date: Fri, 17 Nov 2017 14:53:44 +0800 Subject: Merge compass-tasks-osa and compass-tasks-k8s JIRA: COMPASS-568 rename compass-tasks to compass-tasks-base. add both osa and k8s support in compass-tasks Change-Id: I438f5b17e509d4cb751ced0ffe640ec70899882f Signed-off-by: Harry Huang --- compass-tasks-base/tasks/__init__.py | 13 ++ compass-tasks-base/tasks/client.py | 33 ++++ compass-tasks-base/tasks/tasks.py | 326 +++++++++++++++++++++++++++++++++++ 3 files changed, 372 insertions(+) create mode 100644 compass-tasks-base/tasks/__init__.py create mode 100644 compass-tasks-base/tasks/client.py create mode 100644 compass-tasks-base/tasks/tasks.py (limited to 'compass-tasks-base/tasks') diff --git a/compass-tasks-base/tasks/__init__.py b/compass-tasks-base/tasks/__init__.py new file mode 100644 index 0000000..4ee55a4 --- /dev/null +++ b/compass-tasks-base/tasks/__init__.py @@ -0,0 +1,13 @@ +# 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. diff --git a/compass-tasks-base/tasks/client.py b/compass-tasks-base/tasks/client.py new file mode 100644 index 0000000..ca7ad14 --- /dev/null +++ b/compass-tasks-base/tasks/client.py @@ -0,0 +1,33 @@ +# 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. + +"""Module to setup celery client. + + .. moduleauthor:: Xiaodong Wang + + .. note:: + If CELERY_CONFIG_MODULE is set in environment, load celery config from + the filename declared in CELERY_CONFIG_MODULE. +""" +import os + +from celery import Celery + + +celery = Celery(__name__) +if 'CELERY_CONFIG_MODULE' in os.environ: + celery.config_from_envvar('CELERY_CONFIG_MODULE') +else: + from compass.utils import celeryconfig_wrapper as celeryconfig + celery.config_from_object(celeryconfig) diff --git a/compass-tasks-base/tasks/tasks.py b/compass-tasks-base/tasks/tasks.py new file mode 100644 index 0000000..f649afd --- /dev/null +++ b/compass-tasks-base/tasks/tasks.py @@ -0,0 +1,326 @@ +# 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. + +"""Module to define celery tasks. + + .. moduleauthor:: Xiaodong Wang +""" +import logging + +from celery.signals import celeryd_init +from celery.signals import setup_logging + +from compass.actions import clean +from compass.actions import delete +from compass.actions import deploy +from compass.actions import install_callback +from compass.actions import patch +from compass.actions import poll_switch +from compass.actions import update_progress +from compass.db.api import adapter_holder as adapter_api +from compass.db.api import database +from compass.db.api import metadata_holder as metadata_api +from compass.log_analyzor import progress_calculator + +from compass.tasks.client import celery +from compass.utils import flags +from compass.utils import logsetting +from compass.utils import setting_wrapper as setting + + +@celeryd_init.connect() +def global_celery_init(**_): + """Initialization code.""" + flags.init() + flags.OPTIONS.logfile = setting.CELERY_LOGFILE + logsetting.init() + database.init() + adapter_api.load_adapters() + metadata_api.load_metadatas() + adapter_api.load_flavors() + progress_calculator.load_calculator_configurations() + + +@setup_logging.connect() +def tasks_setup_logging(**_): + """Setup logging options from compass setting.""" + flags.init() + flags.OPTIONS.logfile = setting.CELERY_LOGFILE + logsetting.init() + + +@celery.task(name='compass.tasks.pollswitch') +def pollswitch( + poller_email, ip_addr, credentials, + req_obj='mac', oper='SCAN' +): + """Query switch and return expected result. + + :param ip_addr: switch ip address. + :type ip_addr: str + :param credentials: switch credentials + :type credentials: dict + :param reqObj: the object requested to query from switch. + :type reqObj: str + :param oper: the operation to query the switch (SCAN, GET, SET). + :type oper: str + """ + try: + poll_switch.poll_switch( + poller_email, ip_addr, credentials, + req_obj=req_obj, oper=oper + ) + except Exception as error: + logging.exception(error) + + +@celery.task(name='compass.tasks.cluster_health') +def health_check(cluster_id, send_report_url, useremail): + """Verify the deployed cluster functionally works. + + :param cluster_id: ID of the cluster + :param send_report_url: The URL which reports should send back + """ + try: + deploy.health_check(cluster_id, send_report_url, useremail) + except Exception as error: + logging.exception(error) + + +@celery.task(name='compass.tasks.deploy_cluster') +def deploy_cluster(deployer_email, cluster_id, clusterhost_ids): + """Deploy the given cluster. + + :param cluster_id: id of the cluster + :type cluster_id: int + :param clusterhost_ids: the id of the hosts in the cluster + :type clusterhost_ids: list of int + """ + try: + deploy.deploy(cluster_id, clusterhost_ids, deployer_email) + except Exception as error: + logging.exception(error) + + +@celery.task(name='compass.tasks.redeploy_cluster') +def redeploy_cluster(deployer_email, cluster_id): + """Redeploy the given cluster. + + :param cluster_id: id of the cluster + :type cluster_id: int + """ + try: + deploy.redeploy(cluster_id, deployer_email) + except Exception as error: + logging.exception(error) + + +@celery.task(name='compass.tasks.patch_cluster') +def patch_cluster(patcher_email, cluster_id): + """Patch the existing cluster. + + :param cluster_id: id of the cluster + :type cluster_id: int + """ + try: + patch.patch(cluster_id, patcher_email) + except Exception as error: + logging.exception(error) + + +@celery.task(name='compass.tasks.reinstall_cluster') +def reinstall_cluster(installer_email, cluster_id, clusterhost_ids): + """reinstall the given cluster. + + :param cluster_id: id of the cluster + :type cluster_id: int + :param clusterhost_ids: the id of the hosts in the cluster + :type clusterhost_ids: list of int + """ + try: + deploy.redeploy(cluster_id, clusterhost_ids, installer_email) + except Exception as error: + logging.exception(error) + + +@celery.task(name='compass.tasks.delete_cluster') +def delete_cluster( + deleter_email, cluster_id, clusterhost_ids, + delete_underlying_host=False +): + """Delete the given cluster. + + :param cluster_id: id of the cluster + :type cluster_id: int + :param clusterhost_ids: the id of the hosts in the cluster + :type clusterhost_ids: list of int + """ + try: + delete.delete_cluster( + cluster_id, clusterhost_ids, deleter_email, + delete_underlying_host=delete_underlying_host + ) + except Exception as error: + logging.exception(error) + + +@celery.task(name='compass.tasks.delete_cluster_host') +def delete_cluster_host( + deleter_email, cluster_id, host_id, + delete_underlying_host=False +): + """Delte the given cluster host. + + :param cluster_id: id of the cluster + :type cluster_id: int + :param host_id: id of the host + :type host_id: int + """ + try: + delete.delete_cluster_host( + cluster_id, host_id, deleter_email, + delete_underlying_host=delete_underlying_host + ) + except Exception as error: + logging.exception(error) + + +@celery.task(name='compass.tasks.delete_host') +def delete_host(deleter_email, host_id, cluster_ids): + """Delete the given host. + + :param host_id: id of the host + :type host_id: int + :param cluster_ids: list of cluster id + :type cluster_ids: list of int + """ + try: + delete.delete_host( + host_id, cluster_ids, deleter_email + ) + except Exception as error: + logging.exception(error) + + +@celery.task(name='compass.tasks.clean_os_installer') +def clean_os_installer( + os_installer_name, os_installer_settings +): + """Clean os installer.""" + try: + clean.clean_os_installer( + os_installer_name, os_installer_settings + ) + except Exception as error: + logging.excception(error) + + +@celery.task(name='compass.tasks.clean_package_installer') +def clean_package_installer( + package_installer_name, package_installer_settings +): + """Clean package installer.""" + try: + clean.clean_package_installer( + package_installer_name, package_installer_settings + ) + except Exception as error: + logging.excception(error) + + +@celery.task(name='compass.tasks.poweron_host') +def poweron_host(host_id): + """Deploy the given cluster.""" + pass + + +@celery.task(name='compass.tasks.poweroff_host') +def poweroff_host(host_id): + """Deploy the given cluster.""" + pass + + +@celery.task(name='compass.tasks.reset_host') +def reset_host(host_id): + """Deploy the given cluster.""" + pass + + +@celery.task(name='compass.tasks.poweron_machine') +def poweron_machine(machine_id): + """Deploy the given cluster.""" + pass + + +@celery.task(name='compass.tasks.poweroff_machine') +def poweroff_machine(machine_id): + """Deploy the given cluster.""" + pass + + +@celery.task(name='compass.tasks.reset_machine') +def reset_machine(machine_id): + """Deploy the given cluster.""" + pass + + +@celery.task(name='compass.tasks.os_installed') +def os_installed( + host_id, clusterhosts_ready, + clusters_os_ready +): + """callback when os is installed.""" + try: + install_callback.os_installed( + host_id, clusterhosts_ready, + clusters_os_ready + ) + except Exception as error: + logging.exception(error) + + +@celery.task(name='compass.tasks.package_installed') +def package_installed( + cluster_id, host_id, cluster_ready, host_ready +): + """callback when package is installed.""" + try: + install_callback.package_installed( + cluster_id, host_id, cluster_ready, host_ready + ) + except Exception as error: + logging.exception(error) + + +@celery.task(name='compass.tasks.cluster_installed') +def cluster_installed( + cluster_id, clusterhosts_ready +): + """callback when package is installed.""" + try: + install_callback.cluster_installed( + cluster_id, clusterhosts_ready + ) + except Exception as error: + logging.exception(error) + + +@celery.task(name='compass.tasks.update_progress') +def update_clusters_progress(): + """Calculate the installing progress of the given cluster.""" + logging.info('update_clusters_progress') + try: + update_progress.update_progress() + except Exception as error: + logging.exception(error) -- cgit 1.2.3-korg