partnercenter/azext_partnercenter/operations/marketplace_offer_package/custom.py (48 lines of code) (raw):
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
# pylint: disable=line-too-long
# pylint: disable=too-many-positional-arguments
from azure.cli.core.azclierror import ResourceNotFoundError, InvalidArgumentValueError
from knack.cli import CLIError
from azext_partnercenter.models import OfferType
from azext_partnercenter import ISSUES_URL
from ._cnab_util import bundle, verify
from ._builders import _create_package_builder
def build_package(cmd, client, offer_id, manifest_file=None, src_dir=None, out_dir=None, package_type=None, app_installer_version="latest"):
if manifest_file is not None:
return _build_container_package_by_offer_type(
client, offer_id, manifest_file, _build_cnab_bundle
)
if package_type is not None:
builder = _create_package_builder(cmd, package_type,
offer_id=offer_id,
version=app_installer_version,
src_dir=src_dir,
out_dir=out_dir)
return builder.build()
raise CLIError(
f"{offer_id} offer package could not be built."
)
def verify_package(client, offer_id, manifest_file=None):
return _build_container_package_by_offer_type(
client, offer_id, manifest_file, _verify_cnab_bundle
)
def _build_container_package_by_offer_type(client, offer_id, manifest_file, action):
offer = client.get(offer_id)
if offer is None:
raise ResourceNotFoundError(
"An Offer was not found with that ID.",
"Please check the value set for parameter --offer-id.",
)
offer_type = offer.type
if offer_type == OfferType.AZURECONTAINER:
offer_setup = client.get_setup(offer_id)
# if the offer type is "AzureApplication" AND the offer is setup to sell through Microsoft, we can build a CNAB bundle for it
if offer_setup.sell_through_microsoft:
return action(manifest_file)
raise InvalidArgumentValueError(
f"{offer_id} offer is not setup to support a CNAB bundle. The offer type must be {OfferType.AZUREAPPLICATION} and setup to sell through Microsoft",
f"Update the offer's setup to sell through Microsoft.\n\n az partercenter marketplace offer setup --offer-id {offer_id} --sell-through-microsoft",
)
# if we got to this point, the offer type isn't supported
raise CLIError(
f"{offer_id} offer is a {offer_type} type which is currently not supported by the CLI. Please submit an issue to get support at {ISSUES_URL}."
)
def _verify_cnab_bundle(manifest_file):
verify(manifest_file)
def _build_cnab_bundle(manifest_file):
bundle(manifest_file)