Scaling Plan
Manages a Virtual Desktop Scaling Plan.
Disclaimers
Note: Scaling Plans are currently in preview and are only supported in a limited number of regions. Both the Scaling Plan and any referenced Host Pools must be deployed in a supported region. Autoscale (preview) for Azure Virtual Desktop host pools. Note: Scaling Plans require specific permissions to be granted to the Windows Virtual Desktop application before a 'host_pool' can be configured. Required Permissions for Scaling Plans.
Example Usage
import * as pulumi from "@pulumi/pulumi";
import * as azure from "@pulumi/azure";
import * as azuread from "@pulumi/azuread";
import * as random from "@pulumi/random";
const exampleRandomUuid = new random.RandomUuid("example", {});
const exampleResourceGroup = new azure.core.ResourceGroup("example", {
name: "example-resources",
location: "West Europe",
});
const exampleRoleDefinition = new azure.authorization.RoleDefinition("example", {
name: "AVD-AutoScale",
scope: exampleResourceGroup.id,
description: "AVD AutoScale Role",
permissions: [{
actions: [
"Microsoft.Insights/eventtypes/values/read",
"Microsoft.Compute/virtualMachines/deallocate/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/read",
"Microsoft.DesktopVirtualization/hostpools/read",
"Microsoft.DesktopVirtualization/hostpools/write",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/read",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/write",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/delete",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/sendMessage/action",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read",
],
notActions: [],
}],
assignableScopes: [exampleResourceGroup.id],
});
const example = azuread.getServicePrincipal({
displayName: "Azure Virtual Desktop",
});
const exampleAssignment = new azure.authorization.Assignment("example", {
name: exampleRandomUuid.result,
scope: exampleResourceGroup.id,
roleDefinitionId: exampleRoleDefinition.roleDefinitionResourceId,
principalId: example.then(example => example.id),
skipServicePrincipalAadCheck: true,
});
const exampleHostPool = new azure.desktopvirtualization.HostPool("example", {
name: "example-hostpool",
location: exampleResourceGroup.location,
resourceGroupName: exampleResourceGroup.name,
type: "Pooled",
validateEnvironment: true,
loadBalancerType: "BreadthFirst",
});
const exampleScalingPlan = new azure.desktopvirtualization.ScalingPlan("example", {
name: "example-scaling-plan",
location: exampleResourceGroup.location,
resourceGroupName: exampleResourceGroup.name,
friendlyName: "Scaling Plan Example",
description: "Example Scaling Plan",
timeZone: "GMT Standard Time",
schedules: [{
name: "Weekdays",
daysOfWeeks: [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
],
rampUpStartTime: "05:00",
rampUpLoadBalancingAlgorithm: "BreadthFirst",
rampUpMinimumHostsPercent: 20,
rampUpCapacityThresholdPercent: 10,
peakStartTime: "09:00",
peakLoadBalancingAlgorithm: "BreadthFirst",
rampDownStartTime: "19:00",
rampDownLoadBalancingAlgorithm: "DepthFirst",
rampDownMinimumHostsPercent: 10,
rampDownForceLogoffUsers: false,
rampDownWaitTimeMinutes: 45,
rampDownNotificationMessage: "Please log off in the next 45 minutes...",
rampDownCapacityThresholdPercent: 5,
rampDownStopHostsWhen: "ZeroSessions",
offPeakStartTime: "22:00",
offPeakLoadBalancingAlgorithm: "DepthFirst",
}],
hostPools: [{
hostpoolId: exampleHostPool.id,
scalingPlanEnabled: true,
}],
});
import pulumi
import pulumi_azure as azure
import pulumi_azuread as azuread
import pulumi_random as random
example_random_uuid = random.RandomUuid("example")
example_resource_group = azure.core.ResourceGroup("example",
name="example-resources",
location="West Europe")
example_role_definition = azure.authorization.RoleDefinition("example",
name="AVD-AutoScale",
scope=example_resource_group.id,
description="AVD AutoScale Role",
permissions=[{
"actions": [
"Microsoft.Insights/eventtypes/values/read",
"Microsoft.Compute/virtualMachines/deallocate/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/read",
"Microsoft.DesktopVirtualization/hostpools/read",
"Microsoft.DesktopVirtualization/hostpools/write",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/read",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/write",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/delete",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/sendMessage/action",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read",
],
"not_actions": [],
}],
assignable_scopes=[example_resource_group.id])
example = azuread.get_service_principal(display_name="Azure Virtual Desktop")
example_assignment = azure.authorization.Assignment("example",
name=example_random_uuid.result,
scope=example_resource_group.id,
role_definition_id=example_role_definition.role_definition_resource_id,
principal_id=example.id,
skip_service_principal_aad_check=True)
example_host_pool = azure.desktopvirtualization.HostPool("example",
name="example-hostpool",
location=example_resource_group.location,
resource_group_name=example_resource_group.name,
type="Pooled",
validate_environment=True,
load_balancer_type="BreadthFirst")
example_scaling_plan = azure.desktopvirtualization.ScalingPlan("example",
name="example-scaling-plan",
location=example_resource_group.location,
resource_group_name=example_resource_group.name,
friendly_name="Scaling Plan Example",
description="Example Scaling Plan",
time_zone="GMT Standard Time",
schedules=[{
"name": "Weekdays",
"days_of_weeks": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
],
"ramp_up_start_time": "05:00",
"ramp_up_load_balancing_algorithm": "BreadthFirst",
"ramp_up_minimum_hosts_percent": 20,
"ramp_up_capacity_threshold_percent": 10,
"peak_start_time": "09:00",
"peak_load_balancing_algorithm": "BreadthFirst",
"ramp_down_start_time": "19:00",
"ramp_down_load_balancing_algorithm": "DepthFirst",
"ramp_down_minimum_hosts_percent": 10,
"ramp_down_force_logoff_users": False,
"ramp_down_wait_time_minutes": 45,
"ramp_down_notification_message": "Please log off in the next 45 minutes...",
"ramp_down_capacity_threshold_percent": 5,
"ramp_down_stop_hosts_when": "ZeroSessions",
"off_peak_start_time": "22:00",
"off_peak_load_balancing_algorithm": "DepthFirst",
}],
host_pools=[{
"hostpool_id": example_host_pool.id,
"scaling_plan_enabled": True,
}])
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Azure = Pulumi.Azure;
using AzureAD = Pulumi.AzureAD;
using Random = Pulumi.Random;
return await Deployment.RunAsync(() =>
{
var exampleRandomUuid = new Random.RandomUuid("example");
var exampleResourceGroup = new Azure.Core.ResourceGroup("example", new()
{
Name = "example-resources",
Location = "West Europe",
});
var exampleRoleDefinition = new Azure.Authorization.RoleDefinition("example", new()
{
Name = "AVD-AutoScale",
Scope = exampleResourceGroup.Id,
Description = "AVD AutoScale Role",
Permissions = new[]
{
new Azure.Authorization.Inputs.RoleDefinitionPermissionArgs
{
Actions = new[]
{
"Microsoft.Insights/eventtypes/values/read",
"Microsoft.Compute/virtualMachines/deallocate/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/read",
"Microsoft.DesktopVirtualization/hostpools/read",
"Microsoft.DesktopVirtualization/hostpools/write",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/read",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/write",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/delete",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/sendMessage/action",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read",
},
NotActions = new() { },
},
},
AssignableScopes = new[]
{
exampleResourceGroup.Id,
},
});
var example = AzureAD.GetServicePrincipal.Invoke(new()
{
DisplayName = "Azure Virtual Desktop",
});
var exampleAssignment = new Azure.Authorization.Assignment("example", new()
{
Name = exampleRandomUuid.Result,
Scope = exampleResourceGroup.Id,
RoleDefinitionId = exampleRoleDefinition.RoleDefinitionResourceId,
PrincipalId = example.Apply(getServicePrincipalResult => getServicePrincipalResult.Id),
SkipServicePrincipalAadCheck = true,
});
var exampleHostPool = new Azure.DesktopVirtualization.HostPool("example", new()
{
Name = "example-hostpool",
Location = exampleResourceGroup.Location,
ResourceGroupName = exampleResourceGroup.Name,
Type = "Pooled",
ValidateEnvironment = true,
LoadBalancerType = "BreadthFirst",
});
var exampleScalingPlan = new Azure.DesktopVirtualization.ScalingPlan("example", new()
{
Name = "example-scaling-plan",
Location = exampleResourceGroup.Location,
ResourceGroupName = exampleResourceGroup.Name,
FriendlyName = "Scaling Plan Example",
Description = "Example Scaling Plan",
TimeZone = "GMT Standard Time",
Schedules = new[]
{
new Azure.DesktopVirtualization.Inputs.ScalingPlanScheduleArgs
{
Name = "Weekdays",
DaysOfWeeks = new[]
{
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
},
RampUpStartTime = "05:00",
RampUpLoadBalancingAlgorithm = "BreadthFirst",
RampUpMinimumHostsPercent = 20,
RampUpCapacityThresholdPercent = 10,
PeakStartTime = "09:00",
PeakLoadBalancingAlgorithm = "BreadthFirst",
RampDownStartTime = "19:00",
RampDownLoadBalancingAlgorithm = "DepthFirst",
RampDownMinimumHostsPercent = 10,
RampDownForceLogoffUsers = false,
RampDownWaitTimeMinutes = 45,
RampDownNotificationMessage = "Please log off in the next 45 minutes...",
RampDownCapacityThresholdPercent = 5,
RampDownStopHostsWhen = "ZeroSessions",
OffPeakStartTime = "22:00",
OffPeakLoadBalancingAlgorithm = "DepthFirst",
},
},
HostPools = new[]
{
new Azure.DesktopVirtualization.Inputs.ScalingPlanHostPoolArgs
{
HostpoolId = exampleHostPool.Id,
ScalingPlanEnabled = true,
},
},
});
});
package main
import (
"github.com/pulumi/pulumi-azure/sdk/v6/go/azure/authorization"
"github.com/pulumi/pulumi-azure/sdk/v6/go/azure/core"
"github.com/pulumi/pulumi-azure/sdk/v6/go/azure/desktopvirtualization"
"github.com/pulumi/pulumi-azuread/sdk/v5/go/azuread"
"github.com/pulumi/pulumi-random/sdk/v4/go/random"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
exampleRandomUuid, err := random.NewRandomUuid(ctx, "example", nil)
if err != nil {
return err
}
exampleResourceGroup, err := core.NewResourceGroup(ctx, "example", &core.ResourceGroupArgs{
Name: pulumi.String("example-resources"),
Location: pulumi.String("West Europe"),
})
if err != nil {
return err
}
exampleRoleDefinition, err := authorization.NewRoleDefinition(ctx, "example", &authorization.RoleDefinitionArgs{
Name: pulumi.String("AVD-AutoScale"),
Scope: exampleResourceGroup.ID(),
Description: pulumi.String("AVD AutoScale Role"),
Permissions: authorization.RoleDefinitionPermissionArray{
&authorization.RoleDefinitionPermissionArgs{
Actions: pulumi.StringArray{
pulumi.String("Microsoft.Insights/eventtypes/values/read"),
pulumi.String("Microsoft.Compute/virtualMachines/deallocate/action"),
pulumi.String("Microsoft.Compute/virtualMachines/restart/action"),
pulumi.String("Microsoft.Compute/virtualMachines/powerOff/action"),
pulumi.String("Microsoft.Compute/virtualMachines/start/action"),
pulumi.String("Microsoft.Compute/virtualMachines/read"),
pulumi.String("Microsoft.DesktopVirtualization/hostpools/read"),
pulumi.String("Microsoft.DesktopVirtualization/hostpools/write"),
pulumi.String("Microsoft.DesktopVirtualization/hostpools/sessionhosts/read"),
pulumi.String("Microsoft.DesktopVirtualization/hostpools/sessionhosts/write"),
pulumi.String("Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/delete"),
pulumi.String("Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read"),
pulumi.String("Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/sendMessage/action"),
pulumi.String("Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read"),
},
NotActions: pulumi.StringArray{},
},
},
AssignableScopes: pulumi.StringArray{
exampleResourceGroup.ID(),
},
})
if err != nil {
return err
}
example, err := azuread.LookupServicePrincipal(ctx, &azuread.LookupServicePrincipalArgs{
DisplayName: pulumi.StringRef("Azure Virtual Desktop"),
}, nil)
if err != nil {
return err
}
_, err = authorization.NewAssignment(ctx, "example", &authorization.AssignmentArgs{
Name: exampleRandomUuid.Result,
Scope: exampleResourceGroup.ID(),
RoleDefinitionId: exampleRoleDefinition.RoleDefinitionResourceId,
PrincipalId: pulumi.String(example.Id),
SkipServicePrincipalAadCheck: pulumi.Bool(true),
})
if err != nil {
return err
}
exampleHostPool, err := desktopvirtualization.NewHostPool(ctx, "example", &desktopvirtualization.HostPoolArgs{
Name: pulumi.String("example-hostpool"),
Location: exampleResourceGroup.Location,
ResourceGroupName: exampleResourceGroup.Name,
Type: pulumi.String("Pooled"),
ValidateEnvironment: pulumi.Bool(true),
LoadBalancerType: pulumi.String("BreadthFirst"),
})
if err != nil {
return err
}
_, err = desktopvirtualization.NewScalingPlan(ctx, "example", &desktopvirtualization.ScalingPlanArgs{
Name: pulumi.String("example-scaling-plan"),
Location: exampleResourceGroup.Location,
ResourceGroupName: exampleResourceGroup.Name,
FriendlyName: pulumi.String("Scaling Plan Example"),
Description: pulumi.String("Example Scaling Plan"),
TimeZone: pulumi.String("GMT Standard Time"),
Schedules: desktopvirtualization.ScalingPlanScheduleArray{
&desktopvirtualization.ScalingPlanScheduleArgs{
Name: pulumi.String("Weekdays"),
DaysOfWeeks: pulumi.StringArray{
pulumi.String("Monday"),
pulumi.String("Tuesday"),
pulumi.String("Wednesday"),
pulumi.String("Thursday"),
pulumi.String("Friday"),
},
RampUpStartTime: pulumi.String("05:00"),
RampUpLoadBalancingAlgorithm: pulumi.String("BreadthFirst"),
RampUpMinimumHostsPercent: pulumi.Int(20),
RampUpCapacityThresholdPercent: pulumi.Int(10),
PeakStartTime: pulumi.String("09:00"),
PeakLoadBalancingAlgorithm: pulumi.String("BreadthFirst"),
RampDownStartTime: pulumi.String("19:00"),
RampDownLoadBalancingAlgorithm: pulumi.String("DepthFirst"),
RampDownMinimumHostsPercent: pulumi.Int(10),
RampDownForceLogoffUsers: pulumi.Bool(false),
RampDownWaitTimeMinutes: pulumi.Int(45),
RampDownNotificationMessage: pulumi.String("Please log off in the next 45 minutes..."),
RampDownCapacityThresholdPercent: pulumi.Int(5),
RampDownStopHostsWhen: pulumi.String("ZeroSessions"),
OffPeakStartTime: pulumi.String("22:00"),
OffPeakLoadBalancingAlgorithm: pulumi.String("DepthFirst"),
},
},
HostPools: desktopvirtualization.ScalingPlanHostPoolArray{
&desktopvirtualization.ScalingPlanHostPoolArgs{
HostpoolId: exampleHostPool.ID(),
ScalingPlanEnabled: pulumi.Bool(true),
},
},
})
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.random.RandomUuid;
import com.pulumi.azure.core.ResourceGroup;
import com.pulumi.azure.core.ResourceGroupArgs;
import com.pulumi.azure.authorization.RoleDefinition;
import com.pulumi.azure.authorization.RoleDefinitionArgs;
import com.pulumi.azure.authorization.inputs.RoleDefinitionPermissionArgs;
import com.pulumi.azuread.AzureadFunctions;
import com.pulumi.azuread.inputs.GetServicePrincipalArgs;
import com.pulumi.azure.authorization.Assignment;
import com.pulumi.azure.authorization.AssignmentArgs;
import com.pulumi.azure.desktopvirtualization.HostPool;
import com.pulumi.azure.desktopvirtualization.HostPoolArgs;
import com.pulumi.azure.desktopvirtualization.ScalingPlan;
import com.pulumi.azure.desktopvirtualization.ScalingPlanArgs;
import com.pulumi.azure.desktopvirtualization.inputs.ScalingPlanScheduleArgs;
import com.pulumi.azure.desktopvirtualization.inputs.ScalingPlanHostPoolArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var exampleRandomUuid = new RandomUuid("exampleRandomUuid");
var exampleResourceGroup = new ResourceGroup("exampleResourceGroup", ResourceGroupArgs.builder()
.name("example-resources")
.location("West Europe")
.build());
var exampleRoleDefinition = new RoleDefinition("exampleRoleDefinition", RoleDefinitionArgs.builder()
.name("AVD-AutoScale")
.scope(exampleResourceGroup.id())
.description("AVD AutoScale Role")
.permissions(RoleDefinitionPermissionArgs.builder()
.actions(
"Microsoft.Insights/eventtypes/values/read",
"Microsoft.Compute/virtualMachines/deallocate/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/read",
"Microsoft.DesktopVirtualization/hostpools/read",
"Microsoft.DesktopVirtualization/hostpools/write",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/read",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/write",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/delete",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/sendMessage/action",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read")
.notActions()
.build())
.assignableScopes(exampleResourceGroup.id())
.build());
final var example = AzureadFunctions.getServicePrincipal(GetServicePrincipalArgs.builder()
.displayName("Azure Virtual Desktop")
.build());
var exampleAssignment = new Assignment("exampleAssignment", AssignmentArgs.builder()
.name(exampleRandomUuid.result())
.scope(exampleResourceGroup.id())
.roleDefinitionId(exampleRoleDefinition.roleDefinitionResourceId())
.principalId(example.id())
.skipServicePrincipalAadCheck(true)
.build());
var exampleHostPool = new HostPool("exampleHostPool", HostPoolArgs.builder()
.name("example-hostpool")
.location(exampleResourceGroup.location())
.resourceGroupName(exampleResourceGroup.name())
.type("Pooled")
.validateEnvironment(true)
.loadBalancerType("BreadthFirst")
.build());
var exampleScalingPlan = new ScalingPlan("exampleScalingPlan", ScalingPlanArgs.builder()
.name("example-scaling-plan")
.location(exampleResourceGroup.location())
.resourceGroupName(exampleResourceGroup.name())
.friendlyName("Scaling Plan Example")
.description("Example Scaling Plan")
.timeZone("GMT Standard Time")
.schedules(ScalingPlanScheduleArgs.builder()
.name("Weekdays")
.daysOfWeeks(
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday")
.rampUpStartTime("05:00")
.rampUpLoadBalancingAlgorithm("BreadthFirst")
.rampUpMinimumHostsPercent(20)
.rampUpCapacityThresholdPercent(10)
.peakStartTime("09:00")
.peakLoadBalancingAlgorithm("BreadthFirst")
.rampDownStartTime("19:00")
.rampDownLoadBalancingAlgorithm("DepthFirst")
.rampDownMinimumHostsPercent(10)
.rampDownForceLogoffUsers(false)
.rampDownWaitTimeMinutes(45)
.rampDownNotificationMessage("Please log off in the next 45 minutes...")
.rampDownCapacityThresholdPercent(5)
.rampDownStopHostsWhen("ZeroSessions")
.offPeakStartTime("22:00")
.offPeakLoadBalancingAlgorithm("DepthFirst")
.build())
.hostPools(ScalingPlanHostPoolArgs.builder()
.hostpoolId(exampleHostPool.id())
.scalingPlanEnabled(true)
.build())
.build());
}
}
resources:
exampleRandomUuid:
type: random:RandomUuid
name: example
exampleResourceGroup:
type: azure:core:ResourceGroup
name: example
properties:
name: example-resources
location: West Europe
exampleRoleDefinition:
type: azure:authorization:RoleDefinition
name: example
properties:
name: AVD-AutoScale
scope: ${exampleResourceGroup.id}
description: AVD AutoScale Role
permissions:
- actions:
- Microsoft.Insights/eventtypes/values/read
- Microsoft.Compute/virtualMachines/deallocate/action
- Microsoft.Compute/virtualMachines/restart/action
- Microsoft.Compute/virtualMachines/powerOff/action
- Microsoft.Compute/virtualMachines/start/action
- Microsoft.Compute/virtualMachines/read
- Microsoft.DesktopVirtualization/hostpools/read
- Microsoft.DesktopVirtualization/hostpools/write
- Microsoft.DesktopVirtualization/hostpools/sessionhosts/read
- Microsoft.DesktopVirtualization/hostpools/sessionhosts/write
- Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/delete
- Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read
- Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/sendMessage/action
- Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read
notActions: []
assignableScopes:
- ${exampleResourceGroup.id}
exampleAssignment:
type: azure:authorization:Assignment
name: example
properties:
name: ${exampleRandomUuid.result}
scope: ${exampleResourceGroup.id}
roleDefinitionId: ${exampleRoleDefinition.roleDefinitionResourceId}
principalId: ${example.id}
skipServicePrincipalAadCheck: true
exampleHostPool:
type: azure:desktopvirtualization:HostPool
name: example
properties:
name: example-hostpool
location: ${exampleResourceGroup.location}
resourceGroupName: ${exampleResourceGroup.name}
type: Pooled
validateEnvironment: true
loadBalancerType: BreadthFirst
exampleScalingPlan:
type: azure:desktopvirtualization:ScalingPlan
name: example
properties:
name: example-scaling-plan
location: ${exampleResourceGroup.location}
resourceGroupName: ${exampleResourceGroup.name}
friendlyName: Scaling Plan Example
description: Example Scaling Plan
timeZone: GMT Standard Time
schedules:
- name: Weekdays
daysOfWeeks:
- Monday
- Tuesday
- Wednesday
- Thursday
- Friday
rampUpStartTime: 05:00
rampUpLoadBalancingAlgorithm: BreadthFirst
rampUpMinimumHostsPercent: 20
rampUpCapacityThresholdPercent: 10
peakStartTime: 09:00
peakLoadBalancingAlgorithm: BreadthFirst
rampDownStartTime: 19:00
rampDownLoadBalancingAlgorithm: DepthFirst
rampDownMinimumHostsPercent: 10
rampDownForceLogoffUsers: false
rampDownWaitTimeMinutes: 45
rampDownNotificationMessage: Please log off in the next 45 minutes...
rampDownCapacityThresholdPercent: 5
rampDownStopHostsWhen: ZeroSessions
offPeakStartTime: 22:00
offPeakLoadBalancingAlgorithm: DepthFirst
hostPools:
- hostpoolId: ${exampleHostPool.id}
scalingPlanEnabled: true
variables:
example:
fn::invoke:
function: azuread:getServicePrincipal
arguments:
displayName: Azure Virtual Desktop
API Providers
This resource uses the following Azure API Providers:
Microsoft.DesktopVirtualization
: 2024-04-03
Import
Virtual Desktop Scaling Plans can be imported using the resource id
, e.g.
$ pulumi import azure:desktopvirtualization/scalingPlan:ScalingPlan example /subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DesktopVirtualization/scalingPlans/plan1
Properties
A description of the Scaling Plan.
The name of the tag associated with the VMs you want to exclude from autoscaling.
Friendly name of the Scaling Plan.
One or more host_pool
blocks as defined below.
The name of the Resource Group where the Virtual Desktop Scaling Plan should exist. Changing this forces a new Virtual Desktop Scaling Plan to be created.
One or more schedule
blocks as defined below.
Specifies the Time Zone which should be used by the Scaling Plan for time based events, the possible values are defined here.