Cloudsmith Documentation Hub

Welcome to the Cloudsmith Documentation/Help Hub. You'll find comprehensive guides and documentation to help you start working with Cloudsmith as quickly as possible, as well as support if you get stuck. Let's jump right in!

Get Started    

Terraform Provider

How to integrate Terraform with Cloudsmith

Cloudsmith is a verified provider on the Terraform Registry.

cloudsmith-terraform-provider
Terraform Provider for Cloudsmith

Installation

To install the Cloudsmith Terraform Provider, add the following to the required_providers in your Terraform module:

  required_providers {
    cloudsmith = {
      source = "cloudsmith-io/cloudsmith"
      version = "0.0.5"
    }
  }

You also need to add your Cloudsmith API Key, for use by the provider:

provider "cloudsmith" {
    api_key = "API-KEY"
}

You then run terraform init and Terraform will automatically install the provider. To specify a particular provider version when installing providers, see the Terraform documentation on provider versioning.

Data Sources

namespace

The namespace data source allows fetching of metadata about a given Cloudsmith namespace. The fetched data can be used to resolve permanent identifiers from a namespace's user-facing name. These identifiers can then be passed to other resources to allow more consistent identification as user-facing names can change.

data "cloudsmith_namespace" "my_namespace" {
    slug = "my-namespace"
}
ArgumentDescriptionRequired
slugThe slug identifies the namespace in URIsYes

Resources

repository

The repository resource allows the creation and management of package repositories within a Cloudsmith namespace. Repositories store packages and are the main entities with which Cloudsmith users interact.

resource "cloudsmith_repository" "my_repository" {
    name        = "My Repository"
    namespace   = "${data.cloudsmith_namespace.my_namespace.slug_perm}"
    description = "A certifiably-awesome private package repository"
}
ArgumentDescriptionRequired
nameA descriptive name for the repository.Yes
namespaceNamespace / account to which this repository belongs.Yes
descriptionA description of the repository's purpose/contents.No
index_filesIf checked, files contained in packages will be indexed, which increase the synchronisation time required for packages. Note that it is recommended you keep this enabled unless the synchronisation time is significantly impacted.No
repository_typePrivate repositories are visible only to users that have been granted access. Public repositories are visible to all Cloudsmith users.No
slugThe slug identifies the repository in URIs.No
storage_regionThe Cloudsmith region in which package files are stored.No
wait_for_deletionIf true, terraform will wait for a repository to be permanently deleted before finishing.No

See the repository documentation for more information on creating and managing repositories.

entitlement

The entitlement resource allows the creation and management of Entitlement tokens for a Cloudsmith repository. Entitlement tokens grant read-only access to a repository and can be configured with a number of custom restrictions if necessary.

resource "cloudsmith_entitlement" "my_entitlement" {
    name       = "Entitlement Token 1"
    namespace  = "${cloudsmith_repository.test.namespace}"
    repository = "${cloudsmith_repository.test.slug_perm}"
}
ArgumentDescriptionRequired
nameA descriptive name for the tokenYes
namespaceNamespace / Account to which this token belongsYes
repositoryRepository to which this token belongsYes
tokenThe literal string value of the token to be createdNo
is_activeIf true, the token will be enabled and will allow downloads based on configured restrictions (if any).No
limit_date_range_fromThe starting date/time the token is allowed to be used from.No
limit_date_range_toThe ending date/time the token is allowed to be used to.No
limit_num_clientsThe maximum number of unique clients allowed for the token.No
limit_num_downloadsThe maximum number of downloads allowed for the token.No
limit_package_queryThe package-based search query to apply to restrict downloads to. This uses the same syntax as the standard search used for repositories, and also supports boolean logic operators such as OR/AND/NOT and parentheses for grouping. This will still allow access to non-package files, such as metadata.No
limit_path_queryThe path-based search query to apply to restrict downloads to. This supports boolean logic operators such as OR/AND/NOT and parentheses for grouping. The path evaluated does not include the domain name, the namespace, the entitlement code used, the package format, etc. and it always starts with a forward slash.No

Please see the Entitlements documentation for more details on managing entitlement tokens and restrictions.

Example Module

A complete, but minimal, example of a Terraform module that uses the Cloudsmith Provider to create a repository and an Entitlement Token (with some basic token restrictions) is:

terraform {
  required_providers {
    cloudsmith = {
      source = "cloudsmith-io/cloudsmith"
      version = "0.0.5"
    }
  }
}

provider "cloudsmith" {
    api_key = "abcdefghijlkl1234567890"
}

data "cloudsmith_namespace" "demo-organization {
    slug = "demo-org"
}

resource "cloudsmith_repository" "terraform-demo" {
    description = "Example repo provisioned by Terraform"
    name        = "Terraform Demo"
    namespace   = "${data.cloudsmith_namespace.demo.slug_perm}"
    slug        = "terraform-demo"
    repository_type   = "Private"
}

resource "cloudsmith_entitlement" "demo-entitlement" {
    name       = "Token 1"
    namespace  = "${cloudsmith_repository.terraform-demo.namespace}"
    repository = "${cloudsmith_repository.terraform-demo.slug_perm}"
    limit_num_downloads = "15"
    limit_num_clients ="1"
    limit_package_query = "name:,my-package"
}

Updated 2 months ago


Terraform Provider


How to integrate Terraform with Cloudsmith

Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.