FindPlaybookCustomDependencies

Find custom scripts and integration dependencies used inside of playbooks.

python · Community Common Scripts

Source

import demistomock as demisto  # noqa: F401
from CommonServerPython import *  # noqa: F401


def get_custom_scripts_playbooks():
    results = {}
    final_results = []
    req_response = demisto.executeCommand(
        "core-api-post", {"uri": "automation/search", "body": '{"query":"system:F AND hidden:F AND deprecated:F"}'}
    )
    if is_error(req_response):
        raise DemistoException(f"error occurred when trying to retrieve the data error: {req_response}")
    list_scripts = req_response[0].get("Contents", {}).get("response", {}).get("scripts")
    if not list_scripts:
        return_results("No custom scripts found.")
    else:
        for item in list_scripts:
            results["ScriptName"] = item["name"]
            results["Type"] = item["type"]
            results["User"] = item["user"]
            results["Modified"] = item["modified"]
            query = {"query": "script.name:" + str(item["name"]) + " AND hidden:F AND deprecated:F"}
            res = demisto.executeCommand("core-api-post", {"uri": "playbook/search", "body": query})
            if is_error(res):
                raise DemistoException(f"error occurred when trying to retrieve the data error: {res}")
            playbooksUsingScripts = res[0].get("Contents", {}).get("response", {}).get("playbooks")
            if not playbooksUsingScripts:
                pbnamelist = []
                for item in playbooksUsingScripts:
                    pbnamelist.append(item["name"])
                results["playbooksUsingScript"] = pbnamelist
            else:
                results["playbooksUsingScript"] = "Not used in any playbooks"
            final_results.append(results.copy())
        markdown = ""
        markdown = tableToMarkdown("Custom scripts Used in Playbooks", final_results)
        command_results_results = CommandResults(
            readable_output=markdown,
            outputs_prefix="FindPlaybookCustomDependencies.CustomDependencies.CustomScripts",
            outputs_key_field="ScriptName",
            outputs=final_results,
        )
        return_results(command_results_results)


def get_integrations_playbooks() -> None:
    results = {}
    final_results = []
    incident = demisto.incidents()[0]
    accountName = incident.get("account")
    accountName = f"acc_{accountName}" if accountName != "" else ""
    enabledIntegrations = demisto.executeCommand(
        "core-api-post",
        {
            "uri": f"{accountName}/settings/integration/search",
            "body": {"preferences": "true"},
        },
    )[0]["Contents"]["response"]["instances"]
    if enabledIntegrations is not None:
        integrations_list = []
        for item in enabledIntegrations:
            integrations_list.append(item["brand"])
        integrations_list = list(set(integrations_list))
        for brand in integrations_list:
            results["IntegrationBrands"] = brand
            string_brand = f'"{str(brand)}"'
            query = {"query": "brands:" + str(string_brand) + " AND hidden:F AND deprecated:F"}
            res = demisto.executeCommand("core-api-post", {"uri": "playbook/search", "body": query})
            if is_error(res):
                raise DemistoException(f"error occurred when trying to retrieve the data error: {res}")
            playbooksUsingIntegrations = res[0].get("Contents", {}).get("response", {}).get("playbooks")
            if playbooksUsingIntegrations is not None:
                pbnamelist = []
                for item in playbooksUsingIntegrations:
                    pbnamelist.append(item["name"])
                results["playbooksUsingIntegrations"] = pbnamelist
            else:
                results["playbooksUsingIntegrations"] = "Not used in any playbooks"
            final_results.append(results.copy())
        markdown = ""
        markdown = tableToMarkdown("Integrations Used in Playbooks", final_results)
        command_results_results = CommandResults(
            readable_output=markdown,
            outputs_prefix="FindPlaybookCustomDependencies.CustomDependencies.CustomIntegrations",
            outputs_key_field="IntegrationBrand",
            outputs=final_results,
        )
        return_results(command_results_results)
    else:
        return_results("No integrations are enabled")


def main():
    mode = str(demisto.args()["mode"])
    if mode == "scripts":
        get_custom_scripts_playbooks()
    elif mode == "integrations":
        get_integrations_playbooks()
    else:
        return_error("Please enter a valid mode. Available modes: scripts, integrations.")


if __name__ in ("__main__", "__builtin__", "builtins"):
    main()

README

Find custom scripts and integration dependencies used inside of playbooks.

Script Data


Name Description
Script Type python3

Dependencies


This script uses the following commands and scripts.

  • core-api-post
  • Core REST API

Inputs


Argument Name Description
mode Finds all the playbooks used by custom scripts and enabled integrations.

Outputs


Path Description Type
FindPlaybookCustomDependencies.CustomDependencies.CustomScripts Context Path for the outputs of the playbooks using a custom script Unknown
FindPlaybookCustomDependencies.CustomDependencies.CustomIntegrations Context Path for the outputs of the playbooks using a custom integrations Unknown