Pulumi Release Notes: CED Launches, Skip Checkpoints flag, Automation API NodeJS parallel inline programs, and much more!

Posted on

In addition to our Cloud Engineering Days launches, we have been busy shipping improvements in the last 2 months. Let’s walk through the release highlights across Pulumi engineering areas from September and October. If you want to learn more between release blogs, follow the CLI improvements in the pulumi/pulumi repo changelog and Pulumi Service features in the new features blogs.

Cloud Engineering Days Launches

In the Pulumi Cloud Engineering Days 2022 we are announced a set of important new advancements in the Pulumi platform designed to help organizations scale with their infrastructure as code needs. These announcements were as follows:

  • Pulumi Deployments: The Pulumi Service now supports executing infrastructure deployments as a managed service, driven by click-to-deploy in the Console, Git push-to-deploy from GitHub, programmatic deployments via the Pulumi Service REST API as well as automation via the Pulumi Automation API. Pulumi Deployments enables organizations to scale up their infrastructure automation. Learn more in the Pulumi Service section below!
  • Pulumi YAML GA: In addition to supporting rich general purpose programming languages like TypeScript, Python, Go, .NET and Java, Pulumi added support last May for Pulumi YAML as a simple, declarative interface for accessing the full breadth of the Pulumi Universal Infrastructure as Code platform. Pulumi YAML is now Generally Available as part of its 1.0 release, enabling everyone in an organization to use Pulumi to manage cloud infrastructure.
  • Architecture Templates: New templates providing architecture-specific starting points for the most common infrastructure as code use cases - Containerized Services, Kubernetes Clusters, Serverless Applications, Static Websites and Virtual Machines - available across all major cloud platforms and supported languages.
  • Project Level Configuration: As cloud infrastructure projects grow in complexity, Pulumi provides many tools to manage the complexity of the software that defines these projects. But the configuration of that software also grows in complexity. New support for Project-Level Configuration across all Pulumi languages makes it easier to manage complex configuration as cloud projects scale up.

πŸ‘‰ Learn more in the Cloud Engineering Days Announcements blog.

Cloud Providers and Packages

New resources in our providers

We shipped new versions of the AWS Native provider, Google Native provider and the Azure Native provider that added support for 698 new resources in the last two months. 17 new resources were added to Google Native, 662 when including IAM binding and IAM member resources, 29 resources were added to the AWS Native provider and 7 were added to the Azure Native provider.

Pulumi+Kubernetes Improvements

In October we announced a set of major updates which deepen and extend Pulumi’s support for Kubernetes and the Kubernetes ecosystem. Here are a few of these exciting enhancements:

πŸ‘‰ Learn more in the Pulumi+Kubernetes: New Flux Integration and Inline Programs blog.

Pulumi CLI and core technologies

Pulumi CLI now displays time elapsed per resource

When you modify a resource the Pulumi CLI will display the time elapsed so you can determine how long the modification elapsed for. This change helps surface for each resource the time it takes to create or modify allowing you to plan for it next time. See it in action below!

Watch it in action

πŸ‘‰ Learn more in the Elapsed Time per Resource blog post and in the resource creation times GitHub issue.

Automation API NodeJS parallel inline programs

Automation API now supports parallel execution of NodeJS inline programs in addition to the existing Python inline program support. Now users can run multiple NodeJS Pulumi programs in parallel when they are using Automation API. It uses NodeJS AsyncLocalContext to isolate state away from process environments and into context-specific stores owned by LocalWorkspaces. This functionality is also supported in Python and .NET.

πŸ‘‰ Learn more in the support parallel execution of NodeJS inline programs GitHub issue.

New –remove flag for pulumi destroy

A pulumi destroy operation destroys all existing resources in the stack, but not the stack itself. If you then wanted to delete the stack itself, once all the resources were destroyed, you would run a [pulumi stack rm]. A community member, mrod-io added a flag for pulumi destroy for when you want to remove the stack after its resources are destroyed: pulumi destroy --remove.

See it in action below:

meagancojocar@Meagans-MacBook-Pro demo % pulumi destroy --remove
Previewing destroy (demo/dev)

View Live: https://app.pulumi.com/meagan/demo/dev/previews/632658ed-41e0-411d-b8a8-f41cc6122ef4

     Type                 Name                  Plan       
 -   pulumi:pulumi:Stack  dev                   delete     
 -   └─ aws:s3:Bucket     my-bucket             delete     
 
Outputs:
  - bucketName: "my-bucket-ad305ba"

Resources:
    - 2 to delete

Do you want to perform this destroy? yes
Destroying (demo/dev)

πŸ‘‰ Learn more in the Add –remove as an option for pulumi destroy GitHub issue.

Add Output.format to the Python SDK

We added Output.format to the Python SDK to match helper methods in our other SDKs. Most languages have a standard way to format a string (String.Format in C#, fmt.Sprintf in Go, etc) but you can’t use those functions with our Output values. We have added a format method that’s similar to each language’s normal format method, but with support for outputs. We have added Output.format in Python which matches the standard Python str.format method. This is similar to how we have interpolate in TypeScript, and Output.Format in C#.

πŸ‘‰ Learn more in the Add Output.format to python SDK pull request.

Cloning Pulumi templates from Azure DevOps

We now support cloning Pulumi templates (pulumi new) from Azure DevOps repositories. When given a URL with a hostname of dev.azure.com, it will use system-installed Git and will clone the master/main branch.

Skip Checkpoints Experimental Flag

We have added a new experimental flag to improve performance for certain use cases. This flag makes Pulumi skip saving state checkpoints as it modifies resources and instead only save the final state of a deployment. This is an experimental feature that also requires an PULUMI_EXPERIMENTAL=true environment variable to be set. Using the feature introduces risk that in the case of network disconnect or crash state edits will be lost and may require manual recovery. When this risk is acceptable, using the feature can speed up Pulumi deployment times. As it is in experimental we may make changes to how it has been implemented down the track.

πŸ‘‰ Learn more by reviewing the Skip checkpoints pull request.

Token Authentication in Go Providers

Thank you to community member @aohoy for adding support for token authentication in the Go providers that use Git. You can now authenticated requests by tokens such as https://auth:token@gitlab.example.com/group/proj.git/tree/v0.0.0/path.

πŸ‘‰ Learn more by reviewing the Add token to Git Go module pull request.

Bump TypeScript version from v3.7.3 to v3.8.3

We updated the vendored version of TypeScript in the NodeJS SDK and runtime from v.3.7.3 to v3.8.3. Updating TypeScript versions enables you to use newer TypeScript features, such as the import type and export type syntax, which is required to use OpenTelemetry.

πŸ‘‰ Learn more by reviewing the Bump TSC version to 3.8.3 pull request.

Support lazy-loading Node modules

We now have opt-in support for generating lazy load code for Node modules. Modules that define functions and resources are loaded lazily when you opt-in. Generated code may use import type .. form when importing enums (“useTypeOnlyReferences” opt-in flag in schema). We plan to lazy-load Node modules in Azure Mative and other large Pulumi Packages to improve performance when using these libraries.

πŸ‘‰ Learn more by reviewing the Implement support for lazy-loaded Node modules pull request.

Pulumi Service & Pulumi.com

Pulumi Deployments

With Pulumi Deployments, you can run a Pulumi infrastructure as code action (a preview, update, destroy or refresh) inside Pulumi’s managed service. Pulumi provides scalability, observability, and security for deployments. It consists of five components:

  1. The Deployments REST API - A fully managed REST API to execute Pulumi programs with the Pulumi Service. This includes APIs to observe your deployment and all associated logs.
  2. Deployment Visualization - A dashboard for deployment observability including deployment status, logs, and queueing via the Pulumi Service console.
  3. Click to Deploy - Deploy infrastructure with the click of a button from the Pulumi Service console.
  4. Git push to Deploy - Configure automatic infrastructure deployments in response to git push events by installing and configuring the Pulumi GitHub App.
  5. Remote Automation API - Our strongly typed infrastructure orchestration technology can now run deployments remotely in the cloud.

Click to Deploy Click to Refresh in Service

Pulumi Deployments removes the cloud as a bottleneck and unlocks it as an accelerant for your business. It is available in preview today. Deployments are free during the preview, with usage-based pricing to come. Check out these resources to get started today:

πŸ‘‰ Learn more in the Pulumi Deployments launch blog post.

Architecture Templates Support

We added Architecture Templates support to the new project experience in the Pulumi Service console. Now in addition to selecting your cloud provider and language of choice you can select a template for your new project. We currently have Static Website, Serverless, Container Service, Virtual Machine, Kubernetes cluster and web application templates, with more to come!

Arch Templates in Service