From pulumi-migration
Converts Azure ARM templates, Bicep templates, or code to Pulumi programs, including importing existing Azure resources for migration.
npx claudepluginhub joshuarweaver/cascade-code-devops-misc-1 --plugin pulumi-agent-skills-1This skill uses the workspace's default tool permissions.
**If you have already generated a migration plan before loading this skill, you MUST:**
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
If you have already generated a migration plan before loading this skill, you MUST:
The migration output MUST meet all of the following:
Complete Resource Coverage
Successful Deployment
pulumi preview (assuming proper config).Zero-Diff Import Validation (if importing existing resources)
pulumi preview must show:
Final Migration Report
If a user-provided ARM template is incomplete, ambiguous, or missing artifacts, ask targeted questions before generating Pulumi code.
If there is ambiguity on how to handle a specific resource property on import, ask targeted questions before altering Pulumi code.
Follow this workflow exactly and in this order:
Running Azure CLI commands (e.g., az resource list, az resource show). Requires initial login using ESC and az login
Setting up Azure CLI using ESC:
pulumi env run {org}/{project}/{environment} -- bash -c 'az login --service-principal -u "$ARM_CLIENT_ID" --tenant "$ARM_TENANT_ID" --federated-token "$ARM_OIDC_TOKEN"'. ESC is not required after establishing the sessionaz account showaz account list --query "[].{Name:name, SubscriptionId:id, IsDefault:isDefault}" -o tableFor detailed ESC information: Load the pulumi-esc skill by calling the tool "Skill" with name = "pulumi-esc"
ARM templates do not have the concept of "stacks" like CloudFormation. Read the ARM template JSON file directly:
# View template structure
cat template.json | jq '.resources[] | {type: .type, name: .name}'
# View parameters
cat template.json | jq '.parameters'
# View variables
cat template.json | jq '.variables'
Extract:
Documentation: ARM Template Structure
If the ARM template has already been deployed and you're importing existing resources:
# List all resources in a resource group
az resource list \
--resource-group <resource-group-name> \
--output json
# Get specific resource details
az resource show \
--ids <resource-id> \
--output json
# Query specific properties using JMESPath
az resource show \
--ids <resource-id> \
--query "{name:name, location:location, properties:properties}" \
--output json
Documentation: Azure CLI Documentation
IMPORTANT: ARM to Pulumi conversion requires manual translation. There is NO automated conversion tool for ARM templates. You are responsible for the complete conversion.
Provider Strategy:
@pulumi/azure-native for full Azure Resource Manager API coverage@pulumi/azure (classic provider) when azure-native doesn't support specific features or when you need simplified abstractionsDocumentation:
Language Support:
Complete Coverage:
Follow conversion patterns in arm-conversion-patterns.md.
arm-conversion-patterns.md provides:
After conversion, you can optionally import existing resources to be managed by Pulumi. If the user does not request this, suggest it as a follow-up step to conversion.
CRITICAL: When the user requests importing existing Azure resources into Pulumi, see arm-import.md for detailed import procedures and zero-diff validation workflows.
arm-import.md provides:
Inline Import Approach:
import resource option with Azure Resource IDspulumi-cdk-importer)Azure Resource IDs:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}Zero-Diff Validation:
pulumi preview after importSet up stack configuration matching ARM template parameters:
# Set Azure region
pulumi config set azure-native:location eastus --stack dev
# Set application parameters
pulumi config set storageAccountName mystorageaccount --stack dev
# Set secret parameters
pulumi config set --secret adminPassword MyS3cr3tP@ssw0rd --stack dev
After achieving zero diff in preview (if importing), validate the migration:
Review all exports:
pulumi stack output
Verify resource relationships:
pulumi stack graph
Test application functionality (if applicable)
Document any manual steps required post-migration
If the user asks for help planning or performing an ARM to Pulumi migration, use the information above to guide the user through the conversion and import process.
When the user wants additional information, use the web-fetch tool to get content from the official Pulumi documentation:
Microsoft Azure Documentation:
When performing a migration, always produce:
pulumi config set commandsKeep code syntactically valid and clearly separated by files.