# pulumi

## Description

**EXPERIMENTAL**

This provider allows you to integrate [Pulumi](https://pulumi.com) stacks into your Garden project, via [`pulumi` Deploy actions](https://docs.garden.io/reference/action-types/deploy/pulumi).

Below is the full schema reference for the provider configuration..

The reference is divided into two sections. The [first section](#complete-yaml-schema) contains the complete YAML schema, and the [second section](#configuration-keys) describes each schema key.

## Complete YAML Schema

The values in the schema below are the default values.

```yaml
providers:
  - # The name of the provider plugin to use.
    name:

    # List other providers that should be resolved before this one.
    dependencies: []

    # If specified, this provider will only be used in the listed environments. Note that an empty array effectively
    # disables the provider. To use a provider in all environments, omit this field.
    environments:

    preInit:
      # A script to run before the provider is initialized. This is useful for performing any provider-specific setup
      # outside of Garden. For example, you can use this to perform authentication, such as authenticating with a
      # Kubernetes cluster provider.
      # The script will always be run from the project root directory.
      # Note that provider statuses are cached, so this script will generally only be run once, but you can force a
      # re-run by setting `--force-refresh` on any Garden command that uses the provider.
      runScript:

    # The version of pulumi to use. Set to `null` to use whichever version of `pulumi` is on your PATH, or provide
    # an absolute path to a terraform binary.
    version: 3.122.0

    # Overrides the default plan directory path used when deploying with the `deployFromPreview` option for pulumi
    # deploy actions.
    #
    # Must be a relative path to a directory inside the project root.
    #
    # This option can be useful when you want to provide a folder of pre-approved pulumi plans to a CI pipeline step.
    previewDir:

    # The name of the pulumi organization to use. This option can also be set on the deploy action level, in which
    # case it
    # overrides this provider-level option. Note that setting the organization name is only necessary when using
    # pulumi managed backend with an organization.
    orgName:

    # The URL of the state backend endpoint used. This option can also be set on the deploy action level, in which
    # case it
    # overrides this  provider-level option. Set this option as per list of available self-managed state backends on
    # https://www.pulumi.com/docs/intro/concepts/state/#using-a-self-managed-backend
    backendURL: https://api.pulumi.com

    # Sets the maximum task concurrency for the tasks generated by the pulumi plugin commands (e.g. when running
    # `garden plugins pulumi preview`).
    #
    # Note: This limit is not applied when running built-in commands (e.g. `garden deploy`).
    pluginTaskConcurrencyLimit: 5

    # If set to true, the deploy action will use the new Pulumi varfile schema, which does not nest all variables
    # under
    # the 'config' key automatically like the old schema. This allow setting variables at the root level of the
    # varfile
    # that don't belong to the 'config' key. Example:
    # config:
    #   myVar: value
    # secretsprovider: gcpkms://projects/xyz/locations/global/keyRings/pulumi/cryptoKeys/pulumi-secrets
    # For more information see [this guide on pulumi varfiles and
    # variables](https://docs.garden.io/pulumi-plugin/about#pulumi-varfile-schema)
    useNewPulumiVarfileSchema: false
```

## Configuration Keys

### `providers[]`

| Type            | Default | Required |
| --------------- | ------- | -------- |
| `array[object]` | `[]`    | No       |

### `providers[].name`

[providers](#providers) > name

The name of the provider plugin to use.

| Type     | Required |
| -------- | -------- |
| `string` | Yes      |

Example:

```yaml
providers:
  - name: "local-kubernetes"
```

### `providers[].dependencies[]`

[providers](#providers) > dependencies

List other providers that should be resolved before this one.

| Type            | Default | Required |
| --------------- | ------- | -------- |
| `array[string]` | `[]`    | No       |

Example:

```yaml
providers:
  - dependencies:
      - exec
```

### `providers[].environments[]`

[providers](#providers) > environments

If specified, this provider will only be used in the listed environments. Note that an empty array effectively disables the provider. To use a provider in all environments, omit this field.

| Type            | Required |
| --------------- | -------- |
| `array[string]` | No       |

Example:

```yaml
providers:
  - environments:
      - dev
      - stage
```

### `providers[].preInit`

[providers](#providers) > preInit

| Type     | Required |
| -------- | -------- |
| `object` | No       |

### `providers[].preInit.runScript`

[providers](#providers) > [preInit](#providerspreinit) > runScript

A script to run before the provider is initialized. This is useful for performing any provider-specific setup outside of Garden. For example, you can use this to perform authentication, such as authenticating with a Kubernetes cluster provider. The script will always be run from the project root directory. Note that provider statuses are cached, so this script will generally only be run once, but you can force a re-run by setting `--force-refresh` on any Garden command that uses the provider.

| Type     | Required |
| -------- | -------- |
| `string` | No       |

### `providers[].version`

[providers](#providers) > version

The version of pulumi to use. Set to `null` to use whichever version of `pulumi` is on your PATH, or provide an absolute path to a terraform binary.

| Type                         | Default     | Required |
| ---------------------------- | ----------- | -------- |
| `string \| posixPath \| any` | `"3.122.0"` | No       |

### `providers[].previewDir`

[providers](#providers) > previewDir

Overrides the default plan directory path used when deploying with the `deployFromPreview` option for pulumi deploy actions.

Must be a relative path to a directory inside the project root.

This option can be useful when you want to provide a folder of pre-approved pulumi plans to a CI pipeline step.

| Type        | Required |
| ----------- | -------- |
| `posixPath` | No       |

### `providers[].orgName`

[providers](#providers) > orgName

The name of the pulumi organization to use. This option can also be set on the deploy action level, in which case it overrides this provider-level option. Note that setting the organization name is only necessary when using pulumi managed backend with an organization.

| Type     | Required |
| -------- | -------- |
| `string` | No       |

### `providers[].backendURL`

[providers](#providers) > backendURL

The URL of the state backend endpoint used. This option can also be set on the deploy action level, in which case it overrides this provider-level option. Set this option as per list of available self-managed state backends on <https://www.pulumi.com/docs/intro/concepts/state/#using-a-self-managed-backend>

| Type     | Default                    | Required |
| -------- | -------------------------- | -------- |
| `string` | `"https://api.pulumi.com"` | No       |

### `providers[].pluginTaskConcurrencyLimit`

[providers](#providers) > pluginTaskConcurrencyLimit

Sets the maximum task concurrency for the tasks generated by the pulumi plugin commands (e.g. when running `garden plugins pulumi preview`).

Note: This limit is not applied when running built-in commands (e.g. `garden deploy`).

| Type     | Default | Required |
| -------- | ------- | -------- |
| `number` | `5`     | No       |

### `providers[].useNewPulumiVarfileSchema`

[providers](#providers) > useNewPulumiVarfileSchema

If set to true, the deploy action will use the new Pulumi varfile schema, which does not nest all variables under the 'config' key automatically like the old schema. This allow setting variables at the root level of the varfile that don't belong to the 'config' key. Example:

```
config:
  myVar: value
secretsprovider: gcpkms://projects/xyz/locations/global/keyRings/pulumi/cryptoKeys/pulumi-secrets
```

For more information see [this guide on pulumi varfiles and variables](https://docs.garden.io/pulumi-plugin/about#pulumi-varfile-schema)

| Type      | Default | Required |
| --------- | ------- | -------- |
| `boolean` | `false` | No       |
