skills/azure-mgmt-fabric-dotnet/SKILL.md
Azure Resource Manager SDK for Fabric in .NET. Use for MANAGEMENT PLANE operations: provisioning, scaling, suspending/resuming Microsoft Fabric capacities, checking name availability, and listing SKUs via Azure Resource Manager. Triggers: "Fabric capacity", "create capacity", "suspend capacity", "resume capacity", "Fabric SKU", "provision Fabric", "ARM Fabric", "FabricCapacityResource".
npx skillsauth add williamlimasilva/.copilot azure-mgmt-fabric-dotnetInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Management plane SDK for provisioning and managing Microsoft Fabric capacity resources via Azure Resource Manager.
Management Plane Only This SDK manages Fabric capacities (compute resources). For working with Fabric workspaces, lakehouses, warehouses, and data items, use the Microsoft Fabric REST API or data plane SDKs.
dotnet add package Azure.ResourceManager.Fabric
dotnet add package Azure.Identity
Current Version: 1.0.0 (GA - September 2025)
API Version: 2023-11-01
Target Frameworks: .NET 8.0, .NET Standard 2.0
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
# For service principal auth (optional)
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Fabric;
// Always use DefaultAzureCredential
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);
// Get subscription
var subscription = await armClient.GetDefaultSubscriptionAsync();
ArmClient
└── SubscriptionResource
└── ResourceGroupResource
└── FabricCapacityResource
using Azure.ResourceManager.Fabric;
using Azure.ResourceManager.Fabric.Models;
using Azure.Core;
// Get resource group
var resourceGroup = await subscription.GetResourceGroupAsync("my-resource-group");
// Define capacity configuration
var administration = new FabricCapacityAdministration(
new[] { "[email protected]" } // Capacity administrators (UPNs or object IDs)
);
var properties = new FabricCapacityProperties(administration);
var sku = new FabricSku("F64", FabricSkuTier.Fabric);
var capacityData = new FabricCapacityData(
AzureLocation.WestUS2,
properties,
sku)
{
Tags = { ["Environment"] = "Production" }
};
// Create capacity (long-running operation)
var capacityCollection = resourceGroup.Value.GetFabricCapacities();
var operation = await capacityCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-fabric-capacity",
capacityData);
FabricCapacityResource capacity = operation.Value;
Console.WriteLine($"Created capacity: {capacity.Data.Name}");
Console.WriteLine($"State: {capacity.Data.Properties.State}");
// Get existing capacity
var capacity = await resourceGroup.Value
.GetFabricCapacityAsync("my-fabric-capacity");
Console.WriteLine($"Name: {capacity.Value.Data.Name}");
Console.WriteLine($"Location: {capacity.Value.Data.Location}");
Console.WriteLine($"SKU: {capacity.Value.Data.Sku.Name}");
Console.WriteLine($"State: {capacity.Value.Data.Properties.State}");
Console.WriteLine($"Provisioning State: {capacity.Value.Data.Properties.ProvisioningState}");
var capacity = await resourceGroup.Value
.GetFabricCapacityAsync("my-fabric-capacity");
var patch = new FabricCapacityPatch
{
Sku = new FabricSku("F128", FabricSkuTier.Fabric), // Scale up
Properties = new FabricCapacityUpdateProperties
{
Administration = new FabricCapacityAdministration(
new[] { "[email protected]", "[email protected]" }
)
}
};
var updateOperation = await capacity.Value.UpdateAsync(
WaitUntil.Completed,
patch);
Console.WriteLine($"Updated SKU: {updateOperation.Value.Data.Sku.Name}");
// Suspend capacity (stop billing for compute)
await capacity.Value.SuspendAsync(WaitUntil.Completed);
Console.WriteLine("Capacity suspended");
// Resume capacity
var resumeOperation = await capacity.Value.ResumeAsync(WaitUntil.Completed);
Console.WriteLine($"Capacity resumed. State: {resumeOperation.Value.Data.Properties.State}");
await capacity.Value.DeleteAsync(WaitUntil.Completed);
Console.WriteLine("Capacity deleted");
// In a resource group
await foreach (var cap in resourceGroup.Value.GetFabricCapacities())
{
Console.WriteLine($"- {cap.Data.Name} ({cap.Data.Sku.Name})");
}
// In a subscription
await foreach (var cap in subscription.GetFabricCapacitiesAsync())
{
Console.WriteLine($"- {cap.Data.Name} in {cap.Data.Location}");
}
var checkContent = new FabricNameAvailabilityContent
{
Name = "my-new-capacity",
ResourceType = "Microsoft.Fabric/capacities"
};
var result = await subscription.CheckFabricCapacityNameAvailabilityAsync(
AzureLocation.WestUS2,
checkContent);
if (result.Value.IsNameAvailable == true)
{
Console.WriteLine("Name is available!");
}
else
{
Console.WriteLine($"Name unavailable: {result.Value.Reason} - {result.Value.Message}");
}
// List all SKUs available in subscription
await foreach (var skuDetails in subscription.GetSkusFabricCapacitiesAsync())
{
Console.WriteLine($"SKU: {skuDetails.Name}");
Console.WriteLine($" Resource Type: {skuDetails.ResourceType}");
foreach (var location in skuDetails.Locations)
{
Console.WriteLine($" Location: {location}");
}
}
// List SKUs available for an existing capacity (for scaling)
await foreach (var skuDetails in capacity.Value.GetSkusForCapacityAsync())
{
Console.WriteLine($"Can scale to: {skuDetails.Sku.Name}");
}
| SKU Name | Capacity Units (CU) | Power BI Equivalent | |----------|---------------------|---------------------| | F2 | 2 | - | | F4 | 4 | - | | F8 | 8 | EM1/A1 | | F16 | 16 | EM2/A2 | | F32 | 32 | EM3/A3 | | F64 | 64 | P1/A4 | | F128 | 128 | P2/A5 | | F256 | 256 | P3/A6 | | F512 | 512 | P4/A7 | | F1024 | 1024 | P5/A8 | | F2048 | 2048 | - |
| Type | Purpose |
|------|---------|
| ArmClient | Entry point for all ARM operations |
| FabricCapacityResource | Represents a Fabric capacity instance |
| FabricCapacityCollection | Collection for capacity CRUD operations |
| FabricCapacityData | Capacity creation/read data model |
| FabricCapacityPatch | Capacity update payload |
| FabricCapacityProperties | Capacity properties (administration, state) |
| FabricCapacityAdministration | Admin members configuration |
| FabricSku | SKU configuration (name and tier) |
| FabricSkuTier | Pricing tier (currently only "Fabric") |
| FabricProvisioningState | Provisioning states (Succeeded, Failed, etc.) |
| FabricResourceState | Resource states (Active, Suspended, etc.) |
| FabricNameAvailabilityContent | Name availability check request |
| FabricNameAvailabilityResult | Name availability check response |
FabricProvisioningState)Succeeded - Operation completed successfullyFailed - Operation failedCanceled - Operation was canceledDeleting - Capacity is being deletedProvisioning - Initial provisioning in progressUpdating - Update operation in progressFabricResourceState)Active - Capacity is running and availableProvisioning - Being provisionedFailed - In failed stateUpdating - Being updatedDeleting - Being deletedSuspending - Transitioning to suspendedSuspended - Suspended (not billing for compute)Pausing - Transitioning to pausedPaused - PausedResuming - Resuming from suspended/pausedScaling - Scaling to different SKUPreparing - Preparing resourcesWaitUntil.Completed for operations that must finish before proceedingWaitUntil.Started when you want to poll manually or run operations in parallelDefaultAzureCredential — never hardcode credentialsRequestFailedException for ARM API errorsCreateOrUpdateAsync for idempotent operationsusing Azure;
try
{
var operation = await capacityCollection.CreateOrUpdateAsync(
WaitUntil.Completed, capacityName, capacityData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("Capacity already exists or conflict");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
Console.WriteLine($"Invalid configuration: {ex.Message}");
}
catch (RequestFailedException ex) when (ex.Status == 403)
{
Console.WriteLine("Insufficient permissions or quota exceeded");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}
GetSkusFabricCapacitiesAsync to check| SDK | Purpose | Install |
|-----|---------|---------|
| Azure.ResourceManager.Fabric | Management plane (this SDK) | dotnet add package Azure.ResourceManager.Fabric |
| Microsoft.Fabric.Api | Data plane operations (beta) | dotnet add package Microsoft.Fabric.Api --prerelease |
| Azure.ResourceManager | Core ARM SDK | dotnet add package Azure.ResourceManager |
| Azure.Identity | Authentication | dotnet add package Azure.Identity |
development
Anxiety-aware, evidence-driven collaboration for stalled or high-stakes work when a user says uncertainty, repeated setbacks, or lack of visible progress is causing significant anxiety or distress. Use immediately when explicitly invoked; when this fit is only inferred from the user's own account, ask permission before applying it. Preserve the user's ideal and turn grounded perspective-taking into persistent, bounded problem solving. Do not use to diagnose, provide therapy, manufacture certainty, or lower goals for reassurance.
development
Build, review, debug, package, and test Roslyn diagnostic analyzers, code fix providers, and incremental source generators. Use for DiagnosticAnalyzer, CodeFixProvider, IIncrementalGenerator, IOperation analysis, Microsoft.CodeAnalysis dependency pinning, Roslyn test harnesses, C#/VB tests, and analyzer NuGet packaging.
testing
Migrates a project that uses checked-in .designer.cs files behind .resx to using a source-generator instead
development
Polish any GitHub repository's surface — labels (emoji rating tiers, P0–P3 priority, impact severity), issue forms, PR template, CI workflows, CODEOWNERS, rulesets, docs. Repo meta & config only — no code logic touched. Use when creating a new repo or polishing an existing one.