Come join Pulumi for the industry's first Cloud Engineering Summit! October 7–8. Save Your Spot

Migrating to Pulumi 2.0

Migrating to 2.0

Upgrading to 2.0 is simple. First, you will install the 2.0 CLI. Then, update each of your Pulumi programs to utilize the new SDK. If you’re using JavaScript or TypeScript, you’ll also need to ensure you’re using invokes asynchronously. We provide detailed instructions on each of these steps below.

Update CLI Scripts

Previously, the Pulumi CLI would assume --yes when used in non-interactive mode (i.e. when pulumi had its output piped to another process). You will now need to explicitly pass in --yes in those scenarios. This affects:

  • pulumi destroy
  • pulumi new
  • pulumi refresh
  • pulumi up

Update Your Pulumi Programs

Update Dependencies

npm install @pulumi/pulumi@^2.0.0

Remove synchronous invokes

Due to inconsistent support between versions of NodeJS, Pulumi 2.0 no longer supports synchronous invokes. As a result, the return value of all getSomething operations are now Promise<Something> values, instead of Something values, and should be processed using .then, async/await or by passing the results to pulumi.output(). Similarly, the StackReference operations getOutputSync and requireOutputSync are no longer supported and you should move to using the Output-based versions of getOutput and requireOutput.

//Before:
const version: string = gcp.container.getEngineVersions().latestMasterVersion;

//After w/ Promise:
const version: Promise<string> = gcp.container.getEngineVersions().then(v => v.latestMasterVersion);

//After w/ Output:
const version: Output<string> = pulumi.output(gcp.container.getEngineVersions()).latestMasterVersion;

Optionally, you can use an async function entrypoint to more easily write async/await code throughout the rest of your program.

Update Dependencies

Modify your requirements.txt file to update the Pulumi SDK and related providers as below:

pulumi>=2.0.0
pulumi-aws>=2.0.0

Then run pip install:

pip install -r requirements.txt

Update Dependencies

Pulumi 2.0 now supports Go modules. In go.mod, you can depend on the Pulumi SDK and related providers as below:

require (
    github.com/pulumi/pulumi/sdk/v2 v2.0.0
    github.com/pulumi/pulumi-aws/sdk/v2/go/aws v2.0.0
)

Then run go mod download

Update Dependencies

Update your package reference to the latest version of the SDK:

<PackageReference Include="Pulumi" Version="2.*" />

Update Invokes

Functions in the Invokes namespace are now obsolete. Instead, use InvokeAsync which hangs off a static class named for the method being invoked.

For example, the following:

var clientConfig = await Pulumi.Azure.Core.Invokes.GetClientConfig();

becomes:

var clientConfig = await Pulumi.Azure.Core.GetClientConfig.InvokeAsync();

Remaining on Pulumi 1.0

We recommend switching to Pulumi 2.0 if possible. We will only push critical security and bug fixes into the 1.x branch. Other fixes, feature enhancements, and new functionality will not be supported in the 1.x branch. In addition, provider updates will only be built against Pulumi 2.0.

If you wish to remain on the 1.x CLI, you can continue to download the CLI by referring to the manual installation instructions and choosing a specific version.

pulumi new will attempt to use the latest versions of the templates, which pull in the 2.0 SDK. You can continue to use the 1.x templates by running pulumi new https://github.com/pulumi/templates/tree/1.x.

Note that previous 1.x templates for Python had >=1.0.0 in requirements.txt. As a result, you may accidentally end up on the 2.x SDK when updating dependencies from the 1.x template. We encourage updating to >=1.0.0,<2.0.0 if you intend to remain on the 1.x releases.