2023-05-15 15:25:28 -07:00

314 lines
11 KiB
Markdown

---
title: "July 7 releases: new pricing, replaceOnChanges, and more"
date: 2021-07-07T08:00:00-07:00
draft: false
meta_desc: "Confluent Cloud, new `skipAwait` in K8s, new `replaceOnChanges` option, restrict `pulumi watch` to paths, and usage-based pricing"
meta_image: meta.png
authors:
- alex-mullans
tags:
- features
- pulumi-releases
---
In this update:
- New and updated cloud providers
- [Pulumi supports Confluent Cloud](/blog/pulumi-release-notes-m58#pulumi-supports-confluent-cloud)
- [GitHub Actions guide in all languages](/blog/pulumi-release-notes-m58#github-actions-guide-in-all-languages)
- [Kubernetes: new `skipAwait` option](/blog/pulumi-release-notes-m58#kubernetes-new-skipawait-option)
- [10 new resources in the Azure Native provider](/blog/pulumi-release-notes-m58#10-new-resources-in-the-azure-native-provider)
- [Google Native provider adds support for enums and more](/blog/pulumi-release-notes-m58#google-native-provider-adds-support-for-enums-and-more)
- Pulumi CLI and core technologies
- [New `replaceOnChanges` resource option](/blog/pulumi-release-notes-m58#new-replaceonchanges-resource-option)
- [`pulumi watch` now supports a `--path` option](/blog/pulumi-release-notes-m58#pulumi-watch-now-supports-a---path-option)
- [Improved Python performance](/blog/pulumi-release-notes-m58#improved-python-performance)
- Pulumi Service and Pulumi.com
- [New usage-based pricing for your whole team](/blog/pulumi-release-notes-m58#new-usage-based-pricing-for-your-whole-team)
<!--more-->
## New and updated cloud providers
### Pulumi supports Confluent Cloud
The new Confluent Cloud provider for Pulumi allows you to manage cloud-native Apache Kafka services with Pulumi infrastructure-as-code.
{{< chooser language "javascript,typescript,python,go,csharp" >}}
{{% choosable language javascript %}}
```javascript
const ccloud = require("@pulumi/confluent")
const env = new ccloud.ConfluentEnvironment("ts-environment");
```
{{% /choosable %}}
{{% choosable language typescript %}}
```typescript
import * as confluent from "@pulumi/confluent";
const env = new ccloud.ConfluentEnvironment("ts-environment");
```
{{% /choosable %}}
{{% choosable language python %}}
```python
import pulumi_confluent as confluent
environment = ccloud.ConfluentEnvironment("py-env")
```
{{% /choosable %}}
{{% choosable language go %}}
```go
package main
import (
"github.com/pulumi/pulumi-confluent/sdk/go/confluent"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
env, err := confluent.NewConfluentEnvironment(ctx, "py-env", nil)
if err != nil {
return err
}
return nil
})
}
```
{{% /choosable %}}
{{% choosable language csharp %}}
```csharp
using System.Collections.Generic;
using System.Threading.Tasks;
using Pulumi;
using Pulumi.Confluent;
class Program
{
static Task Main() =>
Deployment.Run(() => {
var environment = new CCloud.ConfluentEnvironment("csharp-env");
});
}
```
{{% /choosable %}}
{{< /chooser >}}
Get started in the [Confluent Cloud provider docs](/registry/packages/confluent/).
### GitHub Actions guide in all languages
Previously, the GitHub Actions user guide only provided documentation for Node.js projects. We've now updated it to include all Pulumi languages.
{{< chooser language "typescript,python,go,csharp" >}}
{{% choosable language typescript %}}
```yaml
name: Pulumi
on:
- pull_request
jobs:
preview:
name: Preview
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 14.x
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-region: ${{ secrets.AWS_REGION }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- run: npm install
- uses: pulumi/actions@v3
with:
command: preview
stack-name: dev
env:
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
```
{{% /choosable %}}
{{% choosable language python %}}
```yaml
name: Pulumi
on:
- pull_request
jobs:
preview:
name: Preview
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: 3.7
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-region: ${{ secrets.AWS_REGION }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- run: pip install -r requirements.txt
- uses: pulumi/actions@v3
with:
command: preview
stack-name: dev
env:
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
```
{{% /choosable %}}
{{% choosable language go %}}
```yaml
name: Pulumi
on:
- pull_request
jobs:
preview:
name: Preview
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v1
with:
go-version: 1.17.x
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-region: ${{ secrets.AWS_REGION }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- run: go mod download
- uses: pulumi/actions@v3
with:
command: preview
stack-name: dev
env:
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
```
{{% /choosable %}}
{{% choosable language csharp %}}
```yaml
name: Pulumi
on:
- pull_request
jobs:
preview:
name: Preview
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.x
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-region: ${{ secrets.AWS_REGION }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- uses: pulumi/actions@v3
with:
command: preview
stack-name: dev
env:
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
```
{{% /choosable %}}
{{< /chooser >}}
Learn more in the [GitHub Actions User Guide](/docs/using-pulumi/continuous-delivery/github-actions/)
### Kubernetes: new `skipAwait` option
For some Kubernetes use cases, including Helm charts, you may want to be able to turn off all await logic, so that you can use Kubernetes via Pulumi in a way that feels more similar to the default Kubernetes API and `kubectl` experience. Previously, you could achieve this by marking individual entities with a custom annotation to skip the await logic. Now, you can use the new `skipAwait` option on Helm charts and YAML components to turn off the await logic for those charts/components and all of their child resources. Please note that `skipAwait` changes some default Pulumi behaviors: outputs are not populated and incorrect deployments aren't identified. However, in cases where you don't need the result of the chart/component, you can speed up deployments using `skipAwait`.
Learn more at [pulumi/pulumi-kubernetes#1421](https://github.com/pulumi/pulumi-kubernetes/issues/1421)
### 10 new resources in the Azure Native provider
We shipped 5 new versions of the Azure Native provider (1.11.0 through 1.15.0) that collectively added 10 new resources that you can manage with the Azure Native provider, including Azure Arc data services and Azure Event Grid resources.
[See the full list](https://github.com/pulumi/pulumi-azure-native/blob/master/CHANGELOG_OLD.md#1150-2020-07-01)
### Google Native provider adds support for enums and more
The preview of the Google Native provider continues to evolve. We shipped 2 new versions of the Google Native provider (0.3.0 and 0.4.0) that include:
- Refined, shorter resource names that are easier to type and easier to find
- Enum support for all properties exposed as enums in the underlying Google Discovery Documents
[See the full list of updates](https://github.com/pulumi/pulumi-google-native/blob/master/CHANGELOG.md#040-2021-06-16)
## Pulumi CLI and core technologies
In this milestone, we shipped Pulumi versions [3.5.1](https://github.com/pulumi/pulumi/releases/tag/v3.5.1) and [3.6.0](https://github.com/pulumi/pulumi/releases/tag/v3.6.0). The full list of changes in each version is available in the linked changelog; read on to learn about some of the biggest changes.
### New `replaceOnChanges` resource option
Sometimes, you may want to force the replacement of a resource even if the changes you've made to that resource don't indicate that they require a replacement. One example is Kubernetes `CustomResourceDefinition`s: many CRDs can't be updated in place due to forward-incompatibilities, so you may need to force a replacement. Previously, you could do this by changing the physical name of the resource, but there are cases where it is important to keep the physical name the same.
You can use the new `replaceOnChange` resource option to force resource replacement when the specified properties are changed. This can be combined with the existing `deleteBeforeReplace` resource option to force a resource to be deleted before replacement. For example, you can specify that an AWS S3 Bucket resource be replaced every time its index document changes:
```typescript
const bucket = new aws.s3.Bucket("my-bucket", {
website: {
indexDocument: "index2.html",
},
}, { replaceOnChanges: ["website.indexDocument"] });
```
Learn more at [pulumi/pulumi#7226](https://github.com/pulumi/pulumi/pull/7226)
### `pulumi watch` now supports a `--path` option
Previously, the `pulumi watch` command always watched the entire Pulumi project directory (recursively). This caused duplicate updates for developers working in monorepos or developers with application code and infrastructure code in the same directory. Now, you can add a `--path` option to the `pulumi watch` command and specify the exact paths to watch.
```shell
pulumi watch --path path/to/pulumi/code/
```
Learn more at [pulumi/pulumi#6620](https://github.com/pulumi/pulumi/issues/6620)
### Improved Python performance
We've improved the performance of common Pulumi commands like `up` and `preview` for Python programs by removing unnecessary logging and version checks.
Learn more at [pulumi/pulumi#7291](https://github.com/pulumi/pulumi/issues/7291) and [pulumi/pulumi#7292](https://github.com/pulumi/pulumi/issues/7292)
## Pulumi Service and Pulumi.com
### New usage-based pricing for your whole team
We launched Pulumi Team Edition, a new way for teams to adopt and use Pulumi and the Pulumi Service to collaborate on building, managing, and deploying cloud infrastructure as code. Pulumi Team Edition is priced based on the number of cloud resources under management, with a generous free tier to ensure that teams can get up and running with Pulumi Team Edition at no cost.
![Screenshot of new pricing tiers from https://pulumi.com/pricing](pricing-page.png)
Learn more in the [pricing announcement blog post](/blog/announcing-new-usage-based-pricing-for-your-whole-team/)