agentsclimarketplace

Add terraform module

Skill makigjuro/cloudstack-ai-plugins/plugins/cloud-infra/skills/add-terraform-module

Claude Code plugin marketplace — AI-powered full-stack cloud engineer for .NET 10 + React 19 + Azure/Terraform/Helm projects. 29 skills, 6 agents, 14 rules.

Install
npx -y skills add makigjuro/cloudstack-ai-plugins --skill add-terraform-module

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Scaffold a new Terraform module with variables, main, and outputs. Use when provisioning a new cloud resource (database, cache, storage, etc.) that needs its own Terraform module and optional IaC wrapper wiring.

SKILL.md

4.1 KB, as published. Nobody here has run it

Add Terraform Module

Scaffold a new Terraform module following project conventions.

Arguments

  • {module-name} — Name of the module (required, e.g., redis, service-bus, postgresql)
  • {description} — What this module provisions (optional)

Configuration

Read cloudstack.json from the project root at the start of execution. Extract:

  • TF_PATH = infrastructure.terraformPath (default: infra/terraform/modules)
  • TG_PATH = infrastructure.terragruntPath (default: infra/terragrunt)
  • IAC_WRAPPER = infrastructure.iacWrapper (default: none)
  • CLOUD = infrastructure.cloud (default: azure)

If cloudstack.json does not exist, auto-detect by scanning the project structure.

Process

  1. Read existing modules in {TF_PATH}/ to follow established patterns.

  2. Create the module directory:

{TF_PATH}/{module-name}/
├── variables.tf
├── main.tf
├── outputs.tf
  1. variables.tf — Always include these standard variables:
variable "environment" {
  description = "Environment name (e.g. dev, staging, prod)"
  type        = string
}

variable "location" {
  description = "Cloud region (e.g. westeurope, us-east-1)"
  type        = string
}

variable "project" {
  description = "Project prefix for resource naming"
  type        = string
}

variable "tags" {
  description = "Common tags applied to all resources"
  type        = map(string)
  default     = {}
}

Add module-specific variables after the standard ones.

  1. main.tf — Follow the naming convention from existing modules. Derive a location short code from the region (e.g., westeurope -> weu, us-east-1 -> use1):
locals {
  location_short = # derive from var.location or use a lookup map
  name           = "${var.project}-{resource-abbrev}-${var.environment}-${local.location_short}"
}

Scan existing modules to discover the project's established naming convention and location short mapping. Use that pattern.

  1. outputs.tf — Export name, id, and any connection strings or keys needed by downstream modules.

  2. IaC Wrapper Wiring (conditional on IAC_WRAPPER):

    If IAC_WRAPPER = terragrunt: Create Terragrunt wiring for the dev environment:

    {TG_PATH}/dev/{module-name}/
    └── terragrunt.hcl
    

    With content:

    include "root" {
      path = find_in_parent_folders()
    }
    
    terraform {
      source = "../../../terraform/modules/{module-name}"
    }
    
    dependency "resource_group" {
      config_path = "../resource-group"
    }
    
    inputs = {
      resource_group_name = dependency.resource_group.outputs.name
    }
    

    Adjust the source path to be the correct relative path from {TG_PATH}/dev/{module-name}/ to {TF_PATH}/{module-name}. Add additional dependencies based on what the module needs.

    If IAC_WRAPPER = none: Skip wrapper wiring. Note that the user can run terraform plan directly from the module directory.

Output

After scaffolding, report:

## Scaffolded: {module-name} Terraform module

Files created:
- `{TF_PATH}/{module-name}/variables.tf`
- `{TF_PATH}/{module-name}/main.tf`
- `{TF_PATH}/{module-name}/outputs.tf`
- `{TG_PATH}/dev/{module-name}/terragrunt.hcl` (if IAC_WRAPPER = terragrunt)

Next: Add resource definitions in `main.tf`, then run `/infra-lint` to validate.

Error Handling

  • Module directory already exists: Warn the user and ask whether to overwrite or extend.
  • Terraform not installed: Suggest installing with brew install terraform.
  • IaC wrapper root config not found: If using Terragrunt, check that {TG_PATH}/terragrunt.hcl exists as the root config.

After Scaffolding

Remind to:

  • Add module-specific resource definitions in main.tf
  • Add any needed dependencies in the wrapper config (if applicable)
  • Run /infra-lint to validate

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.