// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package arm

import "github.com/Azure/azure-service-operator/v2/pkg/genruntime"

type AvailabilitySet_Spec struct {
	// Location: The geo-location where the resource lives
	Location *string `json:"location,omitempty"`
	Name     string  `json:"name,omitempty"`

	// Properties: The instance view of a resource.
	Properties *AvailabilitySetProperties `json:"properties,omitempty"`

	// Sku: Sku of the availability set, only name is required to be set. See AvailabilitySetSkuTypes for possible set of
	// values. Use 'Aligned' for virtual machines with managed disks and 'Classic' for virtual machines with unmanaged disks.
	// Default value is 'Classic'.
	Sku *Sku `json:"sku,omitempty"`

	// Tags: Resource tags.
	Tags map[string]string `json:"tags,omitempty"`
}

var _ genruntime.ARMResourceSpec = &AvailabilitySet_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2024-11-01"
func (availabilitySet AvailabilitySet_Spec) GetAPIVersion() string {
	return "2024-11-01"
}

// GetName returns the Name of the resource
func (availabilitySet *AvailabilitySet_Spec) GetName() string {
	return availabilitySet.Name
}

// GetType returns the ARM Type of the resource. This is always "Microsoft.Compute/availabilitySets"
func (availabilitySet *AvailabilitySet_Spec) GetType() string {
	return "Microsoft.Compute/availabilitySets"
}

// The instance view of a resource.
type AvailabilitySetProperties struct {
	// PlatformFaultDomainCount: Fault Domain count.
	PlatformFaultDomainCount *int `json:"platformFaultDomainCount,omitempty"`

	// PlatformUpdateDomainCount: Update Domain count.
	PlatformUpdateDomainCount *int `json:"platformUpdateDomainCount,omitempty"`

	// ProximityPlacementGroup: Specifies information about the proximity placement group that the availability set should be
	// assigned to. Minimum api-version: 2018-04-01.
	ProximityPlacementGroup *SubResource `json:"proximityPlacementGroup,omitempty"`

	// ScheduledEventsPolicy: Specifies Redeploy, Reboot and ScheduledEventsAdditionalPublishingTargets Scheduled Event related
	// configurations for the availability set.
	ScheduledEventsPolicy *ScheduledEventsPolicy `json:"scheduledEventsPolicy,omitempty"`
}

// Describes a virtual machine scale set sku. NOTE: If the new VM SKU is not supported on the hardware the scale set is
// currently on, you need to deallocate the VMs in the scale set before you modify the SKU name.
type Sku struct {
	// Capacity: Specifies the number of virtual machines in the scale set.
	Capacity *int `json:"capacity,omitempty"`

	// Name: The sku name.
	Name *string `json:"name,omitempty"`

	// Tier: Specifies the tier of virtual machines in a scale set.
	// Possible Values:
	// Standard
	// Basic
	Tier *string `json:"tier,omitempty"`
}

// Specifies Redeploy, Reboot and ScheduledEventsAdditionalPublishingTargets Scheduled Event related configurations.
type ScheduledEventsPolicy struct {
	// ScheduledEventsAdditionalPublishingTargets: The configuration parameters used while publishing
	// scheduledEventsAdditionalPublishingTargets.
	ScheduledEventsAdditionalPublishingTargets *ScheduledEventsAdditionalPublishingTargets `json:"scheduledEventsAdditionalPublishingTargets,omitempty"`

	// UserInitiatedReboot: The configuration parameters used while creating userInitiatedReboot scheduled event setting
	// creation.
	UserInitiatedReboot *UserInitiatedReboot `json:"userInitiatedReboot,omitempty"`

	// UserInitiatedRedeploy: The configuration parameters used while creating userInitiatedRedeploy scheduled event setting
	// creation.
	UserInitiatedRedeploy *UserInitiatedRedeploy `json:"userInitiatedRedeploy,omitempty"`
}

type SubResource struct {
	// Id: Resource Id
	Id *string `json:"id,omitempty"`
}

type ScheduledEventsAdditionalPublishingTargets struct {
	// EventGridAndResourceGraph: The configuration parameters used while creating eventGridAndResourceGraph Scheduled Event
	// setting.
	EventGridAndResourceGraph *EventGridAndResourceGraph `json:"eventGridAndResourceGraph,omitempty"`
}

// Specifies Reboot related Scheduled Event related configurations.
type UserInitiatedReboot struct {
	// AutomaticallyApprove: Specifies Reboot Scheduled Event related configurations.
	AutomaticallyApprove *bool `json:"automaticallyApprove,omitempty"`
}

// Specifies Redeploy related Scheduled Event related configurations.
type UserInitiatedRedeploy struct {
	// AutomaticallyApprove: Specifies Redeploy Scheduled Event related configurations.
	AutomaticallyApprove *bool `json:"automaticallyApprove,omitempty"`
}

// Specifies eventGridAndResourceGraph related Scheduled Event related configurations.
type EventGridAndResourceGraph struct {
	// Enable: Specifies if event grid and resource graph is enabled for Scheduled event related configurations.
	Enable *bool `json:"enable,omitempty"`
}
