summaryrefslogtreecommitdiffstats
path: root/compass-deck/tasks
diff options
context:
space:
mode:
Diffstat (limited to 'compass-deck/tasks')
-rw-r--r--compass-deck/tasks/__init__.py13
-rw-r--r--compass-deck/tasks/client.py33
-rw-r--r--compass-deck/tasks/tasks.py326
3 files changed, 372 insertions, 0 deletions
diff --git a/compass-deck/tasks/__init__.py b/compass-deck/tasks/__init__.py
new file mode 100644
index 0000000..4ee55a4
--- /dev/null
+++ b/compass-deck/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-deck/tasks/client.py b/compass-deck/tasks/client.py
new file mode 100644
index 0000000..ca7ad14
--- /dev/null
+++ b/compass-deck/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 <xiaodongwang@huawei.com>
+
+ .. 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-deck/tasks/tasks.py b/compass-deck/tasks/tasks.py
new file mode 100644
index 0000000..f649afd
--- /dev/null
+++ b/compass-deck/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 <xiaodongwang@huawei.com>
+"""
+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)