From b4875321add2eeba9cda0303d2f70a5ab8a7af70 Mon Sep 17 00:00:00 2001 From: Ruben Nic Date: Tue, 27 May 2025 15:17:16 -0400 Subject: [PATCH] New updated content --- .../data/cloud-docs-nav-data.json | 71 ++-- .../data/docs-nav-data.json | 32 +- .../docs/cloud-docs/api-docs/workspaces.mdx | 2 - .../cloud-docs/migrate/tf-migrate/index.mdx | 17 +- .../migrate/tf-migrate/reference/prepare.mdx | 19 +- .../cloud-docs/public-namespace/artifacts.mdx | 97 +++++ .../public-namespace/create_or_claim.mdx | 48 +++ .../cloud-docs/public-namespace/index.mdx | 41 ++ .../cloud-docs/public-namespace/manage.mdx | 41 ++ .../docs/cloud-docs/registry/index.mdx | 2 + .../users-teams-organizations/permissions.mdx | 11 + .../cloud-docs/workspaces/settings/vcs.mdx | 2 +- .../{terraform-tools.mdx => tools/index.mdx} | 1 + .../docs/docs/tools/mcp-server/deploy.mdx | 105 ++++++ .../docs/docs/tools/mcp-server/index.mdx | 40 ++ .../docs/docs/tools/mcp-server/prompt.mdx | 357 ++++++++++++++++++ .../docs/partials/beta.mdx | 6 + .../docs/registry/faq.mdx | 4 + .../docs/registry/index.mdx | 4 +- .../img/docs/terraform-mcp-server-flow-dk.png | Bin 0 -> 53294 bytes .../img/docs/terraform-mcp-server-flow-lt.png | Bin 0 -> 51772 bytes content/terraform-docs-common/redirects.jsonc | 6 + 22 files changed, 872 insertions(+), 34 deletions(-) create mode 100644 content/terraform-docs-common/docs/cloud-docs/public-namespace/artifacts.mdx create mode 100644 content/terraform-docs-common/docs/cloud-docs/public-namespace/create_or_claim.mdx create mode 100644 content/terraform-docs-common/docs/cloud-docs/public-namespace/index.mdx create mode 100644 content/terraform-docs-common/docs/cloud-docs/public-namespace/manage.mdx rename content/terraform-docs-common/docs/docs/{terraform-tools.mdx => tools/index.mdx} (97%) create mode 100644 content/terraform-docs-common/docs/docs/tools/mcp-server/deploy.mdx create mode 100644 content/terraform-docs-common/docs/docs/tools/mcp-server/index.mdx create mode 100644 content/terraform-docs-common/docs/docs/tools/mcp-server/prompt.mdx create mode 100644 content/terraform-docs-common/docs/partials/beta.mdx create mode 100644 content/terraform-docs-common/img/docs/terraform-mcp-server-flow-dk.png create mode 100644 content/terraform-docs-common/img/docs/terraform-mcp-server-flow-lt.png diff --git a/content/terraform-docs-common/data/cloud-docs-nav-data.json b/content/terraform-docs-common/data/cloud-docs-nav-data.json index 2756fa112b..86b4952537 100644 --- a/content/terraform-docs-common/data/cloud-docs-nav-data.json +++ b/content/terraform-docs-common/data/cloud-docs-nav-data.json @@ -1,11 +1,11 @@ [ { "heading": "HCP Terraform" }, { "title": "Overview", "path": "" }, - { "title": "Plans and Features", + { "title": "Plans and Features", "routes": [ { "title": "Overview", - "path": "overview" + "path": "overview" }, { "title": "Estimate HCP Terraform Cost", @@ -359,8 +359,8 @@ "routes": [ {"title": "Overview","path": "users-teams-organizations/organizations"}, { - "title": "Manage reserved tag keys", - "path": "users-teams-organizations/organizations/manage-reserved-tags" + "title": "Manage reserved tag keys", + "path": "users-teams-organizations/organizations/manage-reserved-tags" }, { "title": "VCS Status Checks", "path": "users-teams-organizations/organizations/vcs-status-checks" }, { "title": "Automatically cancel plan-only runs", "path": "users-teams-organizations/organizations/vcs-speculative-plan-management" } @@ -493,6 +493,25 @@ "title": "Configuration Designer", "path": "registry/design" } + ] + }, + { "title": "Public Registry Namespaces", "routes": [ + { + "title": "Overview", + "path": "public-namespace" + }, + { + "title": "Create or claim a namespace", + "path": "public-namespace/create_or_claim" + }, + { + "title": "Manage namespaces", + "path": "public-namespace/manage" + }, + { + "title": "Manage namespace artifacts", + "path": "public-namespace/artifacts" + } ] }, { @@ -509,13 +528,13 @@ ] }, { - "title": "Policy enforcement", + "title": "Policy Enforcement", "routes": [ - { - "title": "Overview", - "path": "policy-enforcement" + { + "title": "Overview", + "path": "policy-enforcement" }, - { + { "title": "Define policies", "routes": [ { @@ -529,8 +548,8 @@ { "title": "OPA policies", "path": "policy-enforcement/define-policies/opa" - } - ] + } + ] }, { "title": "Create and manage policy sets", @@ -552,7 +571,7 @@ { "title": "Run pre-written Sentinel policies", "path": "policy-enforcement/prewritten-sentinel" - }, + }, { "title": "Test Sentinel policies", "path": "policy-enforcement/test-sentinel" @@ -581,33 +600,33 @@ "title": "Overview", "path": "policy-enforcement/import-reference" }, - { - "title": "tfconfig", - "path": "policy-enforcement/import-reference/tfconfig" + { + "title": "tfconfig", + "path": "policy-enforcement/import-reference/tfconfig" }, { "title": "tfconfig/v2", "path": "policy-enforcement/import-reference/tfconfig-v2" }, - { - "title": "tfplan", - "path": "policy-enforcement/import-reference/tfplan" + { + "title": "tfplan", + "path": "policy-enforcement/import-reference/tfplan" }, { "title": "tfplan/v2", "path": "policy-enforcement/import-reference/tfplan-v2" }, - { - "title": "tfstate", - "path": "policy-enforcement/import-reference/tfstate" + { + "title": "tfstate", + "path": "policy-enforcement/import-reference/tfstate" }, { "title": "tfstate/v2", "path": "policy-enforcement/import-reference/tfstate-v2" }, - { - "title": "tfrun", - "path": "policy-enforcement/import-reference/tfrun" + { + "title": "tfrun", + "path": "policy-enforcement/import-reference/tfrun" } ] } @@ -626,7 +645,7 @@ "title": "Integrations", "routes": [ { - "title": "Overview", + "title": "Overview", "path": "integrations" }, { @@ -687,7 +706,7 @@ "title": "Service Graph Connector for Terraform", "routes": [ { - "title": "Overview", + "title": "Overview", "path": "integrations/service-now/service-graph" }, { diff --git a/content/terraform-docs-common/data/docs-nav-data.json b/content/terraform-docs-common/data/docs-nav-data.json index 3e7431ae81..5db044c819 100644 --- a/content/terraform-docs-common/data/docs-nav-data.json +++ b/content/terraform-docs-common/data/docs-nav-data.json @@ -15,6 +15,36 @@ "title": "Integration Program", "path": "partnerships" }, - { "title": "Terraform Tools", "path": "terraform-tools" }, + { + "title": "Terraform Tools", + "routes": [ + { + "title": "Overview", + "path": "tools" + }, + { + "title": "Terraform MCP server", + "badge": { + "text": "BETA", + "type": "outlined", + "color": "neutral" + }, + "routes": [ + { + "title": "Overview", + "path": "tools/mcp-server" + }, + { + "title": "Deploy server", + "path": "tools/mcp-server/deploy" + }, + { + "title": "Prompt model", + "path": "tools/mcp-server/prompt" + } + ] + } + ] + }, { "title": "Glossary", "path": "glossary" } ] diff --git a/content/terraform-docs-common/docs/cloud-docs/api-docs/workspaces.mdx b/content/terraform-docs-common/docs/cloud-docs/api-docs/workspaces.mdx index 4ae065a1e6..0a1c7f8263 100644 --- a/content/terraform-docs-common/docs/cloud-docs/api-docs/workspaces.mdx +++ b/content/terraform-docs-common/docs/cloud-docs/api-docs/workspaces.mdx @@ -175,12 +175,10 @@ _With Key/Value Tags_ "type": "workspaces", "relationships": { "tag-bindings": { - { "data": [{ "type": "tag-bindings", "attributes": { "key": "env", "value": "test"} }] - } } } } diff --git a/content/terraform-docs-common/docs/cloud-docs/migrate/tf-migrate/index.mdx b/content/terraform-docs-common/docs/cloud-docs/migrate/tf-migrate/index.mdx index 128a3d847e..8d06376913 100644 --- a/content/terraform-docs-common/docs/cloud-docs/migrate/tf-migrate/index.mdx +++ b/content/terraform-docs-common/docs/cloud-docs/migrate/tf-migrate/index.mdx @@ -29,7 +29,7 @@ If your Terraform files are stored in GitHub, you must configure an API token th If your Terraform files are stored in GitLab Cloud, you must configure an API token that meets the following requirements: -- The token must be a personal access token. Refer to the [GitHub documentation](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) for additional information. +- The token must be a personal access token. Refer to the [GitLab documentation](https://docs.gitlab.com/user/profile/personal_access_tokens) for additional information. - The token must be have `read_repository` and `write_repository` scopes. ## Install @@ -101,7 +101,6 @@ To configure your API token, set the `TF_GIT_PAT_TOKEN` environment variable $ export TF_GIT_PAT_TOKEN= ``` - ## Supported backends The `tf-migrate` tool supports migrating state from the following backends to HCP Terraform or Terraform Enterprise: @@ -119,6 +118,20 @@ The `tf-migrate` tool supports migrating state from the following backends to HC `tf-migrate` does not support migrating state from an existing `cloud` integration or `remote` backend. +## Supported workspace workflows + +Versions 1.1.0 and newer of `tf-migrate` can create CLI- or VCS-driven HCP Terraform workspaces. + +The `tf-migrate` tool will only prompt you to create a VCS-driven workspace if you meet the following requirements: + +- Your local configuration is a Git repository. +- Your local Git repository has either GitHub or GitLab configured as a remote. +- Your HCP Terraform organization has at least one VCS OAuth connection configured for GitHub or GitLab. + +If your HCP Terraform organization has more than one VCS connection configured, `tf-migrate` will ask you to choose which VCS connection to use. + +If your local configuration does not meet all of the above requirements, `tf-migrate` automatically creates a CLI-driven workspace instead. + ## Enable logging You can enable detailed logging by setting the `TF_MIGRATE_ENABLE_LOG` environment variable to `true`. When you enable this setting, `tf-migrate` writes the logs to the following locations, depending on your operating system: diff --git a/content/terraform-docs-common/docs/cloud-docs/migrate/tf-migrate/reference/prepare.mdx b/content/terraform-docs-common/docs/cloud-docs/migrate/tf-migrate/reference/prepare.mdx index d695179f99..423c1a39f4 100644 --- a/content/terraform-docs-common/docs/cloud-docs/migrate/tf-migrate/reference/prepare.mdx +++ b/content/terraform-docs-common/docs/cloud-docs/migrate/tf-migrate/reference/prepare.mdx @@ -21,6 +21,7 @@ The `tf-migrate prepare` command prompts you for the following information: - The HCP Terraform or Terraform Enterprise organization to migrate your state to. - If you would like to create a new branch named `hcp-migrate-` where `` is the name of the branch you currently have checked out. - If you would like it to automatically create a pull request with the updated code change when the migration is complete. +- If you would like to create a CLI or VCS-driven workspace. Refer to [supported workspace workflows](/terraform/cloud-docs/migrate/tf-migrate#supported-workspace-workflows) for the requirements your configuration must meet to support a VCS-driven workspace. The `tf-migrate prepare` command generates a new Terraform configuration in the `_hcp-migrate-configs` directory to perform the migration. This configuration creates the following resources: @@ -29,7 +30,7 @@ The `tf-migrate prepare` command generates a new Terraform configuration in the - A new local git branch if you responded to the prompt to create a new branch with `yes`. - A new pull request in the remote git repository if you responded to the prompt to create a pull request with `yes`. -The `tf-migrate` CLI tool adds the generated configuration to the `.gitignore` file so that the configuration is not committed to source control. +The `tf-migrate` tool adds the generated configuration to the `.gitignore` file so that the configuration is not committed to source control. The `tf-migrate` tool creates the following structure in HCP Terraform or Terraform Enterprise depending on your local configuration: @@ -61,6 +62,22 @@ $ tf-migrate prepare └────────────────────────────┘ Enter the name of the HCP Terraform organization to migrate to: my-org-1 ✓ You have selected organization my-org-1 for migration + +Current repository was found on github.com. Do you want to create VCS-driven workspaces ... ? + +Enter a value: yes + +✓ Found 4 VCS providers +┌────────────────────────────┬──────────────────┬─────────────────┐ +│ Available VCS Providers │ Service Provider │ OAuth Client ID │ +├────────────────────────────┤──────────────────┤─────────────────┤ +│ github-dev │ GitHub │ oc-ABC123DEF456 │ +│ github-internal │ GitHub │ oc-GHI789JKL012 │ +└───────────────────────────────────────────────┴─────────────────┘ + +Enter the OAuth client ID of the VCS provider from the above list to create the VCS-driven workspace: oc-ABC123DEF456 + +✓ You have selected VCS provider GitHub for migration ✓ Found 2 directories with Terraform files ┌────────────────────────────────┐ │ Terraform File Directories │ diff --git a/content/terraform-docs-common/docs/cloud-docs/public-namespace/artifacts.mdx b/content/terraform-docs-common/docs/cloud-docs/public-namespace/artifacts.mdx new file mode 100644 index 0000000000..a6daee7f92 --- /dev/null +++ b/content/terraform-docs-common/docs/cloud-docs/public-namespace/artifacts.mdx @@ -0,0 +1,97 @@ +--- +page_title: Manage namespace artifacts +description: Learn to manage a public namespace’s available modules, and providers. +tfc_only: true +--- + +# Manage namespace artifacts + +Namespaces let you connect a GitHub account to an HCP Terraform organization, letting organization members collectively manage that GitHub account’s existing and future public registry artifacts. + + + +Namespaces do not support publishing or managing [policy libraries](/terraform/registry/policy-libraries/publishing) in the public registry. To publish or manage policy libraries with a namespace, continue to use the [existing registry workflows](/terraform/registry/policy-libraries/publishing#publishing-to-the-registry). + + + +## Requirements + +The following permissions are necessary to manage a namespace's artifacts: +- Organization owners or members with [**Manage public modules** permissions](/terraform/cloud-docs/users-teams-organizations/permissions#manage-public-registry) can manage modules in the public registry +- Organization owners or members with [**Manage public providers** permissions](/terraform/cloud-docs/users-teams-organizations/permissions#manage-public-registry) can manage providers in the public registry + +## Publish artifacts + +You can publish new modules and providers to the public registry under your organization’s claimed namespace. The following workflow should be familiar to existing public registry users: + +1. Set up a GitHub repository following the conventions and instructions outlined for the type of artifact you want to publish. + - For [modules](/terraform/registry/modules/publish), ensure your repository meets the [requirements](/terraform/registry/modules/publish#requirements). + - For [providers](/terraform/registry/providers/publishing), follow all of the steps up to the [Publishing to the Registry](/terraform/registry/providers/publishing#publishing-to-the-registry) section. + - If you have not installed the [Terraform Cloud GitHub App](/terraform/cloud-docs/vcs/github-app) globally in your GitHub account, install the app in the repository you want to publish. +1. Sign in to [HCP Terraform](https://app.terraform.io/) and navigate to your organization, then select **Registry** in the sidebar, then **Public namespaces** and select the namespace you want to publish from. +1. Click **Publish** and select the type of artifact, provider or module, you want to publish. +1. Select the repository you want to publish. +1. If you are publishing a provider, choose a **Category.** +1. Check the box to agree to the terms of service. +1. Click **Publish provider** or **Publish module.** + +HCP Terraform then displays a list of all the versions of your provider or module currently in your repository, and the status of each version that the public registry creates. If you navigate away from this page before processing is complete, it continues in the background. + +## Publish new artifact versions + +You can create new versions of public registry artifacts using the same workflow as individual GitHub accounts. Add a properly formatted tag for modules, or release for providers, to your artifact's GitHub repository. GitHub notifies HCP Terraform that a new version or release is available and instructs the public registry to create a new version. + +Once the public registry creates the new version it appears in your namespace in HCP Terraform. You can view artifact versions by clicking the ellipsis **…** next to an artifact and selecting **View version history**. New versions are also visible on your artifact's page in the public registry. + +If the new version creates errors, a notification appears on your organization's **Public namespaces** page. The notification includes an error, and after you fix the problem we recommend [creating a new tag or release](/terraform/registry/faq#how-do-i-correct-bugs-in-published-versions). + +## View artifacts + +On the **Public namespaces** page, you can click the ellipsis **…** next to an artifact to list the available actions you can take on that artifact: + +- **View in public registry** links to the artifact’s page on [`https://registry.terraform.io`](https://registry.terraform.io). +- **View downloads** has the download metrics for the selected artifact. + - View the number of times users have downloaded multiple versions, or select a single version to view the number of times users have downloaded it. + - You can also download a CSV file that summarizes the monthly downloads of each artifact version. +- **View version history** lists the artifact's published versions. +- **Add to private library** adds the artifact to your organization’s [private registry](/terraform/cloud-docs/registry). + +## Delete artifacts or artifact versions + +On the **Public namespaces** page, you can delete modules, providers, and module and provider versions if you have the [correct permissions](#requirements) and an artifact meets specific deletion requirements. + +### Deletion requirements + +To delete a provider, module, or a provider or module version, one of the following must be true: + +- Someone published the artifact less than 48 hours ago. +- No version of the artifact was downloaded by users more than 100 times. + +### Delete a module or provider + +If your provider or module meets [the deletion requirements](#deletion-requirements), you delete it by doing the following: + +- Clicking on the ellipsis **…** next to the artifact and choosing **Delete.** +- Confirm by entering `delete` and click **Delete.** + +### Delete a module or provider version + +If your provider or module meets [the deletion requirements](#deletion-requirements), you delete a version by doing the following: + +- Clicking on the ellipsis **…** next to the artifact and choosing to **Delete version.** +- Entering the exact version of the provider or module to delete. +- Confirm by entering `delete` and click **Delete version.** + +## Resync artifacts + +Resyncing an artifact checks for discrepancies between the versions of an artifact on GitHub and the versions available within the public registry. Resyncing attempts to reconcile any differences by changing versions available in the public registry to match GitHub. + +If an artifact version exists in GitHub but not in the registry, HCP Terraform attempts to create new versions in the registry. If an artifact version exists in the registry but not in GitHub, HCP Terraform deletes the registry versions that [meet the deletion requirements](#deletion-requirements). + +To resync an artifact: + +1. Click the ellipsis **…** next to the artifact you want to resync. +1. Select **Resync**. +1. HCP Terraform lists the versions it intends to create or delete, click **Resync** to confirm. + +You can then see the public registry's progress as it performs each operation. If you navigate away from this page before processing is complete it continues in the background diff --git a/content/terraform-docs-common/docs/cloud-docs/public-namespace/create_or_claim.mdx b/content/terraform-docs-common/docs/cloud-docs/public-namespace/create_or_claim.mdx new file mode 100644 index 0000000000..3e0f5e867f --- /dev/null +++ b/content/terraform-docs-common/docs/cloud-docs/public-namespace/create_or_claim.mdx @@ -0,0 +1,48 @@ +--- +page_title: Create or claim namespaces in HCP Terraform +description: Create a new namespace or claim an existing one to allow organization members to collectively manage that namespace's public registry artifacts. +tfc_only: true +--- + +# Create or claim a namespace + +Organizations can create or claim a GitHub account’s public registry namespace to allow its members to manage the public registry artifacts in that account. + +When an organization claims a namespace, the only way to manage that claimed namespace is through HCP Terraform, meaning you can no longer manage that namespace through the [public registry](https://registry.terraform.io/). + + + +Namespaces do not support publishing or managing [policy libraries](/terraform/registry/policy-libraries/publishing) in the public registry. To publish or manage policy libraries, continue to use the [existing registry workflows](/terraform/registry/policy-libraries/publishing#publishing-to-the-registry). + + + + +## Requirements + +You must meet the following requirements to claim a namespace for an organization: + +* Be a member of the [owners](/terraform/cloud-docs/users-teams-organizations/permissions#organization-owners) team in your HCP Terraform organization. +* If the namespace you want to claim has existing public registry artifacts, you must: + * Have `write` access to each artifact’s corresponding repository. + * Each repository must have the [Terraform Cloud GitHub App](/terraform/cloud-docs/vcs/github-app) installed. + +### Install the GitHub App + +You must install the [Terraform Cloud GitHub App](/terraform/cloud-docs/vcs/github-app) into the GitHub account with the namespace you want to claim. To install a GitHub app, you must own your account or receive administrator approval for your [organization](https://docs.github.com/en/organizations/collaborating-with-groups-in-organizations/about-organizations#organizations-and-enterprise-accounts) account. + +During the Terraform Cloud GitHub App installation process, you can choose to install the app in specific repositories or globally in every repository in your account. We recommend installing the Terraform Cloud GitHub App globally into every repository in your account to simplify claiming a namespace with existing public registry artifacts and publishing future artifacts. + +## Workflow + +To create or claim a namespace: +1. Sign in to [HCP Terraform](https://app.terraform.io/) and navigate to the organization where you want to create or claim a namespace. +1. In the sidebar navigate to **Registry**, then **Public namespaces**. +1. Click **New Namespace**. +1. HCP Terraform lists accounts where you installed the [Terraform Cloud GitHub App](/terraform/cloud-docs/vcs/github-app). Choose the account you want to create or claim the namespace of. +1. After selecting an account, HCP Terraform verifies if you qualify to claim that namespace. + - If the namespace already exists and contains artifacts, then HCP Terraform ensures you have `write` access to each artifact’s corresponding repository. +1. Click **Create Namespace** or **Claim Namespace** to finalize your organization’s public namespace ownership. + +After claiming or creating a new namespace, the **Public namespace** page lists any artifacts your organization now controls under that namespace. + +If HCP Terraform does not list the GitHub account you want to claim on the **New namespace** page, click **Add GitHub Account** and follow the prompts to [reinstall the application](https://docs.github.com/en/apps/using-github-apps/installing-a-github-app-from-a-third-party). After reinstalling, sign into GitHub as a user with access to the account you want to claim and try again. For more information on any specific error codes you encounter, [refer to the GitHub documentation](https://docs.github.com/en/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/repository-roles-for-an-organization#repository-roles-for-organizations). diff --git a/content/terraform-docs-common/docs/cloud-docs/public-namespace/index.mdx b/content/terraform-docs-common/docs/cloud-docs/public-namespace/index.mdx new file mode 100644 index 0000000000..f0f1ba26b0 --- /dev/null +++ b/content/terraform-docs-common/docs/cloud-docs/public-namespace/index.mdx @@ -0,0 +1,41 @@ +--- +page_title: Namespace overview for HCP Terraform +description: Create a namespace for a linked Github account, letting organization members collectively manage that account’s public registry artifacts. +tfc_only: true +--- + +# Namespace overview + +Namespaces let you connect a GitHub account to an HCP Terraform organization, letting organization members collectively manage that GitHub account’s public registry artifacts. + +Every artifact in the [public Terraform registry](https://registry.terraform.io/) connects to a namespace that matches the name of the GitHub account that published that artifact. For example, the `iam` [provider](https://registry.terraform.io/modules/terraform-aws-modules/iam/aws/latest) is published by the `terraform-aws-modules` [namespace](https://registry.terraform.io/namespaces/terraform-aws-modules), which corresponds to an [Github organization](https://docs.github.com/en/organizations/collaborating-with-groups-in-organizations/about-organizations) account with the same name. + +You can claim a namespace in HCP Terraform by linking a GitHub account to an organization, claiming that account’s namespace. Each GitHub account namespace can belong to one HCP Terraform organization. + + +## The public and private registries + +The [Terraform registry](https://registry.terraform.io/) is a public interactive resource for discovering integrations and configuration packages. Anyone can publish and consume the artifacts in the public registry. An organization in HCP Terraform has a [private registry](/terraform/cloud-docs/registry) that allows members to share modules and providers privately with other members of their organization. + +An organization's private registry is separate from its public registry artifacts and workflows. For example, an organization owner can publish a new module to the public registry from one of their organization's claimed namespaces, and that module is not automatically included in that organization's private registry. If an organization member wants to use the newly published module, they must follow the the usual steps to [add that module to their private registry](/terraform/cloud-docs/registry/add). + +## Manage namespaces and registry artifacts + + + +Namespaces do not support publishing or managing [policy libraries](/terraform/registry/policy-libraries/publishing) in the public registry. To publish or manage policy libraries with a namespace, continue to use the [existing registry workflows](/terraform/registry/policy-libraries/publishing#publishing-to-the-registry). + + + +Linking a GitHub account to an HCP Terraform organization lets organization members collectively manage the linked GitHub account’s [public registry artifacts](/terraform/cloud-docs/public-namespace/artifacts) and the namespace itself. + +Organization owners can manage claimed namespaces and specify which team members can interact with an organization's namespaces by setting [organization-level permissions](/terraform/cloud-docs/users-teams-organizations/permissions#manage-public-registry) to either **Manage public modules** or **Manage public providers**. + +Organization owners and teams with **Manage public modules** and **Manage public providers** permissions can perform the following actions for every namespaces in their organization: + +* [Publish new providers or modules](/terraform/cloud-docs/public-namespace/artifacts#publish-artifacts) to the public registry under a namespace +* [Publish new versions](/terraform/cloud-docs/public-namespace/artifacts#publish-new-artifact-versions) of existing public registry artifacts +* [Add GPG keys](/terraform/cloud-docs/public-namespace/manage#manage-gpg-keys) to a namespace +* [Resync](/terraform/cloud-docs/public-namespace/artifacts#resync-artifacts) a namespace’s public registry artifacts +* [View usage metrics](/terraform/cloud-docs/public-namespace/artifacts#view-artifacts) for public registry artifacts +* [Delete an artifact or an artifact version](/terraform/cloud-docs/public-namespace/artifacts#delete-artifacts-or-artifact-versions) diff --git a/content/terraform-docs-common/docs/cloud-docs/public-namespace/manage.mdx b/content/terraform-docs-common/docs/cloud-docs/public-namespace/manage.mdx new file mode 100644 index 0000000000..13d871ca97 --- /dev/null +++ b/content/terraform-docs-common/docs/cloud-docs/public-namespace/manage.mdx @@ -0,0 +1,41 @@ +--- +page_title: Manage namespaces +description: Learn how to administer an organization namespace by managing its GPG keys or releasing it. +tfc_only: true +--- + +# Manage namespaces + +After an HCP Terraform organization claims a namespace, you can configure that namespace’s GPG keys or release your organization's claim on the namespace. + +## Requirements + +The following permissions are necessary to manage a namespace: + +- Organization owners or members with [**Manage public providers** permissions](/terraform/cloud-docs/users-teams-organizations/permissions#manage-public-registry) can add or remove GPG keys. +- Organization [owners](/terraform/cloud-docs/users-teams-organizations/permissions#organization-owners) can release an organization’s claim on a namespace. + +## Manage GPG keys + +A namespace uses its GPG keys to [sign releases for a namespace’s providers](/terraform/registry/providers/publishing#preparing-and-adding-a-signing-key). A namespace’s settings page lists its current GPG keys. + +To add a new GPG key to the namespace: +1. Sign in to [HCP Terraform](https://app.terraform.io/) and navigate to your organization, then select **Registry** in the sidebar, then **Public namespaces**. +1. Choose the namespace you want to manage from the dropdown list and click **Settings** in the upper-right corner. +1. Click **New GPG Key**, which only appears to those with [**Manage public providers** permissions](/terraform/cloud-docs/users-teams-organizations/permissions#manage-public-registry). +1. Paste the ASCII-armored text for your public GPG key in the modal window, including both `-----BEGIN PGP PUBLIC KEY BLOCK-----` and `-----END PGP PUBLIC KEY BLOCK-----`. +1. Click **Add GPG key**. + +If successful, HCP Terraform lists your new key in your namespace's list of GPG keys. + +## Release namespace claim + +A namespace can only have one owner. If you want to move a namespace from one organization to another, you must first release your ownership claim before reclaiming that namespace in another organization. + +To release a namespace claim: +1. Sign in to [HCP Terraform](https://app.terraform.io/) and navigate to your organization, then select **Registry** in the sidebar, then **Public namespaces**. +1. Choose the namespace you want to release from the dropdown list and click **Settings** in the upper-right corner. +1. Click **Release** under the **Release claim** section. +1. Confirm by typing the word "release" and then click **Release**. + +After releasing ownership of a namespace, you can [claim that namespace](/terraform/cloud-docs/public-namespace/create_or_claim) under another organization. diff --git a/content/terraform-docs-common/docs/cloud-docs/registry/index.mdx b/content/terraform-docs-common/docs/cloud-docs/registry/index.mdx index 1d5603936a..4a830bcdac 100644 --- a/content/terraform-docs-common/docs/cloud-docs/registry/index.mdx +++ b/content/terraform-docs-common/docs/cloud-docs/registry/index.mdx @@ -13,6 +13,8 @@ HCP Terraform's private registry works similarly to the [public Terraform Regist [Public modules and providers](/terraform/cloud-docs/registry/add) are hosted on the public Terraform Registry and HCP Terraform can automatically synchronize them to an organization's private registry. This lets you clearly designate which public providers and modules are recommended for the organization and makes their supporting documentation and examples centrally accessible. +For more information about publishing artifacts to the public registry with an HCP Terraform organization, refer to [Namespaces](/terraform/cloud-docs/public-namespace). + -> **Note:** Your Terraform Enterprise instance must allow access to `registry.terraform.io` and `https://yy0ffni7mf-dsn.algolia.net/`. ## Private Providers and Modules diff --git a/content/terraform-docs-common/docs/cloud-docs/users-teams-organizations/permissions.mdx b/content/terraform-docs-common/docs/cloud-docs/users-teams-organizations/permissions.mdx index cd222dcad8..f1693e076e 100644 --- a/content/terraform-docs-common/docs/cloud-docs/users-teams-organizations/permissions.mdx +++ b/content/terraform-docs-common/docs/cloud-docs/users-teams-organizations/permissions.mdx @@ -38,6 +38,9 @@ Permissions for the owners team include: - Manage policy overrides (refer to [Organization Permissions][] below) - Manage VCS settings (refer to [Organization Permissions][] below) - Manage the private registry (refer to [Organization Permissions][] below) + +- Manage the public registry (refer to [Organization Permissions][] below) + - Manage Membership (refer to [Organization Permissions][] below; invite or remove users from the organization itself, and manage the membership of its teams) - View all secret teams (refer to [Organization Permissions][] below) - Manage agents (refer to [Organization Permissions][] below) @@ -316,6 +319,14 @@ This permission implicitly grants access to read all workspaces, which is necess Allows members to publish and delete providers, modules, or both providers and modules in the organization's [private registry](/terraform/cloud-docs/registry). These permissions are otherwise only available to organization owners. + + +### Manage Public Registry + +Allows members to publish and delete providers, modules, or both providers and modules using an organization's [claimed namespaces](/terraform/cloud-docs/registry/public-namespace) in the [public registry](https://registry.terraform.io/). These permissions are otherwise only available to organization owners. + + + ### Team Management Permissions HCP Terraform has three levels of team management permissions: manage membership, manage teams, and manage organization access. Each permission level grants users the ability to perform specific actions and each progressively requires prerequisite permissions. diff --git a/content/terraform-docs-common/docs/cloud-docs/workspaces/settings/vcs.mdx b/content/terraform-docs-common/docs/cloud-docs/workspaces/settings/vcs.mdx index dc36790767..e83c6141c5 100644 --- a/content/terraform-docs-common/docs/cloud-docs/workspaces/settings/vcs.mdx +++ b/content/terraform-docs-common/docs/cloud-docs/workspaces/settings/vcs.mdx @@ -63,7 +63,7 @@ This option instructs Terraform to begin a run when changes are pushed to any fi This option instructs Terraform to begin new runs only for changes that affect specified files and directories. This behavior also applies to [speculative plans](/terraform/cloud-docs/run/remote-operations#speculative-plans) on pull requests. You can use trigger patterns and trigger prefixes in the **Add path** field to specify groups of files and directories. -- **Trigger Patterns:** (Recommended) Use glob patterns to specify the files that should trigger a new run. For example, `/submodule/**/*.tf`, specifies all files with the `.tf` extension that are nested below the `submodule` directory. You can also use more complex patterns like `/**/networking/**/*`, which specifies all files that have a `networking` folder in their file path. (e.g., `/submodule/service-1/networking/private/main.tf`). Refer to [Glob Patterns for Automatic Run Triggering](#glob-patterns-for-automatic-run-triggering) for details. +- **Trigger Patterns:** (Recommended) Use glob patterns to specify the files that should trigger a new run. For example, `/submodule/**/*.tf`, specifies all files with the `.tf` extension that are nested below the `submodule` directory. You can also use more complex patterns like `/**/networking/**/*`, which specifies all files that have a `networking` folder in their file path. (e.g., `/submodule/service-1/networking/private/main.tf`). Note, the glob patterns match hidden files and directories (names starting with `.`). Refer to [Glob Patterns for Automatic Run Triggering](#glob-patterns-for-automatic-run-triggering) for details. - **Trigger Prefixes:** HCP Terraform will queue runs for changes in any of the specified trigger directories matching the provided prefixes (including the working directory). For example, if you use a top-level `modules` directory to share Terraform code across multiple configurations, changes to the shared modules are relevant to every workspace that uses that repository. You can add `modules` as a trigger directory for each workspace to track changes to shared code. -> **Note:** HCP Terraform triggers runs on all attached workspaces if it does not receive a list of changed files or if that list is too large to process. When this happens, HCP Terraform may show several runs with completed plans that do not result in infrastructure changes. diff --git a/content/terraform-docs-common/docs/docs/terraform-tools.mdx b/content/terraform-docs-common/docs/docs/tools/index.mdx similarity index 97% rename from content/terraform-docs-common/docs/docs/terraform-tools.mdx rename to content/terraform-docs-common/docs/docs/tools/index.mdx index 5175f07380..a291f67b3c 100644 --- a/content/terraform-docs-common/docs/docs/terraform-tools.mdx +++ b/content/terraform-docs-common/docs/docs/tools/index.mdx @@ -16,6 +16,7 @@ Terraform is part of a rich infrastructure and DevOps ecosystem. The tools below |[Visual Studio Code Extension](https://marketplace.visualstudio.com/items?itemName=HashiCorp.terraform) | HashiCorp | Enable syntax highlighting and other editing features in VS Code using the Terraform Language Server.| | |[Language Server](https://github.com/hashicorp/terraform-ls) | HashiCorp | Add support for the Terraform configuration language to editors that use the [Language Server Protocol](https://microsoft.github.io/language-server-protocol/), like Sublime Text, vim, emacs, etc.| | |[console](/terraform/cli/commands/console) | HashiCorp | Evaluate Terraform expressions and explore your Terraform project's state. The console helps you develop and debug your configuration, especially when working with complex state data and Terraform expressions.| [Develop Configuration with the Console](/terraform/tutorials/cli/console) | +| [Terraform MCP server](/terraform/docs/tools/mcp-server) | HashiCorp | Helps you use an AI or LLM to write Terraform configuration by retrieving data directly from the Terraform registry. | | ## Manage Infrastructure diff --git a/content/terraform-docs-common/docs/docs/tools/mcp-server/deploy.mdx b/content/terraform-docs-common/docs/docs/tools/mcp-server/deploy.mdx new file mode 100644 index 0000000000..41d4e09f02 --- /dev/null +++ b/content/terraform-docs-common/docs/docs/tools/mcp-server/deploy.mdx @@ -0,0 +1,105 @@ +--- +page_title: Deploy the Terraform model context protocol (MCP) server +description: |- + Learn how to deploy the Terraform MCP server, which helps you write configuration using LLM responses sourced from the Terraform registry. +--- + +# Deploy the Terraform MCP server + +This topic describes how to deploy the Terraform model context protocol (MCP) server in a Docker container on your local workstation. The Terraform MCP server connects to a client so that your LLM can use data stored in the Terraform registry to help you write Terraform configuration. Refer to the [overview](/terraform/docs/terraform-tools/mcp-server) for additional information about the Terraform MCP server. + +@include 'beta.mdx' + +## Overview + +Complete the following steps to deploy the Terraform MCP server: + +1. Pull the Docker image +1. Connect your client to the MCP server +1. Configure your client + +## Requirements + +One of the following Docker distributions is required: + +- Docker Engine v20.10.21+ +- Docker Desktop v4.14.0+ + +Refer to the [Docker documentation](https://docs.docker.com/desktop) for installation instructions. + +The following MCP clients are supported: + +- VS Code with CoPilot. Refer to the [VS Code documentation](https://code.visualstudio.com/docs) for installation instructions. +- Cursor. Refer to the [Cursor website](https://www.cursor.com) for more information. +- Anthropic Claude Desktop. Refer to the [Anthropic Claude Desktop documentation](https://support.anthropic.com/en/articles/10065433-installing-claude-for-desktop) for installation instructions. + +## Enable MCP in your client + +Refer to your client's documentation for instructions on enabling MCP: + +- [VS Code](https://code.visualstudio.com/docs/copilot/chat/mcp-servers) +- [Cursor](https://docs.cursor.com/context/model-context-protocol#configuring-mcp-servers) +- [Anthropic Claude Desktop](https://modelcontextprotocol.io/quickstart/user) + +## Install the server + +For VS Code, create an `mcp.json` file in the `.vscode` or `.cursor` directory of your local workspace and add the following configuration: + +```json +{ +"servers": { + "terraform-mcp-server": { + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "hashicorp/terraform-mcp-server:0.1.0" + ] + } +} +} +``` + +For Claude Desktop MCP clients, create an `mcp.json` file and add the following configuration: + + ```json + { + "mcpServers": { + "servers": { + "hcp-terraform": { + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "hashicorp/terraform-mcp-server:0.1.0" + ] + } + } + } + } + ``` + + +## Configure your MCP client + +Complete the following steps if you are using Copilot in VS Code: + +1. Open the chat interface and choose **Agent** from the mode settings. +1. Click the tools icon to verify that the Terraform MCP server tools are enabled. + +Complete the following steps if you are using Cursor: + +1. Open the chat pane and choose **Chat Settings** from the ellipses menu. +1. Choose **Agent from the **Default new chat mode** drop-down menu. +1. Choose **MCP** from the **Cursor Settings** sidebar to verify that the Terraform MCP server tools are enabled. + +Complete the following steps if you are using Claude Desktop: + +1. Open the chat pane and choose the **search and tools** slider icon to the bottom left of the chat pane. +1. Click **terraform-mcp-server** to verify that all the tools are enabled. + +## Next steps + +After downloading the Terraform MCP server and connecting it to your client, you can begin prompting your model about your Terraform configuration code. Refer to [Prompt an AI model](/terraform/docs/tools/mcp-server/prompt) for more information. \ No newline at end of file diff --git a/content/terraform-docs-common/docs/docs/tools/mcp-server/index.mdx b/content/terraform-docs-common/docs/docs/tools/mcp-server/index.mdx new file mode 100644 index 0000000000..0ea17fba72 --- /dev/null +++ b/content/terraform-docs-common/docs/docs/tools/mcp-server/index.mdx @@ -0,0 +1,40 @@ +--- +page_title: Terraform MCP server overview +description: Learn about the Terraform model context protocol (MCP) server and how it can help you write Terraform configuration using AI. +--- + +# Terraform MCP server overview + +This topic provides an overview of the Terraform model context protocol (MCP) server, which helps you write Terraform configuration using an AI or LLM. The server requests information directly from the Terraform registry so that your model can formulate responses using provider code and documentation as the source of truth. + +@include 'beta.mdx' + +## Introduction + +MCP standardizes how AI models can discover and interact with external tools, applications, and data sources. You can configure MCP clients, such as an AI or LLM chat, to send requests through an MCP server so that the model can provide answers to prompts that it may not have been trained on. Refer to the [MCP documentation](https://modelcontextprotocol.io/introduction) for details about how MCP works. + +You can configure your AI model to connect to the Terraform MCP server so that it can request information about providers, modules, and other objects from data stored in the Terraform registry. When the Terraform MCP is available to your AI client, the model retrieves information from the most up-to-date source code stored in the registry, instead of relying on outdated training data. As a result, you can get more accurate and actionable information. + +Note that to use the server, your questions must pertain to provider configuration from the registry. The LLM uses other sources, such as content from the internet, to respond to general questions about Terraform configuration or requests to generate code. + +## Workflow + +- [Deploy the Terraform MCP server](/terraform/docs/tools/mcp-server/deploy) +- [Prompt your model](/terraform//docs/tools/mcp-server/prompt) + +## Terraform MCP server tools + +The Terraform MCP server runs in a Docker container on your local workstation and exposes functionality to clients using tools. The Terraform MCP server includes a set of tools that retrieve different types of information from the Terraform registry: + +- `resolveProviderDocID`: Queries the Terraform Registry to find and list available documentation for a specific provider. This tool uses `serviceSlug` to return a list of provider document IDs with their titles and categories for resources, data sources, functions, or guides. +- `getProviderDocs`: Fetches the complete documentation content for a specific provider resource, data source, or function using a document ID obtained from the `resolveProviderDocID` tool. Returns the raw documentation in markdown format. +- `searchModules`: Searches the Terraform Registry for modules based on the specified `moduleQuery` with pagination. Returns a list of module IDs with their names, descriptions, download counts, verification status, and publish dates. +- `moduleDetails`: Retrieves detailed documentation for a module using a module ID obtained from the `searchModules` tool, including inputs, outputs, configuration, submodules, and examples. + +## Release notes + +For information about new releases, refer to the [Terraform MCP server repository](https://github.com/hashicorp/terraform-mcp-server/releases). + +## Provide feedback + +We want to hear from you. Complete the [Terraform MCP server feedback form](https://docs.google.com/forms/d/e/1FAIpQLSem_F9Spg89vQEq33-vjeXk-qZn930Dn3XSvcB2dBORgMHddA/viewform) to provide to help us improve this feature. \ No newline at end of file diff --git a/content/terraform-docs-common/docs/docs/tools/mcp-server/prompt.mdx b/content/terraform-docs-common/docs/docs/tools/mcp-server/prompt.mdx new file mode 100644 index 0000000000..48b2eff0aa --- /dev/null +++ b/content/terraform-docs-common/docs/docs/tools/mcp-server/prompt.mdx @@ -0,0 +1,357 @@ +--- +page_title: Prompt an AI model connected to the Terraform MCP server +description: |- + Learn how to prompt your AI model connected to the Terraform MCP server to answer questions about Terraform configuration using code stored in the Terraform registry +--- + +# Prompt a model connected to the Terraform MCP server + +This topic provides example prompts for helping you write Terraform configuration after installing the Terraform model context protocol (MCP) server. Refer to [Deploy the Terraform MCP server](/terraform/docs/tools/mcp-server/install) for instructions on how to deploy the server. + +@include 'beta.mdx' + +## Overview + +To trigger the MCP server tools, ask your LLM questions about your provider configuration or general questions about Terraform providers and modules. Note that for your LLM to use the server, your questions must pertain to provider configuration from the registry. The LLM uses other sources, such as content from the internet, to respond to general questions about Terraform configuration or requests to generate code. + +## Requirements + +Verify that you have deployed the Terraform MCP server and configured your client. Refer to [Deploy the Terraform MCP server](/terraform/docs/tools/mcp-server/deploy) for instructions. + +## Prompt your MCP client + +Your model may still decide to use other resources to formulate responses, but you can use the following guidelines to help you create prompts that are more likely to be routed through the server: + +- Include the names of specific providers or provider modules. For example, use `google_compute_disk` in your prompt instead of `the compute disk`. +- Use the full Terraform resource address in your query. Refer to [Resource Address Reference](/terraform/cli/state/resource-addressing) in the Terraform CLI documentation for additional information about resource addresses. +- Ask for the latest information about the provider or module. + +## Examples + +You can use the following set of prompts as a guide to help you write your own configuration. The following responses are returned from the server using ChatGPT 4.1 in GitHub Copilot on VS Code. Your responses may vary. + +### Get AI-related resources from the Google provider + +The following prompt runs the [`resolveProviderDocID`](/terraform/docs/tools/mcp-server#resolveproviderdocid) tool, which obtains a list of related provider document IDs so that you can decide which resources to create: + +> "I need help understanding what resources are available in the Google provider that are for AI" + + +#### Response + +The server sends the following request payload to the registry: + +```json + { + "providerDataType": "resources", + "providerName": "google", + "providerNamespace": "hashicorp", + "providerVersion": "latest", + "serviceSlug": "ai" +} +``` + +The server retrieves the following response from the registry. The response is truncated in this example: + +```markdown +Available Documentation (top matches) for resources in Terraform provider hashicorp/google version: 6.35.0 + +Each result includes: +- providerDocID: tfprovider-compatible identifier +- Title: Service or resource name +- Category: Type of document +For best results, select libraries based on the serviceSlug match and category of information requested. + +--- +- providerDocID: 8925589 +- Title: vertex_ai_endpoint_iam +- Category: resources +--- +- providerDocID: 8925590 +- Title: vertex_ai_feature_group +- Category: resources +--- +- providerDocID: 8925591 +- Title: vertex_ai_feature_group_feature +- Category: resources + +. . . +``` + +The client prints the following response using the context acquired from the MCP server: + +> The Google Terraform provider offers several resources related to AI, primarily under the Vertex AI and Document AI services. Here are the main AI-related resources available: +> +> **Vertex AI Resources** +> +> - `vertex_ai_dataset` +> - `vertex_ai_deployment_resource_pool` +> - `vertex_ai_endpoint` +> - `vertex_ai_endpoint_iam` +> - `vertex_ai_feature_group` +> - `vertex_ai_featurestore` +> - `vertex_ai_index` +> - `vertex_ai_metadata_store` +> - `vertex_ai_tensorboard` +> - `document_ai_processor` +> - `document_ai_warehouse_document_schema` +> +> These resources allow you to manage datasets, endpoints, feature stores, indexes, metadata, and more for AI/ML workflows on Google Cloud, as well as Document AI processors and schemas. +> +> If you want details or documentation for any specific resource, let me know which one(s) you're interested in! + +### Get information about storage buckets in Azure + +The following prompt runs the [`resolveProviderDocID`](/terraform/docs/tools/mcp-server#resolveproviderdocid) tool, which gets a list of provider documentation IDs. Next, the [`getProviderDocs`](/terraform/docs/tools/mcp-server#getproviderdocs) tool calls the appropriate documentation for the use case: + +> "I need help setting up storage buckets in the azure provider" + +#### Response + +The server sends a request payload for each tool: + + + +```json +{ + "providerDataType": "resources", + "providerName": "azurerm", + "providerNamespace": "hashicorp", + "providerVersion": "latest", + "serviceSlug": "storage_account" +} +``` + + + + + +```json +{ + "providerDocID": "8957547" +} +``` + + + + + + +```json +{ + "providerDocID": "8957555" +} +``` + + + +The server retrieves the following responses to each tool from the registry. The responses are truncated in this example: + + + +```` +Available Documentation (top matches) for resources in Terraform provider hashicorp/azurerm version: 4.29.0 + +Each result includes: +- providerDocID: tfprovider-compatible identifier +- Title: Service or resource name +- Category: Type of document +For best results, select libraries based on the serviceSlug match and category of information requested. + +--- + +- providerDocID: 8956759 +- Title: backup_container_storage_account +- Category: resources +--- +- providerDocID: 8957097 +- Title: key_vault_managed_storage_account +- Category: resources +--- +- providerDocID: 8957098 +- Title: key_vault_managed_storage_account_sas_token_definition +- Category: resources +--- +- providerDocID: 8957145 +- Title: log_analytics_linked_storage_account +- Category: resources +... + +```` + + + + + +```` +--- +subcategory: "Storage" +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_storage_account" +description: |- + Manages a Azure Storage Account. +--- + +# azurerm_storage_account + +Manages an Azure Storage Account. + +## Example Usage + +```hcl +resource "azurerm_resource_group" "example" { + name = "example-resources" + location = "West Europe" +} + +resource "azurerm_storage_account" "example" { + name = "storageaccountname" + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + account_tier = "Standard" + account_replication_type = "GRS" + + tags = { + environment = "staging" + } +} +``` + +## Example Usage with Network Rules + +... + +```` + + + + + +```` + +--- +subcategory: "Storage" +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_storage_container" +description: |- + Manages a Container within an Azure Storage Account. +--- + +# azurerm_storage_container + +Manages a Container within an Azure Storage Account. + +## Example Usage + +```hcl +resource "azurerm_resource_group" "example" { + name = "example-resources" + location = "West Europe" +} + +resource "azurerm_storage_account" "example" { + name = "examplestoraccount" + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + account_tier = "Standard" + account_replication_type = "LRS" + + tags = { + environment = "staging" + } +} + +resource "azurerm_storage_container" "example" { + name = "vhds" + storage_account_id = azurerm_storage_account.example.id + container_access_type = "private" +} +``` + +## Argument Reference + +... + +```` + + + + +The client prints the following response using the context acquired from the MCP server: + +> To set up storage buckets in Azure using the Terraform azurerm provider, you need to use the azurerm_storage_account resource. Here’s a quick guide and example configuration: +> +> 1. Terraform Resource for Azure Storage Account +> +> ```hcl +> resource "azurerm_resource_group" "example" { +> name = "example-resources" +> location = "West Europe" +> } +> +> resource "azurerm_storage_account" "example" { +> name = "storageaccountname" # must be globally unique, lowercase +> resource_group_name = azurerm_resource_group.example.name +> location = azurerm_resource_group.example.location +> account_tier = "Standard" # or "Premium" +> account_replication_type = "GRS" # or "LRS", "RAGRS", "ZRS", etc. +> +> tags = { + > environment = "staging" +> } +> } +> ``` + +### Get help creating an IBM VM + +The following prompt runs the [`searchModules`](/terraform/docs/tools/mcp-server#searchmodules) tool, which gets a list of modules: + +> "Is there a module to help with setting up an IBM VM?" + +#### Response + +The server sends the following request payload: + +```json +{ + "moduleQuery": "ibm vm" +} +``` + +The server retrieves the following response from the registry: + +```` +Available Terraform Modules (top matches) for ibm vm + + Each result includes: +- moduleID: The module ID (format: namespace/name/provider-name/module-version) +- Name: The name of the module +- Description: A short description of the module +- Downloads: The total number of times the module has been downloaded +- Verified: Verification status of the module +- Published: The date and time when the module was published + + +--- + +- moduleID: intel/ibm-vm/intel/1.2.2 +- Name: ibm-vm +- Description: Intel Cloud Optimization Module - IBM VM +- Downloads: 15 +- Verified: false +- Published: 2024-09-25 20:31:58.951109 +0000 UTC +--- +```` + + +The client prints the following response using the context acquired from the MCP server: + +> Yes, there is a Terraform module to help with setting up an IBM VM: +> - IBM VM Module +> - ID: intel/ibm-vm/intel/1.2.2 +> - Description: Intel Cloud Optimization Module - IBM VM +> - Module Version: 1.2.2 +> - Namespace: intel +> - Source: GitHub - intel/terraform-intel-ibm-vm +> +> You can use this module to set up and manage IBM VMs with Terraform. If you need more details or usage examples, let me know. \ No newline at end of file diff --git a/content/terraform-docs-common/docs/partials/beta.mdx b/content/terraform-docs-common/docs/partials/beta.mdx new file mode 100644 index 0000000000..eab9d4c9a7 --- /dev/null +++ b/content/terraform-docs-common/docs/partials/beta.mdx @@ -0,0 +1,6 @@ + + + +This feature is currently in beta. Do not use beta functionality in production environments. + + \ No newline at end of file diff --git a/content/terraform-docs-common/docs/registry/faq.mdx b/content/terraform-docs-common/docs/registry/faq.mdx index 3efb8e55aa..a2201faa8a 100644 --- a/content/terraform-docs-common/docs/registry/faq.mdx +++ b/content/terraform-docs-common/docs/registry/faq.mdx @@ -132,3 +132,7 @@ Artifacts in the Public Registry that were originally published by a GitHub user > The GitHub user that published this artifact no longer exists. See the FAQ for more information. If you are the owner of such an artifact, or for other artifact ownership issues, please [reach out to us](/terraform/registry#getting-help). + +## Can I manage my public registry artifacts with HCP Terraform? + +If you are an HCP Terraform user and want to publish and manage modules or providers in the public registry, you can connect a GitHub account to an HCP Terraform organization, letting members collectively manage that account’s public registry artifacts. Refer to [Namespaces](/terraform/cloud-docs/public-namespace) for more information. diff --git a/content/terraform-docs-common/docs/registry/index.mdx b/content/terraform-docs-common/docs/registry/index.mdx index 8077b15962..2b5759bf3d 100644 --- a/content/terraform-docs-common/docs/registry/index.mdx +++ b/content/terraform-docs-common/docs/registry/index.mdx @@ -22,10 +22,12 @@ The registry has a number of different categories for modules, providers, and po ## User Account -Anyone interested in publishing can use a GitHub account to sign in to the Terraform Registry. Click the **Sign-in** button, and follow the login prompts to authorize the use of your GitHub account and sign in. Refer to the specific instructions for publishing [modules](/terraform/registry/modules/publish), [providers](/terraform/registry/providers/publishing), and [policy libraries](/terraform/registry/policy-libraries/publishing). +Individuals interested in publishing can use a GitHub account to sign in to the Terraform Registry. Click the **Sign-in** button, and follow the login prompts to authorize the use of your GitHub account and sign in. Refer to the specific instructions for publishing [modules](/terraform/registry/modules/publish), [providers](/terraform/registry/providers/publishing), and [policy libraries](/terraform/registry/policy-libraries/publishing). ![screenshot: terraform registry sign in](/img/docs/user-account.png) +If you are an HCP Terraform user and want to publish and manage modules or providers in the public registry, you can connect a GitHub account to an HCP Terraform organization, letting members collectively manage that account’s public registry artifacts. Refer to [Namespaces](/terraform/cloud-docs/public-namespace) for more information. + ## Getting Help The providers, modules, and policies available on the Terraform Registry are maintained either directly by HashiCorp, by trusted HashiCorp partners, or members of the Terraform community Refer to [Provider Tiers and Namespaces](/terraform/registry/providers#provider-tiers-amp-namespaces) for details. To create issues and contributions in GitHub, click the **Report an issue** link on the provider, module, or policy library's details page: diff --git a/content/terraform-docs-common/img/docs/terraform-mcp-server-flow-dk.png b/content/terraform-docs-common/img/docs/terraform-mcp-server-flow-dk.png new file mode 100644 index 0000000000000000000000000000000000000000..a99ebaa3e91c677059d1d47cd3f7c936733c77b3 GIT binary patch literal 53294 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
ursL*1)MT6~H?qCu~ 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

&tZYQ+FA(~AzF0Nk(Xd#^$eN`9uR6LjGh2~ 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 literal 0 HcmV?d00001 diff --git a/content/terraform-docs-common/img/docs/terraform-mcp-server-flow-lt.png b/content/terraform-docs-common/img/docs/terraform-mcp-server-flow-lt.png new file mode 100644 index 0000000000000000000000000000000000000000..e87feda1deca7c52bdcbfb79082f0ad14832320d GIT binary patch literal 51772 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