// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// Code generated by Microsoft (R) AutoRest Code Generator. DO NOT EDIT.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.

package armextensiontypes

// ClusterScopeSettings - Extension scope settings
type ClusterScopeSettings struct {
	// Extension scope settings
	Properties *ClusterScopeSettingsProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// ClusterScopeSettingsProperties - Extension scope settings
type ClusterScopeSettingsProperties struct {
	// Describes if multiple instances of the extension are allowed
	AllowMultipleInstances *bool

	// Default extension release namespace
	DefaultReleaseNamespace *string
}

// ExtensionType - The Extension Type object.
type ExtensionType struct {
	Properties *ExtensionTypeProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

type ExtensionTypeProperties struct {
	// Description of the extension type
	Description *string

	// Should an identity for this cluster resource be created
	IsManagedIdentityRequired *bool

	// Is this Extension Type a system extension.
	IsSystemExtension *bool

	// Plan information only for the Marketplace Extension Type.
	PlanInfo *ExtensionTypePropertiesPlanInfo

	// Name of the publisher for the Extension Type
	Publisher *string

	// Cluster Types supported for this Extension Type.
	SupportedClusterTypes []*string

	// Supported Kubernetes Scopes for this Extension Type.
	SupportedScopes *ExtensionTypePropertiesSupportedScopes
}

// ExtensionTypePropertiesPlanInfo - Plan information only for the Marketplace Extension Type.
type ExtensionTypePropertiesPlanInfo struct {
	// Offer or Product ID of the Marketplace Extension Type.
	OfferID *string

	// Plan ID of the Marketplace Extension Type.
	PlanID *string

	// Publisher ID of the Marketplace Extension Type.
	PublisherID *string
}

// ExtensionTypePropertiesSupportedScopes - Supported Kubernetes Scopes for this Extension Type.
type ExtensionTypePropertiesSupportedScopes struct {
	// Extension scope settings
	ClusterScopeSettings *ClusterScopeSettings

	// The default scope of the extension type. This scope will be used if the user does not provide a scope while creating an
	// extension.
	DefaultScope *string
}

// ExtensionTypeVersionForReleaseTrain - The Extension Type Version object.
type ExtensionTypeVersionForReleaseTrain struct {
	Properties *ExtensionTypeVersionForReleaseTrainProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

type ExtensionTypeVersionForReleaseTrainProperties struct {
	// A list of supported cluster types for this version of the Extension Type
	SupportedClusterTypes []*string

	// The list of supported Kubernetes cluster versions for this extension type
	UnsupportedKubernetesVersions *ExtensionTypeVersionForReleaseTrainPropertiesUnsupportedKubernetesVersions

	// The version number for the extension type
	Version *string
}

// ExtensionTypeVersionForReleaseTrainPropertiesUnsupportedKubernetesVersions - The list of supported Kubernetes cluster versions
// for this extension type
type ExtensionTypeVersionForReleaseTrainPropertiesUnsupportedKubernetesVersions struct {
	Appliances         []*ExtensionTypeVersionUnsupportedKubernetesMatrixItem
	ConnectedCluster   []*ExtensionTypeVersionUnsupportedKubernetesMatrixItem
	ManagedCluster     []*ExtensionTypeVersionUnsupportedKubernetesMatrixItem
	ProvisionedCluster []*ExtensionTypeVersionUnsupportedKubernetesMatrixItem
}

// ExtensionTypeVersionUnsupportedKubernetesMatrixItem - The list of Kubernetes Distribution and Versions that are not supported
// by this version of this Extension Type
type ExtensionTypeVersionUnsupportedKubernetesMatrixItem struct {
	// The list of Kubernetes Cluster Distribution Names not supported
	Distributions []*string

	// The list of Kubernetes Versions not supported by the list of Kubernetes Cluster Distribution names in this object
	UnsupportedVersions []*string
}

// ExtensionTypeVersionsList - List Extension Type Versions. It contains a list of ExtensionTypeVersionForReleaseTrain objects.
type ExtensionTypeVersionsList struct {
	// READ-ONLY; URL to get the next set of extension objects, if any.
	NextLink *string

	// READ-ONLY; List of Extension Type Versions for an Extension Type in a Release Train.
	Value []*ExtensionTypeVersionForReleaseTrain
}

// List Extension Types. It contains a list of ExtensionType objects and a URL link to get the next set of results.
type List struct {
	// READ-ONLY; URL to get the next set of extension type objects, if any.
	NextLink *string

	// READ-ONLY; List of Extension Types.
	Value []*ExtensionType
}
