CustomPackInstaller

Custom Packs Installer for the Content Management pack.

python · XSOAR CI/CD

Source

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

SCRIPT_NAME = "CustomPackInstaller"


def install_custom_pack(pack_id: str, skip_verify: bool, skip_validation: bool, instance_name: str = "") -> tuple[bool, str]:
    """Installs a custom pack in the machine.

    Args:
        pack_id (str): The ID of the pack to install.
        skip_verify (bool): If true will skip pack signature validation.
        skip_validation (bool) if true will skip all pack validations.
        instance_name (str) Core REST API instance name.

    Returns:
        - bool. Whether the installation of the pack was successful or not.
        - str. In case of failure, the error message.

    Notes:
        Assumptions: The zipped file is in the war-room, and the context includes the data related to it.

    """
    pack_file_entry_id = ""

    instance_context = demisto.context()
    context_files = instance_context.get("File", [])
    if not isinstance(context_files, list):
        context_files = [context_files]

    for file_in_context in context_files:
        file_in_context_name = file_in_context.get("Name", "")
        if file_in_context_name.split("/")[-1] == f"{pack_id}.zip" or file_in_context_name == f"{pack_id}.zip":
            pack_file_entry_id = file_in_context.get("EntryID")
            break

    if pack_file_entry_id:
        args = {"entry_id": pack_file_entry_id, "skip_verify": str(skip_verify), "skip_validation": str(skip_validation)}
        if instance_name:
            args["using"] = instance_name

        status, res = execute_command(
            "core-api-install-packs",
            args,
            fail_on_error=False,
        )

        if not status:
            error_message = f"{SCRIPT_NAME} - {res}"
            demisto.debug(error_message)
            return False, f"Issue occurred while installing the pack on the machine.\n{res}"

    else:
        error_message = "Could not find file entry ID."
        demisto.debug(f'{SCRIPT_NAME}, "{pack_id}" - {error_message}.')
        return False, error_message

    return True, ""


def main():
    args = demisto.args()
    pack_id = args.get("pack_id")
    skip_verify = args.get("skip_verify")
    skip_validation = args.get("skip_validation")
    instance_name = args.get("using")

    try:
        installation_status, error_message = install_custom_pack(pack_id, skip_verify, skip_validation, instance_name)

        return_results(
            CommandResults(
                outputs_prefix="ConfigurationSetup.CustomPacks",
                outputs_key_field="packid",
                outputs={
                    "packid": pack_id,
                    "installationstatus": "Success." if installation_status else error_message,
                },
            )
        )

        if not installation_status:
            return_error(error_message)

    except Exception as e:
        return_error(f'{SCRIPT_NAME} - Error occurred while installing custom pack "{pack_id}".\n{e}')


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

README

Custom Packs Installer for the Content Management pack.

Script Data


Name Description
Script Type python3
Tags configuration, Content Management
Cortex XSOAR Version 6.0.0

Used In


This script is used in the following playbooks and scripts.

  • Configuration Setup

Inputs


Argument Name Description
pack_id The ID of the pack to install.
skip_verify if true will skip pack signature validation, Available from 6.5.0 server version.
skip_validation if true will skip all pack validations, use this flag just to migrate from custom content entities to custom content packs, Available from 6.6.0 server version.

Outputs


Path Description Type
ConfigurationSetup.CustomPacks.installationstatus The installtion status of the required pack. Unknown