diff --git a/apps/common/tree.py b/apps/common/tree.py index 1ffe4347e..fbade582e 100644 --- a/apps/common/tree.py +++ b/apps/common/tree.py @@ -98,4 +98,5 @@ class TreeNodeSerializer(serializers.Serializer): isParent = serializers.BooleanField(default=False) open = serializers.BooleanField(default=False) iconSkin = serializers.CharField(max_length=128, allow_blank=True) + nocheck = serializers.BooleanField(default=False) meta = serializers.JSONField() diff --git a/apps/ops/templates/ops/command_execution_create.html b/apps/ops/templates/ops/command_execution_create.html index 838c81430..8912cbe71 100644 --- a/apps/ops/templates/ops/command_execution_create.html +++ b/apps/ops/templates/ops/command_execution_create.html @@ -138,11 +138,11 @@ } }, callback: { - onCheck: onCheck + onCheck: onCheck, + onClick: onClick, } }; - $.get(url, function (data, status) { $.fn.zTree.init($("#assetTree"), setting, data); zTree = $.fn.zTree.getZTreeObj("assetTree"); @@ -152,25 +152,29 @@ }); }); } - + function onClick(event, treeId, treeNode, clickFlag){ + if (treeNode.meta.type === 'asset'){ + let protocolsStr = treeNode.meta.asset.protocols + ''; + if (protocolsStr.indexOf('ssh/') === -1){ + toastr.warning("{% trans "Asset configuration does not include the SSH protocol" %}"); + } + } + } function getSelectedAssetsNode() { var nodes = zTree.getCheckedNodes(true); var assetsNodeId = []; var assetsNode = []; nodes.forEach(function (node) { if (node.meta.type === 'asset' && !node.isHidden) { - var protocols = node.meta.asset.protocols; - protocols.forEach(function (val) { - if (assetsNodeId.indexOf(node.id) === -1 && val.indexOf("ssh") > -1) { - assetsNodeId.push(node.id); - assetsNode.push(node) - } - }); + var protocolsStr = node.meta.asset.protocols + ''; + if (assetsNodeId.indexOf(node.id) === -1 && protocolsStr.indexOf('ssh') > -1){ + assetsNodeId.push(node.id); + assetsNode.push(node) + } } }); return assetsNode; } - function onCheck(e, treeId, treeNode) { var nodes = getSelectedAssetsNode(); var nodes_names = nodes.map(function (node) { diff --git a/apps/perms/utils/asset_permission.py b/apps/perms/utils/asset_permission.py index 27c839d59..3ba5c68d6 100644 --- a/apps/perms/utils/asset_permission.py +++ b/apps/perms/utils/asset_permission.py @@ -481,6 +481,7 @@ class ParserNode: 'isParent': False, 'open': False, 'iconSkin': icon_skin, + 'nocheck': not asset.has_protocol('ssh'), 'meta': { 'type': 'asset', 'asset': {