diff --git a/apps/assets/api/node.py b/apps/assets/api/node.py index 78cd7a27a..3c6ff292d 100644 --- a/apps/assets/api/node.py +++ b/apps/assets/api/node.py @@ -18,10 +18,12 @@ from rest_framework.views import APIView from rest_framework.response import Response from rest_framework_bulk import BulkModelViewSet from django.utils.translation import ugettext_lazy as _ +from django.shortcuts import get_object_or_404 from common.utils import get_logger, get_object_or_none from ..hands import IsSuperUser from ..models import Node +from ..tasks import update_assets_hardware_info_util, test_asset_connectability_util from .. import serializers @@ -29,7 +31,8 @@ logger = get_logger(__file__) __all__ = [ 'NodeViewSet', 'NodeChildrenApi', 'NodeAddAssetsApi', 'NodeRemoveAssetsApi', - 'NodeAddChildrenApi', + 'NodeAddChildrenApi', 'RefreshNodeHardwareInfoApi', + 'TestNodeConnectiveApi' ] @@ -117,3 +120,30 @@ class NodeRemoveAssetsApi(generics.UpdateAPIView): instance = self.get_object() if instance != Node.root(): instance.assets.remove(*tuple(assets)) + + +class RefreshNodeHardwareInfoApi(APIView): + permission_classes = (IsSuperUser,) + model = Node + + def get(self, request, *args, **kwargs): + node_id = kwargs.get('pk') + node = get_object_or_404(self.model, id=node_id) + assets = node.assets.all() + task_name = _("Refresh node assets hardware info: {}".format(node.name)) + update_assets_hardware_info_util.delay(assets, task_name=task_name) + return Response({"msg": "Task created"}) + + +class TestNodeConnectiveApi(APIView): + permission_classes = (IsSuperUser,) + model = Node + + def get(self, request, *args, **kwargs): + node_id = kwargs.get('pk') + node = get_object_or_404(self.model, id=node_id) + assets = node.assets.all() + task_name = _("Test node assets connective: {}".format(node.name)) + test_asset_connectability_util.delay(assets, task_name=task_name) + return Response({"msg": "Task created"}) + diff --git a/apps/assets/signals_handler.py b/apps/assets/signals_handler.py index 2577c7a6c..fe5508720 100644 --- a/apps/assets/signals_handler.py +++ b/apps/assets/signals_handler.py @@ -21,7 +21,7 @@ def update_asset_hardware_info_on_created(asset): def test_asset_conn_on_created(asset): logger.debug("Test asset `{}` connectability".format(asset)) - test_asset_connectability_util.delay(asset) + test_asset_connectability_util.delay([asset]) def set_asset_root_node(asset): diff --git a/apps/assets/tasks.py b/apps/assets/tasks.py index be9f75152..a6ffd2270 100644 --- a/apps/assets/tasks.py +++ b/apps/assets/tasks.py @@ -213,12 +213,12 @@ def test_admin_user_connectability_manual(admin_user): @shared_task -def test_asset_connectability_util(asset, task_name=None): +def test_asset_connectability_util(assets, task_name=None): from ops.utils import update_or_create_ansible_task if task_name is None: - task_name = _("Test asset connectability") - hosts = [asset.hostname] + task_name = _("Test assets connectability") + hosts = [asset.hostname for asset in assets] if not hosts: logger.info("No hosts, passed") return {} @@ -229,18 +229,17 @@ def test_asset_connectability_util(asset, task_name=None): ) result = task.run() summary = result[1] - if summary.get('dark'): - cache.set(const.ASSET_ADMIN_CONN_CACHE_KEY.format(asset.hostname), 0, - CACHE_MAX_TIME) - else: - cache.set(const.ASSET_ADMIN_CONN_CACHE_KEY.format(asset.hostname), 1, - CACHE_MAX_TIME) + for k in summary.get('dark'): + cache.set(const.ASSET_ADMIN_CONN_CACHE_KEY.format(k), 0, CACHE_MAX_TIME) + + for k in summary.get('contacted'): + cache.set(const.ASSET_ADMIN_CONN_CACHE_KEY.format(k), 1, CACHE_MAX_TIME) return summary @shared_task def test_asset_connectability_manual(asset): - summary = test_asset_connectability_util(asset) + summary = test_asset_connectability_util([asset]) if summary.get('dark'): return False, summary['dark'] diff --git a/apps/assets/templates/assets/asset_list.html b/apps/assets/templates/assets/asset_list.html index 628d0f905..da1b0be58 100644 --- a/apps/assets/templates/assets/asset_list.html +++ b/apps/assets/templates/assets/asset_list.html @@ -119,6 +119,8 @@