[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-pulumi-pulumi-arm-to-pulumi":3,"mdc--tw785h-key":36,"related-repo-pulumi-pulumi-arm-to-pulumi":2009,"related-org-pulumi-pulumi-arm-to-pulumi":2102},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":34,"mdContent":35},"pulumi-arm-to-pulumi","migrate Azure ARM to Pulumi","Convert or migrate Azure ARM (Azure Resource Manager) templates, Bicep templates, or code to Pulumi, including importing existing Azure resources. This skill MUST be loaded whenever a user requests migration, conversion, or import of ARM templates, Bicep templates, ARM code, Bicep code, or Azure resources to Pulumi.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"pulumi","Pulumi","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fpulumi.png",[12,16,17,20,23],{"name":13,"slug":14,"type":15},"Azure","azure","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Migration","migration",{"name":21,"slug":22,"type":15},"Deployment","deployment",{"name":24,"slug":25,"type":15},"Infrastructure as Code","infrastructure-as-code",63,"https:\u002F\u002Fgithub.com\u002Fpulumi\u002Fagent-skills","2026-04-06T18:50:35.384851",null,4,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":29},[],"https:\u002F\u002Fgithub.com\u002Fpulumi\u002Fagent-skills\u002Ftree\u002FHEAD\u002Fmigration\u002Fskills\u002Fpulumi-arm-to-pulumi","---\nname: pulumi-arm-to-pulumi\ndescription: Convert or migrate Azure ARM (Azure Resource Manager) templates, Bicep templates, or code to Pulumi, including importing existing Azure resources. This skill MUST be loaded whenever a user requests migration, conversion, or import of ARM templates, Bicep templates, ARM code, Bicep code, or Azure resources to Pulumi.\n---\n\n## IMPORTANT: PLAN ADJUSTMENT REQUIRED\n\n**If you have already generated a migration plan before loading this skill, you MUST:**\n\n1. Review your existing plan against the workflows and requirements in this skill\n2. Identify any gaps, missing steps, or incorrect assumptions\n3. Update and revise your plan to align with this skill's guidance\n4. Communicate the adjusted plan to the user before proceeding\n\n## CRITICAL SUCCESS REQUIREMENTS\n\nThe migration output MUST meet all of the following:\n\n1. **Complete Resource Coverage**\n   - Every ARM template resource MUST:\n     - Be represented in the Pulumi program **OR**\n     - Be explicitly justified in the final report.\n\n2. **Successful Deployment**\n   - The produced Pulumi program must be structurally valid and capable of a successful `pulumi preview` (assuming proper config).\n\n3. **Zero-Diff Import Validation** (if importing existing resources)\n   - After import, `pulumi preview` must show:\n     - NO updates\n     - NO replaces\n     - NO creates\n     - NO deletes\n   - Any diffs must be resolved using the Preview Resolution Workflow. See [arm-import.md](arm-import.md).\n\n4. **Final Migration Report**\n   - Always output a formal migration report suitable for a Pull Request.\n   - Include:\n     - ARM → Pulumi resource mapping\n     - Provider decisions (azure-native vs azure)\n     - Behavioral differences\n     - Missing or manually required steps\n     - Validation instructions\n\n## WHEN INFORMATION IS MISSING\n\nIf a user-provided ARM template is incomplete, ambiguous, or missing artifacts, ask **targeted questions** before generating Pulumi code.\n\nIf there is ambiguity on how to handle a specific resource property on import, ask **targeted questions** before altering Pulumi code.\n\n## MIGRATION WORKFLOW\n\nFollow this workflow **exactly** and in this order:\n\n### 1. INFORMATION GATHERING\n\n#### 1.1 Verify Azure Credentials\n\nRunning Azure CLI commands (e.g., `az resource list`, `az resource show`). Requires initial login using ESC and `az login`\n\n- If the user has already provided an ESC environment, use it.\n- If no ESC environment is specified, **ask the user which ESC environment to use** before proceeding with Azure CLI commands.\n\n**Setting up Azure CLI using ESC:**\n\n- ESC environments can provide Azure credentials through environment variables or Azure CLI configuration\n- Login to Azure using ESC to provide credentials, e.g: `pulumi env run {org}\u002F{project}\u002F{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 session\n- Verify credentials are working: `az account show`\n- Confirm subscription: `az account list --query \"[].{Name:name, SubscriptionId:id, IsDefault:isDefault}\" -o table`\n\n**For detailed ESC information:** Load the `pulumi-esc` skill by calling the tool \"Skill\" with name = \"pulumi-esc\"\n\n#### 1.2 Analyze ARM Template Structure\n\nARM templates do not have the concept of \"stacks\" like CloudFormation. Read the ARM template JSON file directly:\n\n```bash\n# View template structure\ncat template.json | jq '.resources[] | {type: .type, name: .name}'\n\n# View parameters\ncat template.json | jq '.parameters'\n\n# View variables\ncat template.json | jq '.variables'\n```\n\nExtract:\n\n- Resource types and names\n- Parameters and their default values\n- Variables and expressions\n- Dependencies (dependsOn arrays)\n- Nested templates or linked templates\n- Copy loops (iteration constructs)\n- Conditional deployments (condition property)\n\n**Documentation:** [ARM Template Structure](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fazure-resource-manager\u002Ftemplates\u002Fsyntax)\n\n#### 1.3 Build Resource Inventory (if importing existing resources)\n\nIf the ARM template has already been deployed and you're importing existing resources:\n\n```bash\n# List all resources in a resource group\naz resource list \\\n  --resource-group \u003Cresource-group-name> \\\n  --output json\n\n# Get specific resource details\naz resource show \\\n  --ids \u003Cresource-id> \\\n  --output json\n\n# Query specific properties using JMESPath\naz resource show \\\n  --ids \u003Cresource-id> \\\n  --query \"{name:name, location:location, properties:properties}\" \\\n  --output json\n```\n\n**Documentation:** [Azure CLI Documentation](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fcli\u002Fazure\u002F)\n\n### 2. CODE CONVERSION (ARM → PULUMI)\n\n**IMPORTANT:** ARM to Pulumi conversion requires manual translation. There is **NO** automated conversion tool for ARM templates. You are responsible for the complete conversion.\n\n#### Key Conversion Principles\n\n1. **Provider Strategy**:\n   - **Default**: Use `@pulumi\u002Fazure-native` for full Azure Resource Manager API coverage\n   - **Fallback**: Use `@pulumi\u002Fazure` (classic provider) when azure-native doesn't support specific features or when you need simplified abstractions\n\n   **Documentation:**\n   - [Azure Native Provider](https:\u002F\u002Fwww.pulumi.com\u002Fregistry\u002Fpackages\u002Fazure-native\u002F)\n   - [Azure Classic Provider](https:\u002F\u002Fwww.pulumi.com\u002Fregistry\u002Fpackages\u002Fazure\u002F)\n\n2. **Language Support**:\n   - **TypeScript\u002FJavaScript**: Most common, excellent IDE support\n   - **Python**: Great for data teams and ML workflows\n   - **C#**: Natural fit for .NET teams\n   - **Go**: High performance, strong typing\n   - **Java**: Enterprise Java teams\n   - **YAML**: Simple declarative approach\n   - Choose based on user preference or existing codebase\n\n3. **Complete Coverage**:\n   - Convert ALL resources in the ARM template\n   - Preserve all conditionals, loops, and dependencies\n   - Maintain parameter and variable logic\n\n**Follow conversion patterns in [arm-conversion-patterns.md](arm-conversion-patterns.md).**\n\n[arm-conversion-patterns.md](arm-conversion-patterns.md) provides:\n\n- Parameters, variables, and outputs mapping\n- Copy loops, conditionals, and dependsOn translation\n- Nested templates → ComponentResource\n- Azure Classic provider examples (VNet, App Service)\n- TypeScript output handling and common pitfalls\n\n### 3. RESOURCE IMPORT (EXISTING RESOURCES) - OPTIONAL\n\nAfter 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.\n\n**CRITICAL**: When the user requests importing existing Azure resources into Pulumi, see [arm-import.md](arm-import.md) for detailed import procedures and zero-diff validation workflows.\n\n[arm-import.md](arm-import.md) provides:\n\n- Inline import ID patterns and examples\n- Azure Resource ID format conventions\n- Child resource handling (e.g., WebAppApplicationSettings)\n- **Preview Resolution Workflow** for achieving zero-diff after import\n- Step-by-step debugging for property conflicts\n\n#### Key Import Principles\n\n1. **Inline Import Approach**:\n   - Use `import` resource option with Azure Resource IDs\n   - No separate import tool (unlike `pulumi-cdk-importer`)\n\n2. **Azure Resource IDs**:\n   - Follow predictable pattern: `\u002Fsubscriptions\u002F{subscriptionId}\u002FresourceGroups\u002F{resourceGroupName}\u002Fproviders\u002F{resourceProviderNamespace}\u002F{resourceType}\u002F{resourceName}`\n   - Can be generated by convention or queried via Azure CLI\n\n3. **Zero-Diff Validation**:\n   - Run `pulumi preview` after import\n   - Resolve all diffs using Preview Resolution Workflow\n   - Goal: NO updates, replaces, creates, or deletes\n\n### 4. PULUMI CONFIGURATION\n\nSet up stack configuration matching ARM template parameters:\n\n```bash\n# Set Azure region\npulumi config set azure-native:location eastus --stack dev\n\n# Set application parameters\npulumi config set storageAccountName mystorageaccount --stack dev\n\n# Set secret parameters\npulumi config set --secret adminPassword MyS3cr3tP@ssw0rd --stack dev\n```\n\n### 5. VALIDATION\n\nAfter achieving zero diff in preview (if importing), validate the migration:\n\n1. **Review all exports:**\n\n   ```bash\n   pulumi stack output\n   ```\n\n2. **Verify resource relationships:**\n\n   ```bash\n   pulumi stack graph\n   ```\n\n3. **Test application functionality** (if applicable)\n\n4. **Document any manual steps** required post-migration\n\n## WORKING WITH THE USER\n\nIf 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.\n\n## FOR DETAILED DOCUMENTATION\n\nWhen the user wants additional information, use the web-fetch tool to get content from the official Pulumi documentation:\n\n- **ARM Migration Guide:** https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fiac\u002Fadopting-pulumi\u002Fmigrating-to-pulumi\u002Ffrom-arm\u002F\n- **Azure Native Provider:** https:\u002F\u002Fwww.pulumi.com\u002Fregistry\u002Fpackages\u002Fazure-native\u002F\n- **Azure Classic Provider:** https:\u002F\u002Fwww.pulumi.com\u002Fregistry\u002Fpackages\u002Fazure\u002F\n\n**Microsoft Azure Documentation:**\n\n- **ARM Template Reference:** https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fazure-resource-manager\u002Ftemplates\u002F\n- **Azure CLI Reference:** https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fcli\u002Fazure\u002F\n- **Azure Resource IDs:** https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fazure-resource-manager\u002Ftemplates\u002Ftemplate-functions-resource\n\n## OUTPUT FORMAT (REQUIRED)\n\nWhen performing a migration, always produce:\n\n1. **Overview** (high-level description)\n2. **Migration Plan Summary**\n   - ARM template resources identified\n   - Conversion strategy (language, providers)\n   - Import approach (if applicable)\n3. **Pulumi Code Outputs** (organized by file)\n   - Main program file\n   - Component resources (if any)\n   - Configuration instructions\n4. **Resource Mapping Table** (ARM → Pulumi)\n   - ARM resource type → Pulumi resource type\n   - ARM resource name → Pulumi logical name\n   - Import ID (if importing)\n5. **Preview Resolution Notes** (if importing)\n   - Diffs encountered\n   - Resolution strategy applied\n   - Properties ignored vs. added\n6. **Final Migration Report** (PR-ready)\n   - Summary of changes\n   - Testing instructions\n   - Known limitations\n   - Next steps\n7. **Configuration Setup**\n   - Required config values\n   - Example `pulumi config set` commands\n\nKeep code syntactically valid and clearly separated by files.\n",{"data":37,"body":38},{"name":4,"description":6},{"type":39,"children":40},"root",[41,50,60,85,91,96,269,275,287,298,304,316,323,330,357,377,385,428,446,452,457,623,628,666,684,690,695,961,976,982,999,1005,1191,1205,1214,1242,1248,1253,1269,1277,1310,1316,1419,1425,1430,1583,1589,1594,1680,1686,1691,1697,1702,1748,1756,1803,1809,1814,1998,2003],{"type":42,"tag":43,"props":44,"children":46},"element","h2",{"id":45},"important-plan-adjustment-required",[47],{"type":48,"value":49},"text","IMPORTANT: PLAN ADJUSTMENT REQUIRED",{"type":42,"tag":51,"props":52,"children":53},"p",{},[54],{"type":42,"tag":55,"props":56,"children":57},"strong",{},[58],{"type":48,"value":59},"If you have already generated a migration plan before loading this skill, you MUST:",{"type":42,"tag":61,"props":62,"children":63},"ol",{},[64,70,75,80],{"type":42,"tag":65,"props":66,"children":67},"li",{},[68],{"type":48,"value":69},"Review your existing plan against the workflows and requirements in this skill",{"type":42,"tag":65,"props":71,"children":72},{},[73],{"type":48,"value":74},"Identify any gaps, missing steps, or incorrect assumptions",{"type":42,"tag":65,"props":76,"children":77},{},[78],{"type":48,"value":79},"Update and revise your plan to align with this skill's guidance",{"type":42,"tag":65,"props":81,"children":82},{},[83],{"type":48,"value":84},"Communicate the adjusted plan to the user before proceeding",{"type":42,"tag":43,"props":86,"children":88},{"id":87},"critical-success-requirements",[89],{"type":48,"value":90},"CRITICAL SUCCESS REQUIREMENTS",{"type":42,"tag":51,"props":92,"children":93},{},[94],{"type":48,"value":95},"The migration output MUST meet all of the following:",{"type":42,"tag":61,"props":97,"children":98},{},[99,134,159,220],{"type":42,"tag":65,"props":100,"children":101},{},[102,107],{"type":42,"tag":55,"props":103,"children":104},{},[105],{"type":48,"value":106},"Complete Resource Coverage",{"type":42,"tag":108,"props":109,"children":110},"ul",{},[111],{"type":42,"tag":65,"props":112,"children":113},{},[114,116],{"type":48,"value":115},"Every ARM template resource MUST:\n",{"type":42,"tag":108,"props":117,"children":118},{},[119,129],{"type":42,"tag":65,"props":120,"children":121},{},[122,124],{"type":48,"value":123},"Be represented in the Pulumi program ",{"type":42,"tag":55,"props":125,"children":126},{},[127],{"type":48,"value":128},"OR",{"type":42,"tag":65,"props":130,"children":131},{},[132],{"type":48,"value":133},"Be explicitly justified in the final report.",{"type":42,"tag":65,"props":135,"children":136},{},[137,142],{"type":42,"tag":55,"props":138,"children":139},{},[140],{"type":48,"value":141},"Successful Deployment",{"type":42,"tag":108,"props":143,"children":144},{},[145],{"type":42,"tag":65,"props":146,"children":147},{},[148,150,157],{"type":48,"value":149},"The produced Pulumi program must be structurally valid and capable of a successful ",{"type":42,"tag":151,"props":152,"children":154},"code",{"className":153},[],[155],{"type":48,"value":156},"pulumi preview",{"type":48,"value":158}," (assuming proper config).",{"type":42,"tag":65,"props":160,"children":161},{},[162,167,169],{"type":42,"tag":55,"props":163,"children":164},{},[165],{"type":48,"value":166},"Zero-Diff Import Validation",{"type":48,"value":168}," (if importing existing resources)",{"type":42,"tag":108,"props":170,"children":171},{},[172,207],{"type":42,"tag":65,"props":173,"children":174},{},[175,177,182,184],{"type":48,"value":176},"After import, ",{"type":42,"tag":151,"props":178,"children":180},{"className":179},[],[181],{"type":48,"value":156},{"type":48,"value":183}," must show:\n",{"type":42,"tag":108,"props":185,"children":186},{},[187,192,197,202],{"type":42,"tag":65,"props":188,"children":189},{},[190],{"type":48,"value":191},"NO updates",{"type":42,"tag":65,"props":193,"children":194},{},[195],{"type":48,"value":196},"NO replaces",{"type":42,"tag":65,"props":198,"children":199},{},[200],{"type":48,"value":201},"NO creates",{"type":42,"tag":65,"props":203,"children":204},{},[205],{"type":48,"value":206},"NO deletes",{"type":42,"tag":65,"props":208,"children":209},{},[210,212,218],{"type":48,"value":211},"Any diffs must be resolved using the Preview Resolution Workflow. See ",{"type":42,"tag":213,"props":214,"children":216},"a",{"href":215},"arm-import.md",[217],{"type":48,"value":215},{"type":48,"value":219},".",{"type":42,"tag":65,"props":221,"children":222},{},[223,228],{"type":42,"tag":55,"props":224,"children":225},{},[226],{"type":48,"value":227},"Final Migration Report",{"type":42,"tag":108,"props":229,"children":230},{},[231,236],{"type":42,"tag":65,"props":232,"children":233},{},[234],{"type":48,"value":235},"Always output a formal migration report suitable for a Pull Request.",{"type":42,"tag":65,"props":237,"children":238},{},[239,241],{"type":48,"value":240},"Include:\n",{"type":42,"tag":108,"props":242,"children":243},{},[244,249,254,259,264],{"type":42,"tag":65,"props":245,"children":246},{},[247],{"type":48,"value":248},"ARM → Pulumi resource mapping",{"type":42,"tag":65,"props":250,"children":251},{},[252],{"type":48,"value":253},"Provider decisions (azure-native vs azure)",{"type":42,"tag":65,"props":255,"children":256},{},[257],{"type":48,"value":258},"Behavioral differences",{"type":42,"tag":65,"props":260,"children":261},{},[262],{"type":48,"value":263},"Missing or manually required steps",{"type":42,"tag":65,"props":265,"children":266},{},[267],{"type":48,"value":268},"Validation instructions",{"type":42,"tag":43,"props":270,"children":272},{"id":271},"when-information-is-missing",[273],{"type":48,"value":274},"WHEN INFORMATION IS MISSING",{"type":42,"tag":51,"props":276,"children":277},{},[278,280,285],{"type":48,"value":279},"If a user-provided ARM template is incomplete, ambiguous, or missing artifacts, ask ",{"type":42,"tag":55,"props":281,"children":282},{},[283],{"type":48,"value":284},"targeted questions",{"type":48,"value":286}," before generating Pulumi code.",{"type":42,"tag":51,"props":288,"children":289},{},[290,292,296],{"type":48,"value":291},"If there is ambiguity on how to handle a specific resource property on import, ask ",{"type":42,"tag":55,"props":293,"children":294},{},[295],{"type":48,"value":284},{"type":48,"value":297}," before altering Pulumi code.",{"type":42,"tag":43,"props":299,"children":301},{"id":300},"migration-workflow",[302],{"type":48,"value":303},"MIGRATION WORKFLOW",{"type":42,"tag":51,"props":305,"children":306},{},[307,309,314],{"type":48,"value":308},"Follow this workflow ",{"type":42,"tag":55,"props":310,"children":311},{},[312],{"type":48,"value":313},"exactly",{"type":48,"value":315}," and in this order:",{"type":42,"tag":317,"props":318,"children":320},"h3",{"id":319},"_1-information-gathering",[321],{"type":48,"value":322},"1. INFORMATION GATHERING",{"type":42,"tag":324,"props":325,"children":327},"h4",{"id":326},"_11-verify-azure-credentials",[328],{"type":48,"value":329},"1.1 Verify Azure Credentials",{"type":42,"tag":51,"props":331,"children":332},{},[333,335,341,343,349,351],{"type":48,"value":334},"Running Azure CLI commands (e.g., ",{"type":42,"tag":151,"props":336,"children":338},{"className":337},[],[339],{"type":48,"value":340},"az resource list",{"type":48,"value":342},", ",{"type":42,"tag":151,"props":344,"children":346},{"className":345},[],[347],{"type":48,"value":348},"az resource show",{"type":48,"value":350},"). Requires initial login using ESC and ",{"type":42,"tag":151,"props":352,"children":354},{"className":353},[],[355],{"type":48,"value":356},"az login",{"type":42,"tag":108,"props":358,"children":359},{},[360,365],{"type":42,"tag":65,"props":361,"children":362},{},[363],{"type":48,"value":364},"If the user has already provided an ESC environment, use it.",{"type":42,"tag":65,"props":366,"children":367},{},[368,370,375],{"type":48,"value":369},"If no ESC environment is specified, ",{"type":42,"tag":55,"props":371,"children":372},{},[373],{"type":48,"value":374},"ask the user which ESC environment to use",{"type":48,"value":376}," before proceeding with Azure CLI commands.",{"type":42,"tag":51,"props":378,"children":379},{},[380],{"type":42,"tag":55,"props":381,"children":382},{},[383],{"type":48,"value":384},"Setting up Azure CLI using ESC:",{"type":42,"tag":108,"props":386,"children":387},{},[388,393,406,417],{"type":42,"tag":65,"props":389,"children":390},{},[391],{"type":48,"value":392},"ESC environments can provide Azure credentials through environment variables or Azure CLI configuration",{"type":42,"tag":65,"props":394,"children":395},{},[396,398,404],{"type":48,"value":397},"Login to Azure using ESC to provide credentials, e.g: ",{"type":42,"tag":151,"props":399,"children":401},{"className":400},[],[402],{"type":48,"value":403},"pulumi env run {org}\u002F{project}\u002F{environment} -- bash -c 'az login --service-principal -u \"$ARM_CLIENT_ID\" --tenant \"$ARM_TENANT_ID\" --federated-token \"$ARM_OIDC_TOKEN\"'",{"type":48,"value":405},". ESC is not required after establishing the session",{"type":42,"tag":65,"props":407,"children":408},{},[409,411],{"type":48,"value":410},"Verify credentials are working: ",{"type":42,"tag":151,"props":412,"children":414},{"className":413},[],[415],{"type":48,"value":416},"az account show",{"type":42,"tag":65,"props":418,"children":419},{},[420,422],{"type":48,"value":421},"Confirm subscription: ",{"type":42,"tag":151,"props":423,"children":425},{"className":424},[],[426],{"type":48,"value":427},"az account list --query \"[].{Name:name, SubscriptionId:id, IsDefault:isDefault}\" -o table",{"type":42,"tag":51,"props":429,"children":430},{},[431,436,438,444],{"type":42,"tag":55,"props":432,"children":433},{},[434],{"type":48,"value":435},"For detailed ESC information:",{"type":48,"value":437}," Load the ",{"type":42,"tag":151,"props":439,"children":441},{"className":440},[],[442],{"type":48,"value":443},"pulumi-esc",{"type":48,"value":445}," skill by calling the tool \"Skill\" with name = \"pulumi-esc\"",{"type":42,"tag":324,"props":447,"children":449},{"id":448},"_12-analyze-arm-template-structure",[450],{"type":48,"value":451},"1.2 Analyze ARM Template Structure",{"type":42,"tag":51,"props":453,"children":454},{},[455],{"type":48,"value":456},"ARM templates do not have the concept of \"stacks\" like CloudFormation. Read the ARM template JSON file directly:",{"type":42,"tag":458,"props":459,"children":464},"pre",{"className":460,"code":461,"language":462,"meta":463,"style":463},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# View template structure\ncat template.json | jq '.resources[] | {type: .type, name: .name}'\n\n# View parameters\ncat template.json | jq '.parameters'\n\n# View variables\ncat template.json | jq '.variables'\n","bash","",[465],{"type":42,"tag":151,"props":466,"children":467},{"__ignoreMap":463},[468,480,522,532,540,573,581,590],{"type":42,"tag":469,"props":470,"children":473},"span",{"class":471,"line":472},"line",1,[474],{"type":42,"tag":469,"props":475,"children":477},{"style":476},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[478],{"type":48,"value":479},"# View template structure\n",{"type":42,"tag":469,"props":481,"children":483},{"class":471,"line":482},2,[484,490,496,502,507,512,517],{"type":42,"tag":469,"props":485,"children":487},{"style":486},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[488],{"type":48,"value":489},"cat",{"type":42,"tag":469,"props":491,"children":493},{"style":492},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[494],{"type":48,"value":495}," template.json",{"type":42,"tag":469,"props":497,"children":499},{"style":498},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[500],{"type":48,"value":501}," |",{"type":42,"tag":469,"props":503,"children":504},{"style":486},[505],{"type":48,"value":506}," jq",{"type":42,"tag":469,"props":508,"children":509},{"style":498},[510],{"type":48,"value":511}," '",{"type":42,"tag":469,"props":513,"children":514},{"style":492},[515],{"type":48,"value":516},".resources[] | {type: .type, name: .name}",{"type":42,"tag":469,"props":518,"children":519},{"style":498},[520],{"type":48,"value":521},"'\n",{"type":42,"tag":469,"props":523,"children":525},{"class":471,"line":524},3,[526],{"type":42,"tag":469,"props":527,"children":529},{"emptyLinePlaceholder":528},true,[530],{"type":48,"value":531},"\n",{"type":42,"tag":469,"props":533,"children":534},{"class":471,"line":30},[535],{"type":42,"tag":469,"props":536,"children":537},{"style":476},[538],{"type":48,"value":539},"# View parameters\n",{"type":42,"tag":469,"props":541,"children":543},{"class":471,"line":542},5,[544,548,552,556,560,564,569],{"type":42,"tag":469,"props":545,"children":546},{"style":486},[547],{"type":48,"value":489},{"type":42,"tag":469,"props":549,"children":550},{"style":492},[551],{"type":48,"value":495},{"type":42,"tag":469,"props":553,"children":554},{"style":498},[555],{"type":48,"value":501},{"type":42,"tag":469,"props":557,"children":558},{"style":486},[559],{"type":48,"value":506},{"type":42,"tag":469,"props":561,"children":562},{"style":498},[563],{"type":48,"value":511},{"type":42,"tag":469,"props":565,"children":566},{"style":492},[567],{"type":48,"value":568},".parameters",{"type":42,"tag":469,"props":570,"children":571},{"style":498},[572],{"type":48,"value":521},{"type":42,"tag":469,"props":574,"children":576},{"class":471,"line":575},6,[577],{"type":42,"tag":469,"props":578,"children":579},{"emptyLinePlaceholder":528},[580],{"type":48,"value":531},{"type":42,"tag":469,"props":582,"children":584},{"class":471,"line":583},7,[585],{"type":42,"tag":469,"props":586,"children":587},{"style":476},[588],{"type":48,"value":589},"# View variables\n",{"type":42,"tag":469,"props":591,"children":593},{"class":471,"line":592},8,[594,598,602,606,610,614,619],{"type":42,"tag":469,"props":595,"children":596},{"style":486},[597],{"type":48,"value":489},{"type":42,"tag":469,"props":599,"children":600},{"style":492},[601],{"type":48,"value":495},{"type":42,"tag":469,"props":603,"children":604},{"style":498},[605],{"type":48,"value":501},{"type":42,"tag":469,"props":607,"children":608},{"style":486},[609],{"type":48,"value":506},{"type":42,"tag":469,"props":611,"children":612},{"style":498},[613],{"type":48,"value":511},{"type":42,"tag":469,"props":615,"children":616},{"style":492},[617],{"type":48,"value":618},".variables",{"type":42,"tag":469,"props":620,"children":621},{"style":498},[622],{"type":48,"value":521},{"type":42,"tag":51,"props":624,"children":625},{},[626],{"type":48,"value":627},"Extract:",{"type":42,"tag":108,"props":629,"children":630},{},[631,636,641,646,651,656,661],{"type":42,"tag":65,"props":632,"children":633},{},[634],{"type":48,"value":635},"Resource types and names",{"type":42,"tag":65,"props":637,"children":638},{},[639],{"type":48,"value":640},"Parameters and their default values",{"type":42,"tag":65,"props":642,"children":643},{},[644],{"type":48,"value":645},"Variables and expressions",{"type":42,"tag":65,"props":647,"children":648},{},[649],{"type":48,"value":650},"Dependencies (dependsOn arrays)",{"type":42,"tag":65,"props":652,"children":653},{},[654],{"type":48,"value":655},"Nested templates or linked templates",{"type":42,"tag":65,"props":657,"children":658},{},[659],{"type":48,"value":660},"Copy loops (iteration constructs)",{"type":42,"tag":65,"props":662,"children":663},{},[664],{"type":48,"value":665},"Conditional deployments (condition property)",{"type":42,"tag":51,"props":667,"children":668},{},[669,674,676],{"type":42,"tag":55,"props":670,"children":671},{},[672],{"type":48,"value":673},"Documentation:",{"type":48,"value":675}," ",{"type":42,"tag":213,"props":677,"children":681},{"href":678,"rel":679},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fazure-resource-manager\u002Ftemplates\u002Fsyntax",[680],"nofollow",[682],{"type":48,"value":683},"ARM Template Structure",{"type":42,"tag":324,"props":685,"children":687},{"id":686},"_13-build-resource-inventory-if-importing-existing-resources",[688],{"type":48,"value":689},"1.3 Build Resource Inventory (if importing existing resources)",{"type":42,"tag":51,"props":691,"children":692},{},[693],{"type":48,"value":694},"If the ARM template has already been deployed and you're importing existing resources:",{"type":42,"tag":458,"props":696,"children":698},{"className":460,"code":697,"language":462,"meta":463,"style":463},"# List all resources in a resource group\naz resource list \\\n  --resource-group \u003Cresource-group-name> \\\n  --output json\n\n# Get specific resource details\naz resource show \\\n  --ids \u003Cresource-id> \\\n  --output json\n\n# Query specific properties using JMESPath\naz resource show \\\n  --ids \u003Cresource-id> \\\n  --query \"{name:name, location:location, properties:properties}\" \\\n  --output json\n",[699],{"type":42,"tag":151,"props":700,"children":701},{"__ignoreMap":463},[702,710,734,766,779,786,794,814,844,856,864,873,893,921,949],{"type":42,"tag":469,"props":703,"children":704},{"class":471,"line":472},[705],{"type":42,"tag":469,"props":706,"children":707},{"style":476},[708],{"type":48,"value":709},"# List all resources in a resource group\n",{"type":42,"tag":469,"props":711,"children":712},{"class":471,"line":482},[713,718,723,728],{"type":42,"tag":469,"props":714,"children":715},{"style":486},[716],{"type":48,"value":717},"az",{"type":42,"tag":469,"props":719,"children":720},{"style":492},[721],{"type":48,"value":722}," resource",{"type":42,"tag":469,"props":724,"children":725},{"style":492},[726],{"type":48,"value":727}," list",{"type":42,"tag":469,"props":729,"children":731},{"style":730},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[732],{"type":48,"value":733}," \\\n",{"type":42,"tag":469,"props":735,"children":736},{"class":471,"line":524},[737,742,747,752,757,762],{"type":42,"tag":469,"props":738,"children":739},{"style":492},[740],{"type":48,"value":741},"  --resource-group",{"type":42,"tag":469,"props":743,"children":744},{"style":498},[745],{"type":48,"value":746}," \u003C",{"type":42,"tag":469,"props":748,"children":749},{"style":492},[750],{"type":48,"value":751},"resource-group-nam",{"type":42,"tag":469,"props":753,"children":754},{"style":730},[755],{"type":48,"value":756},"e",{"type":42,"tag":469,"props":758,"children":759},{"style":498},[760],{"type":48,"value":761},">",{"type":42,"tag":469,"props":763,"children":764},{"style":730},[765],{"type":48,"value":733},{"type":42,"tag":469,"props":767,"children":768},{"class":471,"line":30},[769,774],{"type":42,"tag":469,"props":770,"children":771},{"style":492},[772],{"type":48,"value":773},"  --output",{"type":42,"tag":469,"props":775,"children":776},{"style":492},[777],{"type":48,"value":778}," json\n",{"type":42,"tag":469,"props":780,"children":781},{"class":471,"line":542},[782],{"type":42,"tag":469,"props":783,"children":784},{"emptyLinePlaceholder":528},[785],{"type":48,"value":531},{"type":42,"tag":469,"props":787,"children":788},{"class":471,"line":575},[789],{"type":42,"tag":469,"props":790,"children":791},{"style":476},[792],{"type":48,"value":793},"# Get specific resource details\n",{"type":42,"tag":469,"props":795,"children":796},{"class":471,"line":583},[797,801,805,810],{"type":42,"tag":469,"props":798,"children":799},{"style":486},[800],{"type":48,"value":717},{"type":42,"tag":469,"props":802,"children":803},{"style":492},[804],{"type":48,"value":722},{"type":42,"tag":469,"props":806,"children":807},{"style":492},[808],{"type":48,"value":809}," show",{"type":42,"tag":469,"props":811,"children":812},{"style":730},[813],{"type":48,"value":733},{"type":42,"tag":469,"props":815,"children":816},{"class":471,"line":592},[817,822,826,831,836,840],{"type":42,"tag":469,"props":818,"children":819},{"style":492},[820],{"type":48,"value":821},"  --ids",{"type":42,"tag":469,"props":823,"children":824},{"style":498},[825],{"type":48,"value":746},{"type":42,"tag":469,"props":827,"children":828},{"style":492},[829],{"type":48,"value":830},"resource-i",{"type":42,"tag":469,"props":832,"children":833},{"style":730},[834],{"type":48,"value":835},"d",{"type":42,"tag":469,"props":837,"children":838},{"style":498},[839],{"type":48,"value":761},{"type":42,"tag":469,"props":841,"children":842},{"style":730},[843],{"type":48,"value":733},{"type":42,"tag":469,"props":845,"children":847},{"class":471,"line":846},9,[848,852],{"type":42,"tag":469,"props":849,"children":850},{"style":492},[851],{"type":48,"value":773},{"type":42,"tag":469,"props":853,"children":854},{"style":492},[855],{"type":48,"value":778},{"type":42,"tag":469,"props":857,"children":859},{"class":471,"line":858},10,[860],{"type":42,"tag":469,"props":861,"children":862},{"emptyLinePlaceholder":528},[863],{"type":48,"value":531},{"type":42,"tag":469,"props":865,"children":867},{"class":471,"line":866},11,[868],{"type":42,"tag":469,"props":869,"children":870},{"style":476},[871],{"type":48,"value":872},"# Query specific properties using JMESPath\n",{"type":42,"tag":469,"props":874,"children":876},{"class":471,"line":875},12,[877,881,885,889],{"type":42,"tag":469,"props":878,"children":879},{"style":486},[880],{"type":48,"value":717},{"type":42,"tag":469,"props":882,"children":883},{"style":492},[884],{"type":48,"value":722},{"type":42,"tag":469,"props":886,"children":887},{"style":492},[888],{"type":48,"value":809},{"type":42,"tag":469,"props":890,"children":891},{"style":730},[892],{"type":48,"value":733},{"type":42,"tag":469,"props":894,"children":896},{"class":471,"line":895},13,[897,901,905,909,913,917],{"type":42,"tag":469,"props":898,"children":899},{"style":492},[900],{"type":48,"value":821},{"type":42,"tag":469,"props":902,"children":903},{"style":498},[904],{"type":48,"value":746},{"type":42,"tag":469,"props":906,"children":907},{"style":492},[908],{"type":48,"value":830},{"type":42,"tag":469,"props":910,"children":911},{"style":730},[912],{"type":48,"value":835},{"type":42,"tag":469,"props":914,"children":915},{"style":498},[916],{"type":48,"value":761},{"type":42,"tag":469,"props":918,"children":919},{"style":730},[920],{"type":48,"value":733},{"type":42,"tag":469,"props":922,"children":924},{"class":471,"line":923},14,[925,930,935,940,945],{"type":42,"tag":469,"props":926,"children":927},{"style":492},[928],{"type":48,"value":929},"  --query",{"type":42,"tag":469,"props":931,"children":932},{"style":498},[933],{"type":48,"value":934}," \"",{"type":42,"tag":469,"props":936,"children":937},{"style":492},[938],{"type":48,"value":939},"{name:name, location:location, properties:properties}",{"type":42,"tag":469,"props":941,"children":942},{"style":498},[943],{"type":48,"value":944},"\"",{"type":42,"tag":469,"props":946,"children":947},{"style":730},[948],{"type":48,"value":733},{"type":42,"tag":469,"props":950,"children":952},{"class":471,"line":951},15,[953,957],{"type":42,"tag":469,"props":954,"children":955},{"style":492},[956],{"type":48,"value":773},{"type":42,"tag":469,"props":958,"children":959},{"style":492},[960],{"type":48,"value":778},{"type":42,"tag":51,"props":962,"children":963},{},[964,968,969],{"type":42,"tag":55,"props":965,"children":966},{},[967],{"type":48,"value":673},{"type":48,"value":675},{"type":42,"tag":213,"props":970,"children":973},{"href":971,"rel":972},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fcli\u002Fazure\u002F",[680],[974],{"type":48,"value":975},"Azure CLI Documentation",{"type":42,"tag":317,"props":977,"children":979},{"id":978},"_2-code-conversion-arm-pulumi",[980],{"type":48,"value":981},"2. CODE CONVERSION (ARM → PULUMI)",{"type":42,"tag":51,"props":983,"children":984},{},[985,990,992,997],{"type":42,"tag":55,"props":986,"children":987},{},[988],{"type":48,"value":989},"IMPORTANT:",{"type":48,"value":991}," ARM to Pulumi conversion requires manual translation. There is ",{"type":42,"tag":55,"props":993,"children":994},{},[995],{"type":48,"value":996},"NO",{"type":48,"value":998}," automated conversion tool for ARM templates. You are responsible for the complete conversion.",{"type":42,"tag":324,"props":1000,"children":1002},{"id":1001},"key-conversion-principles",[1003],{"type":48,"value":1004},"Key Conversion Principles",{"type":42,"tag":61,"props":1006,"children":1007},{},[1008,1087,1164],{"type":42,"tag":65,"props":1009,"children":1010},{},[1011,1016,1018,1056,1060,1064],{"type":42,"tag":55,"props":1012,"children":1013},{},[1014],{"type":48,"value":1015},"Provider Strategy",{"type":48,"value":1017},":",{"type":42,"tag":108,"props":1019,"children":1020},{},[1021,1039],{"type":42,"tag":65,"props":1022,"children":1023},{},[1024,1029,1031,1037],{"type":42,"tag":55,"props":1025,"children":1026},{},[1027],{"type":48,"value":1028},"Default",{"type":48,"value":1030},": Use ",{"type":42,"tag":151,"props":1032,"children":1034},{"className":1033},[],[1035],{"type":48,"value":1036},"@pulumi\u002Fazure-native",{"type":48,"value":1038}," for full Azure Resource Manager API coverage",{"type":42,"tag":65,"props":1040,"children":1041},{},[1042,1047,1048,1054],{"type":42,"tag":55,"props":1043,"children":1044},{},[1045],{"type":48,"value":1046},"Fallback",{"type":48,"value":1030},{"type":42,"tag":151,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":48,"value":1053},"@pulumi\u002Fazure",{"type":48,"value":1055}," (classic provider) when azure-native doesn't support specific features or when you need simplified abstractions",{"type":42,"tag":1057,"props":1058,"children":1059},"br",{},[],{"type":42,"tag":55,"props":1061,"children":1062},{},[1063],{"type":48,"value":673},{"type":42,"tag":108,"props":1065,"children":1066},{},[1067,1077],{"type":42,"tag":65,"props":1068,"children":1069},{},[1070],{"type":42,"tag":213,"props":1071,"children":1074},{"href":1072,"rel":1073},"https:\u002F\u002Fwww.pulumi.com\u002Fregistry\u002Fpackages\u002Fazure-native\u002F",[680],[1075],{"type":48,"value":1076},"Azure Native Provider",{"type":42,"tag":65,"props":1078,"children":1079},{},[1080],{"type":42,"tag":213,"props":1081,"children":1084},{"href":1082,"rel":1083},"https:\u002F\u002Fwww.pulumi.com\u002Fregistry\u002Fpackages\u002Fazure\u002F",[680],[1085],{"type":48,"value":1086},"Azure Classic Provider",{"type":42,"tag":65,"props":1088,"children":1089},{},[1090,1095,1096],{"type":42,"tag":55,"props":1091,"children":1092},{},[1093],{"type":48,"value":1094},"Language Support",{"type":48,"value":1017},{"type":42,"tag":108,"props":1097,"children":1098},{},[1099,1109,1119,1129,1139,1149,1159],{"type":42,"tag":65,"props":1100,"children":1101},{},[1102,1107],{"type":42,"tag":55,"props":1103,"children":1104},{},[1105],{"type":48,"value":1106},"TypeScript\u002FJavaScript",{"type":48,"value":1108},": Most common, excellent IDE support",{"type":42,"tag":65,"props":1110,"children":1111},{},[1112,1117],{"type":42,"tag":55,"props":1113,"children":1114},{},[1115],{"type":48,"value":1116},"Python",{"type":48,"value":1118},": Great for data teams and ML workflows",{"type":42,"tag":65,"props":1120,"children":1121},{},[1122,1127],{"type":42,"tag":55,"props":1123,"children":1124},{},[1125],{"type":48,"value":1126},"C#",{"type":48,"value":1128},": Natural fit for .NET teams",{"type":42,"tag":65,"props":1130,"children":1131},{},[1132,1137],{"type":42,"tag":55,"props":1133,"children":1134},{},[1135],{"type":48,"value":1136},"Go",{"type":48,"value":1138},": High performance, strong typing",{"type":42,"tag":65,"props":1140,"children":1141},{},[1142,1147],{"type":42,"tag":55,"props":1143,"children":1144},{},[1145],{"type":48,"value":1146},"Java",{"type":48,"value":1148},": Enterprise Java teams",{"type":42,"tag":65,"props":1150,"children":1151},{},[1152,1157],{"type":42,"tag":55,"props":1153,"children":1154},{},[1155],{"type":48,"value":1156},"YAML",{"type":48,"value":1158},": Simple declarative approach",{"type":42,"tag":65,"props":1160,"children":1161},{},[1162],{"type":48,"value":1163},"Choose based on user preference or existing codebase",{"type":42,"tag":65,"props":1165,"children":1166},{},[1167,1172,1173],{"type":42,"tag":55,"props":1168,"children":1169},{},[1170],{"type":48,"value":1171},"Complete Coverage",{"type":48,"value":1017},{"type":42,"tag":108,"props":1174,"children":1175},{},[1176,1181,1186],{"type":42,"tag":65,"props":1177,"children":1178},{},[1179],{"type":48,"value":1180},"Convert ALL resources in the ARM template",{"type":42,"tag":65,"props":1182,"children":1183},{},[1184],{"type":48,"value":1185},"Preserve all conditionals, loops, and dependencies",{"type":42,"tag":65,"props":1187,"children":1188},{},[1189],{"type":48,"value":1190},"Maintain parameter and variable logic",{"type":42,"tag":51,"props":1192,"children":1193},{},[1194],{"type":42,"tag":55,"props":1195,"children":1196},{},[1197,1199,1204],{"type":48,"value":1198},"Follow conversion patterns in ",{"type":42,"tag":213,"props":1200,"children":1202},{"href":1201},"arm-conversion-patterns.md",[1203],{"type":48,"value":1201},{"type":48,"value":219},{"type":42,"tag":51,"props":1206,"children":1207},{},[1208,1212],{"type":42,"tag":213,"props":1209,"children":1210},{"href":1201},[1211],{"type":48,"value":1201},{"type":48,"value":1213}," provides:",{"type":42,"tag":108,"props":1215,"children":1216},{},[1217,1222,1227,1232,1237],{"type":42,"tag":65,"props":1218,"children":1219},{},[1220],{"type":48,"value":1221},"Parameters, variables, and outputs mapping",{"type":42,"tag":65,"props":1223,"children":1224},{},[1225],{"type":48,"value":1226},"Copy loops, conditionals, and dependsOn translation",{"type":42,"tag":65,"props":1228,"children":1229},{},[1230],{"type":48,"value":1231},"Nested templates → ComponentResource",{"type":42,"tag":65,"props":1233,"children":1234},{},[1235],{"type":48,"value":1236},"Azure Classic provider examples (VNet, App Service)",{"type":42,"tag":65,"props":1238,"children":1239},{},[1240],{"type":48,"value":1241},"TypeScript output handling and common pitfalls",{"type":42,"tag":317,"props":1243,"children":1245},{"id":1244},"_3-resource-import-existing-resources-optional",[1246],{"type":48,"value":1247},"3. RESOURCE IMPORT (EXISTING RESOURCES) - OPTIONAL",{"type":42,"tag":51,"props":1249,"children":1250},{},[1251],{"type":48,"value":1252},"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.",{"type":42,"tag":51,"props":1254,"children":1255},{},[1256,1261,1263,1267],{"type":42,"tag":55,"props":1257,"children":1258},{},[1259],{"type":48,"value":1260},"CRITICAL",{"type":48,"value":1262},": When the user requests importing existing Azure resources into Pulumi, see ",{"type":42,"tag":213,"props":1264,"children":1265},{"href":215},[1266],{"type":48,"value":215},{"type":48,"value":1268}," for detailed import procedures and zero-diff validation workflows.",{"type":42,"tag":51,"props":1270,"children":1271},{},[1272,1276],{"type":42,"tag":213,"props":1273,"children":1274},{"href":215},[1275],{"type":48,"value":215},{"type":48,"value":1213},{"type":42,"tag":108,"props":1278,"children":1279},{},[1280,1285,1290,1295,1305],{"type":42,"tag":65,"props":1281,"children":1282},{},[1283],{"type":48,"value":1284},"Inline import ID patterns and examples",{"type":42,"tag":65,"props":1286,"children":1287},{},[1288],{"type":48,"value":1289},"Azure Resource ID format conventions",{"type":42,"tag":65,"props":1291,"children":1292},{},[1293],{"type":48,"value":1294},"Child resource handling (e.g., WebAppApplicationSettings)",{"type":42,"tag":65,"props":1296,"children":1297},{},[1298,1303],{"type":42,"tag":55,"props":1299,"children":1300},{},[1301],{"type":48,"value":1302},"Preview Resolution Workflow",{"type":48,"value":1304}," for achieving zero-diff after import",{"type":42,"tag":65,"props":1306,"children":1307},{},[1308],{"type":48,"value":1309},"Step-by-step debugging for property conflicts",{"type":42,"tag":324,"props":1311,"children":1313},{"id":1312},"key-import-principles",[1314],{"type":48,"value":1315},"Key Import Principles",{"type":42,"tag":61,"props":1317,"children":1318},{},[1319,1357,1385],{"type":42,"tag":65,"props":1320,"children":1321},{},[1322,1327,1328],{"type":42,"tag":55,"props":1323,"children":1324},{},[1325],{"type":48,"value":1326},"Inline Import Approach",{"type":48,"value":1017},{"type":42,"tag":108,"props":1329,"children":1330},{},[1331,1344],{"type":42,"tag":65,"props":1332,"children":1333},{},[1334,1336,1342],{"type":48,"value":1335},"Use ",{"type":42,"tag":151,"props":1337,"children":1339},{"className":1338},[],[1340],{"type":48,"value":1341},"import",{"type":48,"value":1343}," resource option with Azure Resource IDs",{"type":42,"tag":65,"props":1345,"children":1346},{},[1347,1349,1355],{"type":48,"value":1348},"No separate import tool (unlike ",{"type":42,"tag":151,"props":1350,"children":1352},{"className":1351},[],[1353],{"type":48,"value":1354},"pulumi-cdk-importer",{"type":48,"value":1356},")",{"type":42,"tag":65,"props":1358,"children":1359},{},[1360,1365,1366],{"type":42,"tag":55,"props":1361,"children":1362},{},[1363],{"type":48,"value":1364},"Azure Resource IDs",{"type":48,"value":1017},{"type":42,"tag":108,"props":1367,"children":1368},{},[1369,1380],{"type":42,"tag":65,"props":1370,"children":1371},{},[1372,1374],{"type":48,"value":1373},"Follow predictable pattern: ",{"type":42,"tag":151,"props":1375,"children":1377},{"className":1376},[],[1378],{"type":48,"value":1379},"\u002Fsubscriptions\u002F{subscriptionId}\u002FresourceGroups\u002F{resourceGroupName}\u002Fproviders\u002F{resourceProviderNamespace}\u002F{resourceType}\u002F{resourceName}",{"type":42,"tag":65,"props":1381,"children":1382},{},[1383],{"type":48,"value":1384},"Can be generated by convention or queried via Azure CLI",{"type":42,"tag":65,"props":1386,"children":1387},{},[1388,1393,1394],{"type":42,"tag":55,"props":1389,"children":1390},{},[1391],{"type":48,"value":1392},"Zero-Diff Validation",{"type":48,"value":1017},{"type":42,"tag":108,"props":1395,"children":1396},{},[1397,1409,1414],{"type":42,"tag":65,"props":1398,"children":1399},{},[1400,1402,1407],{"type":48,"value":1401},"Run ",{"type":42,"tag":151,"props":1403,"children":1405},{"className":1404},[],[1406],{"type":48,"value":156},{"type":48,"value":1408}," after import",{"type":42,"tag":65,"props":1410,"children":1411},{},[1412],{"type":48,"value":1413},"Resolve all diffs using Preview Resolution Workflow",{"type":42,"tag":65,"props":1415,"children":1416},{},[1417],{"type":48,"value":1418},"Goal: NO updates, replaces, creates, or deletes",{"type":42,"tag":317,"props":1420,"children":1422},{"id":1421},"_4-pulumi-configuration",[1423],{"type":48,"value":1424},"4. PULUMI CONFIGURATION",{"type":42,"tag":51,"props":1426,"children":1427},{},[1428],{"type":48,"value":1429},"Set up stack configuration matching ARM template parameters:",{"type":42,"tag":458,"props":1431,"children":1433},{"className":460,"code":1432,"language":462,"meta":463,"style":463},"# Set Azure region\npulumi config set azure-native:location eastus --stack dev\n\n# Set application parameters\npulumi config set storageAccountName mystorageaccount --stack dev\n\n# Set secret parameters\npulumi config set --secret adminPassword MyS3cr3tP@ssw0rd --stack dev\n",[1434],{"type":42,"tag":151,"props":1435,"children":1436},{"__ignoreMap":463},[1437,1445,1482,1489,1497,1530,1537,1545],{"type":42,"tag":469,"props":1438,"children":1439},{"class":471,"line":472},[1440],{"type":42,"tag":469,"props":1441,"children":1442},{"style":476},[1443],{"type":48,"value":1444},"# Set Azure region\n",{"type":42,"tag":469,"props":1446,"children":1447},{"class":471,"line":482},[1448,1452,1457,1462,1467,1472,1477],{"type":42,"tag":469,"props":1449,"children":1450},{"style":486},[1451],{"type":48,"value":8},{"type":42,"tag":469,"props":1453,"children":1454},{"style":492},[1455],{"type":48,"value":1456}," config",{"type":42,"tag":469,"props":1458,"children":1459},{"style":492},[1460],{"type":48,"value":1461}," set",{"type":42,"tag":469,"props":1463,"children":1464},{"style":492},[1465],{"type":48,"value":1466}," azure-native:location",{"type":42,"tag":469,"props":1468,"children":1469},{"style":492},[1470],{"type":48,"value":1471}," eastus",{"type":42,"tag":469,"props":1473,"children":1474},{"style":492},[1475],{"type":48,"value":1476}," --stack",{"type":42,"tag":469,"props":1478,"children":1479},{"style":492},[1480],{"type":48,"value":1481}," dev\n",{"type":42,"tag":469,"props":1483,"children":1484},{"class":471,"line":524},[1485],{"type":42,"tag":469,"props":1486,"children":1487},{"emptyLinePlaceholder":528},[1488],{"type":48,"value":531},{"type":42,"tag":469,"props":1490,"children":1491},{"class":471,"line":30},[1492],{"type":42,"tag":469,"props":1493,"children":1494},{"style":476},[1495],{"type":48,"value":1496},"# Set application parameters\n",{"type":42,"tag":469,"props":1498,"children":1499},{"class":471,"line":542},[1500,1504,1508,1512,1517,1522,1526],{"type":42,"tag":469,"props":1501,"children":1502},{"style":486},[1503],{"type":48,"value":8},{"type":42,"tag":469,"props":1505,"children":1506},{"style":492},[1507],{"type":48,"value":1456},{"type":42,"tag":469,"props":1509,"children":1510},{"style":492},[1511],{"type":48,"value":1461},{"type":42,"tag":469,"props":1513,"children":1514},{"style":492},[1515],{"type":48,"value":1516}," storageAccountName",{"type":42,"tag":469,"props":1518,"children":1519},{"style":492},[1520],{"type":48,"value":1521}," mystorageaccount",{"type":42,"tag":469,"props":1523,"children":1524},{"style":492},[1525],{"type":48,"value":1476},{"type":42,"tag":469,"props":1527,"children":1528},{"style":492},[1529],{"type":48,"value":1481},{"type":42,"tag":469,"props":1531,"children":1532},{"class":471,"line":575},[1533],{"type":42,"tag":469,"props":1534,"children":1535},{"emptyLinePlaceholder":528},[1536],{"type":48,"value":531},{"type":42,"tag":469,"props":1538,"children":1539},{"class":471,"line":583},[1540],{"type":42,"tag":469,"props":1541,"children":1542},{"style":476},[1543],{"type":48,"value":1544},"# Set secret parameters\n",{"type":42,"tag":469,"props":1546,"children":1547},{"class":471,"line":592},[1548,1552,1556,1560,1565,1570,1575,1579],{"type":42,"tag":469,"props":1549,"children":1550},{"style":486},[1551],{"type":48,"value":8},{"type":42,"tag":469,"props":1553,"children":1554},{"style":492},[1555],{"type":48,"value":1456},{"type":42,"tag":469,"props":1557,"children":1558},{"style":492},[1559],{"type":48,"value":1461},{"type":42,"tag":469,"props":1561,"children":1562},{"style":492},[1563],{"type":48,"value":1564}," --secret",{"type":42,"tag":469,"props":1566,"children":1567},{"style":492},[1568],{"type":48,"value":1569}," adminPassword",{"type":42,"tag":469,"props":1571,"children":1572},{"style":492},[1573],{"type":48,"value":1574}," MyS3cr3tP@ssw0rd",{"type":42,"tag":469,"props":1576,"children":1577},{"style":492},[1578],{"type":48,"value":1476},{"type":42,"tag":469,"props":1580,"children":1581},{"style":492},[1582],{"type":48,"value":1481},{"type":42,"tag":317,"props":1584,"children":1586},{"id":1585},"_5-validation",[1587],{"type":48,"value":1588},"5. VALIDATION",{"type":42,"tag":51,"props":1590,"children":1591},{},[1592],{"type":48,"value":1593},"After achieving zero diff in preview (if importing), validate the migration:",{"type":42,"tag":61,"props":1595,"children":1596},{},[1597,1629,1660,1670],{"type":42,"tag":65,"props":1598,"children":1599},{},[1600,1605],{"type":42,"tag":55,"props":1601,"children":1602},{},[1603],{"type":48,"value":1604},"Review all exports:",{"type":42,"tag":458,"props":1606,"children":1608},{"className":460,"code":1607,"language":462,"meta":463,"style":463},"pulumi stack output\n",[1609],{"type":42,"tag":151,"props":1610,"children":1611},{"__ignoreMap":463},[1612],{"type":42,"tag":469,"props":1613,"children":1614},{"class":471,"line":472},[1615,1619,1624],{"type":42,"tag":469,"props":1616,"children":1617},{"style":486},[1618],{"type":48,"value":8},{"type":42,"tag":469,"props":1620,"children":1621},{"style":492},[1622],{"type":48,"value":1623}," stack",{"type":42,"tag":469,"props":1625,"children":1626},{"style":492},[1627],{"type":48,"value":1628}," output\n",{"type":42,"tag":65,"props":1630,"children":1631},{},[1632,1637],{"type":42,"tag":55,"props":1633,"children":1634},{},[1635],{"type":48,"value":1636},"Verify resource relationships:",{"type":42,"tag":458,"props":1638,"children":1640},{"className":460,"code":1639,"language":462,"meta":463,"style":463},"pulumi stack graph\n",[1641],{"type":42,"tag":151,"props":1642,"children":1643},{"__ignoreMap":463},[1644],{"type":42,"tag":469,"props":1645,"children":1646},{"class":471,"line":472},[1647,1651,1655],{"type":42,"tag":469,"props":1648,"children":1649},{"style":486},[1650],{"type":48,"value":8},{"type":42,"tag":469,"props":1652,"children":1653},{"style":492},[1654],{"type":48,"value":1623},{"type":42,"tag":469,"props":1656,"children":1657},{"style":492},[1658],{"type":48,"value":1659}," graph\n",{"type":42,"tag":65,"props":1661,"children":1662},{},[1663,1668],{"type":42,"tag":55,"props":1664,"children":1665},{},[1666],{"type":48,"value":1667},"Test application functionality",{"type":48,"value":1669}," (if applicable)",{"type":42,"tag":65,"props":1671,"children":1672},{},[1673,1678],{"type":42,"tag":55,"props":1674,"children":1675},{},[1676],{"type":48,"value":1677},"Document any manual steps",{"type":48,"value":1679}," required post-migration",{"type":42,"tag":43,"props":1681,"children":1683},{"id":1682},"working-with-the-user",[1684],{"type":48,"value":1685},"WORKING WITH THE USER",{"type":42,"tag":51,"props":1687,"children":1688},{},[1689],{"type":48,"value":1690},"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.",{"type":42,"tag":43,"props":1692,"children":1694},{"id":1693},"for-detailed-documentation",[1695],{"type":48,"value":1696},"FOR DETAILED DOCUMENTATION",{"type":42,"tag":51,"props":1698,"children":1699},{},[1700],{"type":48,"value":1701},"When the user wants additional information, use the web-fetch tool to get content from the official Pulumi documentation:",{"type":42,"tag":108,"props":1703,"children":1704},{},[1705,1720,1734],{"type":42,"tag":65,"props":1706,"children":1707},{},[1708,1713,1714],{"type":42,"tag":55,"props":1709,"children":1710},{},[1711],{"type":48,"value":1712},"ARM Migration Guide:",{"type":48,"value":675},{"type":42,"tag":213,"props":1715,"children":1718},{"href":1716,"rel":1717},"https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Fiac\u002Fadopting-pulumi\u002Fmigrating-to-pulumi\u002Ffrom-arm\u002F",[680],[1719],{"type":48,"value":1716},{"type":42,"tag":65,"props":1721,"children":1722},{},[1723,1728,1729],{"type":42,"tag":55,"props":1724,"children":1725},{},[1726],{"type":48,"value":1727},"Azure Native Provider:",{"type":48,"value":675},{"type":42,"tag":213,"props":1730,"children":1732},{"href":1072,"rel":1731},[680],[1733],{"type":48,"value":1072},{"type":42,"tag":65,"props":1735,"children":1736},{},[1737,1742,1743],{"type":42,"tag":55,"props":1738,"children":1739},{},[1740],{"type":48,"value":1741},"Azure Classic Provider:",{"type":48,"value":675},{"type":42,"tag":213,"props":1744,"children":1746},{"href":1082,"rel":1745},[680],[1747],{"type":48,"value":1082},{"type":42,"tag":51,"props":1749,"children":1750},{},[1751],{"type":42,"tag":55,"props":1752,"children":1753},{},[1754],{"type":48,"value":1755},"Microsoft Azure Documentation:",{"type":42,"tag":108,"props":1757,"children":1758},{},[1759,1774,1788],{"type":42,"tag":65,"props":1760,"children":1761},{},[1762,1767,1768],{"type":42,"tag":55,"props":1763,"children":1764},{},[1765],{"type":48,"value":1766},"ARM Template Reference:",{"type":48,"value":675},{"type":42,"tag":213,"props":1769,"children":1772},{"href":1770,"rel":1771},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fazure-resource-manager\u002Ftemplates\u002F",[680],[1773],{"type":48,"value":1770},{"type":42,"tag":65,"props":1775,"children":1776},{},[1777,1782,1783],{"type":42,"tag":55,"props":1778,"children":1779},{},[1780],{"type":48,"value":1781},"Azure CLI Reference:",{"type":48,"value":675},{"type":42,"tag":213,"props":1784,"children":1786},{"href":971,"rel":1785},[680],[1787],{"type":48,"value":971},{"type":42,"tag":65,"props":1789,"children":1790},{},[1791,1796,1797],{"type":42,"tag":55,"props":1792,"children":1793},{},[1794],{"type":48,"value":1795},"Azure Resource IDs:",{"type":48,"value":675},{"type":42,"tag":213,"props":1798,"children":1801},{"href":1799,"rel":1800},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fazure-resource-manager\u002Ftemplates\u002Ftemplate-functions-resource",[680],[1802],{"type":48,"value":1799},{"type":42,"tag":43,"props":1804,"children":1806},{"id":1805},"output-format-required",[1807],{"type":48,"value":1808},"OUTPUT FORMAT (REQUIRED)",{"type":42,"tag":51,"props":1810,"children":1811},{},[1812],{"type":48,"value":1813},"When performing a migration, always produce:",{"type":42,"tag":61,"props":1815,"children":1816},{},[1817,1827,1853,1881,1909,1937,1969],{"type":42,"tag":65,"props":1818,"children":1819},{},[1820,1825],{"type":42,"tag":55,"props":1821,"children":1822},{},[1823],{"type":48,"value":1824},"Overview",{"type":48,"value":1826}," (high-level description)",{"type":42,"tag":65,"props":1828,"children":1829},{},[1830,1835],{"type":42,"tag":55,"props":1831,"children":1832},{},[1833],{"type":48,"value":1834},"Migration Plan Summary",{"type":42,"tag":108,"props":1836,"children":1837},{},[1838,1843,1848],{"type":42,"tag":65,"props":1839,"children":1840},{},[1841],{"type":48,"value":1842},"ARM template resources identified",{"type":42,"tag":65,"props":1844,"children":1845},{},[1846],{"type":48,"value":1847},"Conversion strategy (language, providers)",{"type":42,"tag":65,"props":1849,"children":1850},{},[1851],{"type":48,"value":1852},"Import approach (if applicable)",{"type":42,"tag":65,"props":1854,"children":1855},{},[1856,1861,1863],{"type":42,"tag":55,"props":1857,"children":1858},{},[1859],{"type":48,"value":1860},"Pulumi Code Outputs",{"type":48,"value":1862}," (organized by file)\n",{"type":42,"tag":108,"props":1864,"children":1865},{},[1866,1871,1876],{"type":42,"tag":65,"props":1867,"children":1868},{},[1869],{"type":48,"value":1870},"Main program file",{"type":42,"tag":65,"props":1872,"children":1873},{},[1874],{"type":48,"value":1875},"Component resources (if any)",{"type":42,"tag":65,"props":1877,"children":1878},{},[1879],{"type":48,"value":1880},"Configuration instructions",{"type":42,"tag":65,"props":1882,"children":1883},{},[1884,1889,1891],{"type":42,"tag":55,"props":1885,"children":1886},{},[1887],{"type":48,"value":1888},"Resource Mapping Table",{"type":48,"value":1890}," (ARM → Pulumi)\n",{"type":42,"tag":108,"props":1892,"children":1893},{},[1894,1899,1904],{"type":42,"tag":65,"props":1895,"children":1896},{},[1897],{"type":48,"value":1898},"ARM resource type → Pulumi resource type",{"type":42,"tag":65,"props":1900,"children":1901},{},[1902],{"type":48,"value":1903},"ARM resource name → Pulumi logical name",{"type":42,"tag":65,"props":1905,"children":1906},{},[1907],{"type":48,"value":1908},"Import ID (if importing)",{"type":42,"tag":65,"props":1910,"children":1911},{},[1912,1917,1919],{"type":42,"tag":55,"props":1913,"children":1914},{},[1915],{"type":48,"value":1916},"Preview Resolution Notes",{"type":48,"value":1918}," (if importing)\n",{"type":42,"tag":108,"props":1920,"children":1921},{},[1922,1927,1932],{"type":42,"tag":65,"props":1923,"children":1924},{},[1925],{"type":48,"value":1926},"Diffs encountered",{"type":42,"tag":65,"props":1928,"children":1929},{},[1930],{"type":48,"value":1931},"Resolution strategy applied",{"type":42,"tag":65,"props":1933,"children":1934},{},[1935],{"type":48,"value":1936},"Properties ignored vs. added",{"type":42,"tag":65,"props":1938,"children":1939},{},[1940,1944,1946],{"type":42,"tag":55,"props":1941,"children":1942},{},[1943],{"type":48,"value":227},{"type":48,"value":1945}," (PR-ready)\n",{"type":42,"tag":108,"props":1947,"children":1948},{},[1949,1954,1959,1964],{"type":42,"tag":65,"props":1950,"children":1951},{},[1952],{"type":48,"value":1953},"Summary of changes",{"type":42,"tag":65,"props":1955,"children":1956},{},[1957],{"type":48,"value":1958},"Testing instructions",{"type":42,"tag":65,"props":1960,"children":1961},{},[1962],{"type":48,"value":1963},"Known limitations",{"type":42,"tag":65,"props":1965,"children":1966},{},[1967],{"type":48,"value":1968},"Next steps",{"type":42,"tag":65,"props":1970,"children":1971},{},[1972,1977],{"type":42,"tag":55,"props":1973,"children":1974},{},[1975],{"type":48,"value":1976},"Configuration Setup",{"type":42,"tag":108,"props":1978,"children":1979},{},[1980,1985],{"type":42,"tag":65,"props":1981,"children":1982},{},[1983],{"type":48,"value":1984},"Required config values",{"type":42,"tag":65,"props":1986,"children":1987},{},[1988,1990,1996],{"type":48,"value":1989},"Example ",{"type":42,"tag":151,"props":1991,"children":1993},{"className":1992},[],[1994],{"type":48,"value":1995},"pulumi config set",{"type":48,"value":1997}," commands",{"type":42,"tag":51,"props":1999,"children":2000},{},[2001],{"type":48,"value":2002},"Keep code syntactically valid and clearly separated by files.",{"type":42,"tag":2004,"props":2005,"children":2006},"style",{},[2007],{"type":48,"value":2008},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2010,"total":875},[2011,2025,2040,2053,2061,2076,2090],{"slug":2012,"name":2012,"fn":2013,"description":2014,"org":2015,"tags":2016,"stars":26,"repoUrl":27,"updatedAt":2024},"cloudformation-to-pulumi","migrate CloudFormation to Pulumi","Convert, migrate, or import AWS CloudFormation stacks or templates into Pulumi programs. Load this skill whenever a user wants to move from CloudFormation to Pulumi, convert a CFN template, import existing CloudFormation-managed resources into Pulumi, or asks about CloudFormation-to-Pulumi migration in any form. Also load when the user mentions cdk-importer in a migration context.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2017,2020,2021,2022,2023],{"name":2018,"slug":2019,"type":15},"AWS","aws",{"name":21,"slug":22,"type":15},{"name":24,"slug":25,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:50:36.677615",{"slug":2026,"name":2026,"fn":2027,"description":2028,"org":2029,"tags":2030,"stars":26,"repoUrl":27,"updatedAt":2039},"package-usage","audit Pulumi package usage across stacks","Track which stacks across a Pulumi organization use a specific package and at what versions. Use for cross-stack audits, identifying outdated or unmaintained package versions across many stacks, finding affected stacks before publishing breaking changes to a component package, or planning coordinated upgrade rollouts. Do NOT use for upgrading a cloud provider package (pulumi-aws, pulumi-azure-native, pulumi-gcp, pulumi-kubernetes, etc.) in a single project — use skill `provider-upgrade` instead. Do NOT use for general infrastructure creation, resource provisioning, or how-to questions about a package.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2031,2034,2035,2038],{"name":2032,"slug":2033,"type":15},"Audit","audit",{"name":24,"slug":25,"type":15},{"name":2036,"slug":2037,"type":15},"Operations","operations",{"name":9,"slug":8,"type":15},"2026-07-24T05:37:48.019964",{"slug":2041,"name":2041,"fn":2042,"description":2043,"org":2044,"tags":2045,"stars":26,"repoUrl":27,"updatedAt":2052},"provider-upgrade","upgrade and reconcile Pulumi providers","Upgrade any Pulumi provider to a newer version and reconcile the resulting diff. Use when users want to upgrade or update a provider (including editing package.json, requirements.txt, pyproject.toml, go.mod, or Pulumi.yaml to bump a provider SDK), check for breaking changes before or during an upgrade, fix resources that broke after a provider upgrade, or resolve unexpected replacements, creates, or deletes in a post-upgrade preview. Applies to all providers (aws, azure-native, gcp, kubernetes, aws-native, cloudflare, datadog, etc.) — not just Tier 1. Do NOT use for querying which stacks use what package versions; use skill `package-usage` for cross-stack audits. Do NOT use for general infrastructure tasks.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2046,2049,2050,2051],{"name":2047,"slug":2048,"type":15},"DevOps","devops",{"name":24,"slug":25,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},"2026-06-04T07:58:58.874758",{"slug":4,"name":4,"fn":5,"description":6,"org":2054,"tags":2055,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2056,2057,2058,2059,2060],{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},{"name":24,"slug":25,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"slug":2062,"name":2062,"fn":2063,"description":2064,"org":2065,"tags":2066,"stars":26,"repoUrl":27,"updatedAt":2075},"pulumi-automation-api","run Pulumi programs via Automation API","Load this skill when a user asks how to run Pulumi programmatically, embed Pulumi in an application, orchestrate multiple stacks in code, build a self-service infrastructure portal, replace pulumi CLI shell scripts with code, or use the Pulumi Automation API (LocalWorkspace, createOrSelectStack, inline programs). Also load for questions about multi-stack sequencing, parallel deployments, or passing outputs between stacks via code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2067,2070,2073,2074],{"name":2068,"slug":2069,"type":15},"API Development","api-development",{"name":2071,"slug":2072,"type":15},"Automation","automation",{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},"2026-06-04T07:59:00.113998",{"slug":2077,"name":2077,"fn":2078,"description":2079,"org":2080,"tags":2081,"stars":26,"repoUrl":27,"updatedAt":2089},"pulumi-best-practices","apply Pulumi best practices for infrastructure","Load when the user is writing, reviewing, or debugging Pulumi TypeScript\u002FPython programs; asks about Output\u003CT> or apply() usage; wants to create ComponentResource classes; needs to refactor resources without destroying them (aliases); is setting up secrets or config; or is configuring a pulumi preview\u002Fup CI workflow. Also load for questions about resource dependency order, parent\u002Fchild resource relationships, or pulumi.interpolate.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2082,2083,2084,2086],{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":1116,"slug":2085,"type":15},"python",{"name":2087,"slug":2088,"type":15},"TypeScript","typescript","2026-06-03T07:52:43.916562",{"slug":2091,"name":2091,"fn":2092,"description":2093,"org":2094,"tags":2095,"stars":26,"repoUrl":27,"updatedAt":2101},"pulumi-cdk-to-pulumi","migrate AWS CDK to Pulumi","Load this skill when a user wants to migrate, convert, port, translate, or move an AWS CDK application (including CDK stacks, constructs, or CloudFormation-synthesized templates) to Pulumi. Phrases such as \"convert CDK to Pulumi\", \"migrate CDK app\", \"port CDK stacks\", \"replace CDK with Pulumi\", \"stop using CDK\". Do NOT load for general CDK questions, CDK-only help, or CDK vs Pulumi comparisons where no migration is requested.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2096,2097,2098,2099,2100],{"name":2018,"slug":2019,"type":15},{"name":21,"slug":22,"type":15},{"name":24,"slug":25,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:50:39.23999",{"items":2103,"total":875},[2104,2112,2119,2126,2134,2141,2148,2156,2171,2184,2198,2208],{"slug":2012,"name":2012,"fn":2013,"description":2014,"org":2105,"tags":2106,"stars":26,"repoUrl":27,"updatedAt":2024},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2107,2108,2109,2110,2111],{"name":2018,"slug":2019,"type":15},{"name":21,"slug":22,"type":15},{"name":24,"slug":25,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"slug":2026,"name":2026,"fn":2027,"description":2028,"org":2113,"tags":2114,"stars":26,"repoUrl":27,"updatedAt":2039},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2115,2116,2117,2118],{"name":2032,"slug":2033,"type":15},{"name":24,"slug":25,"type":15},{"name":2036,"slug":2037,"type":15},{"name":9,"slug":8,"type":15},{"slug":2041,"name":2041,"fn":2042,"description":2043,"org":2120,"tags":2121,"stars":26,"repoUrl":27,"updatedAt":2052},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2122,2123,2124,2125],{"name":2047,"slug":2048,"type":15},{"name":24,"slug":25,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":2127,"tags":2128,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2129,2130,2131,2132,2133],{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},{"name":24,"slug":25,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"slug":2062,"name":2062,"fn":2063,"description":2064,"org":2135,"tags":2136,"stars":26,"repoUrl":27,"updatedAt":2075},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2137,2138,2139,2140],{"name":2068,"slug":2069,"type":15},{"name":2071,"slug":2072,"type":15},{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"slug":2077,"name":2077,"fn":2078,"description":2079,"org":2142,"tags":2143,"stars":26,"repoUrl":27,"updatedAt":2089},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2144,2145,2146,2147],{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":1116,"slug":2085,"type":15},{"name":2087,"slug":2088,"type":15},{"slug":2091,"name":2091,"fn":2092,"description":2093,"org":2149,"tags":2150,"stars":26,"repoUrl":27,"updatedAt":2101},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2151,2152,2153,2154,2155],{"name":2018,"slug":2019,"type":15},{"name":21,"slug":22,"type":15},{"name":24,"slug":25,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"slug":2157,"name":2157,"fn":2158,"description":2159,"org":2160,"tags":2161,"stars":26,"repoUrl":27,"updatedAt":2170},"pulumi-component","author reusable Pulumi component resources","Guide for authoring Pulumi ComponentResource classes. Use when creating reusable infrastructure components, designing component interfaces, setting up multi-language support, or distributing component packages.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2162,2165,2168,2169],{"name":2163,"slug":2164,"type":15},"Architecture","architecture",{"name":2166,"slug":2167,"type":15},"Engineering","engineering",{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},"2026-06-04T07:58:57.625622",{"slug":2172,"name":2172,"fn":2173,"description":2174,"org":2175,"tags":2176,"stars":26,"repoUrl":27,"updatedAt":2183},"pulumi-debug-failed-operation","debug failed Pulumi operations","Debug a Pulumi update or preview that failed: read the failure Pulumi already\nrecorded, find what caused it, and fix it. Load this skill when the user asks\nto debug, diagnose, or fix a failed update or preview, or points at a failing\n`pulumi up` or `pulumi preview`. Don't load it for authoring new\ninfrastructure, migrations, or provider upgrades; those have their own skills.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2177,2180,2181,2182],{"name":2178,"slug":2179,"type":15},"Debugging","debugging",{"name":21,"slug":22,"type":15},{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},"2026-07-08T05:47:02.688144",{"slug":443,"name":443,"fn":2185,"description":2186,"org":2187,"tags":2188,"stars":26,"repoUrl":27,"updatedAt":2197},"manage secrets and configuration with Pulumi ESC","Guidance for working with Pulumi ESC (Environments, Secrets, and Configuration). Use when users ask about managing secrets, configuration, environments, short-term credentials, configuring OIDC for AWS, Azure, GCP, integrating with secret stores (AWS Secrets Manager, Azure Key Vault, HashiCorp Vault, 1Password), or using ESC with Pulumi stacks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2189,2192,2193,2194],{"name":2190,"slug":2191,"type":15},"Configuration","configuration",{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":2195,"slug":2196,"type":15},"Security","security","2026-07-24T05:37:47.044405",{"slug":2199,"name":2199,"fn":2200,"description":2201,"org":2202,"tags":2203,"stars":26,"repoUrl":27,"updatedAt":2207},"pulumi-overview","manage cloud infrastructure with Pulumi","Use this skill for any task that creates, modifies, inspects, or destroys cloud infrastructure or SaaS configuration, from one-off CLI operations to full multi-resource projects, across providers in the Pulumi ecosystem. A typical project spans many providers (AWS or Azure or GCP, Kubernetes, Cloudflare, Auth0, Datadog, Vercel, and others), and Pulumi drives them through one CLI, one state model, and one credential layer. Trigger even when the user does not name Pulumi; phrasings like \"deploy this app,\" \"provision a database,\" \"stand up a VPC,\" \"configure Auth0,\" \"set up Datadog monitoring,\" or \"tear down staging\" qualify. Also trigger for tasks that migrate, port, or convert existing infrastructure code (Terraform, CloudFormation, CDK, Bicep, ARM) to Pulumi. Do not trigger for application runtime code that reads or writes data via cloud SDKs; that is application code, not infrastructure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2204,2205,2206],{"name":21,"slug":22,"type":15},{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},"2026-06-03T07:52:39.333565",{"slug":2209,"name":2209,"fn":2210,"description":2211,"org":2212,"tags":2213,"stars":26,"repoUrl":27,"updatedAt":2221},"pulumi-terraform-to-pulumi","migrate Terraform to Pulumi","Migrate Terraform\u002FOpenTofu projects to Pulumi, including translating HCL source code and\u002For importing Terraform state into a Pulumi stack. Use when a user wants to convert Terraform to Pulumi, migrate from HCL, or import tfstate into Pulumi. Do NOT trigger for general Terraform-vs-Pulumi comparisons or questions about using both tools side-by-side.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2214,2215,2216,2217,2218],{"name":21,"slug":22,"type":15},{"name":24,"slug":25,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":2219,"slug":2220,"type":15},"Terraform","terraform","2026-04-06T18:50:37.954346"]