Fix references to buildx.Image

This commit is contained in:
Bryce Lampe
2024-03-29 11:22:08 -07:00
parent 6efd4b045b
commit da2fecf013
20 changed files with 979 additions and 981 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,11 @@
## Migrating v3 and v4 Image resources
The `buildx.Image` resource provides a superset of functionality over the `Image` resources available in versions 3 and 4 of the Pulumi Docker provider.
Existing `Image` resources can be converted to `build.Image` resources with minor modifications.
The `dockerbuild.Image` resource provides a superset of functionality over the `Image` resources available in versions 3 and 4 of the Pulumi Docker provider.
Existing `Image` resources can be converted to `dockerbuild.Image` resources with minor modifications.
### Behavioral differences
There are several key behavioral differences to keep in mind when transitioning images to the new `buildx.Image` resource.
There are several key behavioral differences to keep in mind when transitioning images to the new `dockerbuild.Image` resource.
#### Previews
@@ -16,8 +16,8 @@ Version `4.x` changed build-on-preview behavior to be opt-in.
By default, `v4.x` `Image` resources do _not_ build during previews, but this behavior can be toggled with the `buildOnPreview` option.
Some users felt this made previews in CI less helpful because they no longer detected bad images by default.
The default behavior of the `buildx.Image` resource has been changed to strike a better balance between CI use cases and manual updates.
By default, Pulumi will now only build `buildx.Image` resources during previews when it detects a CI environment like GitHub Actions.
The default behavior of the `dockerbuild.Image` resource has been changed to strike a better balance between CI use cases and manual updates.
By default, Pulumi will now only build `dockerbuild.Image` resources during previews when it detects a CI environment like GitHub Actions.
Previews run in non-CI environments will not build images.
This behavior is still configurable with `buildOnPreview`.
@@ -26,7 +26,7 @@ This behavior is still configurable with `buildOnPreview`.
Versions `3.x` and `4.x` of the Pulumi Docker provider attempt to push images to remote registries by default.
They expose a `skipPush: true` option to disable pushing.
The `buildx.Image` resource matches the Docker CLI's behavior and does not push images anywhere by default.
The `dockerbuild.Image` resource matches the Docker CLI's behavior and does not push images anywhere by default.
To push images to a registry you can include `push: true` (equivalent to Docker's `--push` flag) or configure an `export` of type `registry` (equivalent to Docker's `--output type=registry`).
Like Docker, if an image is configured without exports you will see a warning with instructions for how to enable pushing, but the build will still proceed normally.
@@ -37,7 +37,7 @@ Version `3.x` of the Pulumi Docker provider supports secrets by way of the `extr
Version `4.x` of the Pulumi Docker provider does not support secrets.
The `buildx.Image` resource supports secrets but does not require those secrets to exist on-disk or in environment variables.
The `dockerbuild.Image` resource supports secrets but does not require those secrets to exist on-disk or in environment variables.
Instead, they should be passed directly as values.
(Please be sure to familiarize yourself with Pulumi's [native secret handling](https://www.pulumi.com/docs/concepts/secrets/).)
Pulumi also provides [ESC](https://www.pulumi.com/product/esc/) to make it easier to share secrets across stacks and environments.
@@ -52,7 +52,7 @@ Version `4.x` exposes a similar parameter `cacheFrom: { images: [...] }` which p
Both versions 3 and 4 require specific environment variables to be set and deviate from Docker's native caching behavior.
This can result in inefficient builds due to unnecessary image pulls, repeated file transfers, etc.
The `buildx.Image` resource delegates all caching behavior to Docker.
The `dockerbuild.Image` resource delegates all caching behavior to Docker.
`cacheFrom` and `cacheTo` options (equivalent to Docker's `--cache-to` and `--cache-from`) are exposed and provide additional cache targets, such as local disk, S3 storage, etc.
#### Outputs
@@ -60,7 +60,7 @@ The `buildx.Image` resource delegates all caching behavior to Docker.
Versions `3.x` and `4.x` of the provider exposed a `repoDigest` output which was a fully qualified tag with digest.
In `4.x` this could also be a single sha256 hash if the image wasn't pushed.
Unlike earlier providers the `buildx.Image` resource can push multiple tags.
Unlike earlier providers the `dockerbuild.Image` resource can push multiple tags.
As a convenience, it exposes a `ref` output consisting of a tag with digest as long as the image was pushed.
If multiple tags were pushed this uses one at random.
@@ -73,7 +73,7 @@ Versions 3 and 4 of Pulumi Docker provider do not delete tags when the `Image` r
The `buidx.Image` will query your registries during `refresh` to ensure the expected tags exist.
If any are missing a subsequent `update` will push them.
When a `buildx.Image` is deleted, it will _attempt_ to also delete any pushed tags.
When a `dockerbuild.Image` is deleted, it will _attempt_ to also delete any pushed tags.
Deletion of remote tags is not guaranteed because not all registries support the manifest `DELETE` API (`docker.io` in particular).
Manifests are _not_ deleted in the same way during updates -- to do so safely would require a full build to determine whether a Pulumi operation should be an update or update-replace.
@@ -81,11 +81,11 @@ Use the [`retainOnDelete: true`](https://www.pulumi.com/docs/concepts/options/re
### Example migration
Examples of "fully-featured" `v3` and `v4` `Image` resources are shown below, along with an example `buildx.Image` resource showing how they would look after migration.
Examples of "fully-featured" `v3` and `v4` `Image` resources are shown below, along with an example `dockerbuild.Image` resource showing how they would look after migration.
The `v3` resource leverages `buildx` via a `DOCKER_BUILDKIT` environment variable and CLI flags passed in with `extraOption`.
After migration, the environment variable is no longer needed and CLI flags are now properties on the `buildx.Image`.
In almost all cases, properties of `buildx.Image` are named after the Docker CLI flag they correspond to.
After migration, the environment variable is no longer needed and CLI flags are now properties on the `dockerbuild.Image`.
In almost all cases, properties of `dockerbuild.Image` are named after the Docker CLI flag they correspond to.
The `v4` resource is less functional than its `v3` counterpart because it lacks the flexibility of `extraOptions`.
It it is shown with parameters similar to the `v3` example for completeness.
@@ -136,8 +136,8 @@ const v3 = new docker.Image("v3-image", {
},
});
// v3 Image after migrating to buildx.Image
const v3Migrated = new docker.buildx.Image("v3-to-buildx", {
// v3 Image after migrating to dockerbuild.Image
const v3Migrated = new dockerbuild.Image("v3-to-buildx", {
tags: ["myregistry.com/user/repo:latest", "local-tag"],
push: true,
dockerfile: {
@@ -195,8 +195,8 @@ const v4 = new docker.Image("v4-image", {
},
});
// v4 Image after migrating to buildx.Image
const v4Migrated = new docker.buildx.Image("v4-to-buildx", {
// v4 Image after migrating to dockerbuild.Image
const v4Migrated = new dockerbuild.Image("v4-to-buildx", {
tags: ["myregistry.com/user/repo:latest"],
push: true,
dockerfile: {

View File

@@ -5,9 +5,9 @@
```typescript
import * as pulumi from "@pulumi/pulumi";
import * as docker from "@pulumi/docker";
import * as dockerbuild from "@pulumi/dockerbuild";
const amd64 = new docker.buildx.Image("amd64", {
const amd64 = new dockerbuild.Image("amd64", {
cacheFrom: [{
registry: {
ref: "docker.io/pulumi/pulumi:cache-amd64",
@@ -15,17 +15,17 @@ const amd64 = new docker.buildx.Image("amd64", {
}],
cacheTo: [{
registry: {
mode: docker.buildx.image.CacheMode.Max,
mode: dockerbuild.CacheMode.Max,
ref: "docker.io/pulumi/pulumi:cache-amd64",
},
}],
context: {
location: "app",
},
platforms: [docker.buildx.image.Platform.Linux_amd64],
platforms: [dockerbuild.Platform.Linux_amd64],
tags: ["docker.io/pulumi/pulumi:3.107.0-amd64"],
});
const arm64 = new docker.buildx.Image("arm64", {
const arm64 = new dockerbuild.Image("arm64", {
cacheFrom: [{
registry: {
ref: "docker.io/pulumi/pulumi:cache-arm64",
@@ -33,17 +33,17 @@ const arm64 = new docker.buildx.Image("arm64", {
}],
cacheTo: [{
registry: {
mode: docker.buildx.image.CacheMode.Max,
mode: dockerbuild.CacheMode.Max,
ref: "docker.io/pulumi/pulumi:cache-arm64",
},
}],
context: {
location: "app",
},
platforms: [docker.buildx.image.Platform.Linux_arm64],
platforms: [dockerbuild.Platform.Linux_arm64],
tags: ["docker.io/pulumi/pulumi:3.107.0-arm64"],
});
const index = new docker.buildx.Index("index", {
const index = new dockerbuild.Index("index", {
sources: [
amd64.ref,
arm64.ref,
@@ -54,43 +54,43 @@ export const ref = index.ref;
```
```python
import pulumi
import pulumi_docker as docker
import pulumi_dockerbuild as dockerbuild
amd64 = docker.buildx.Image("amd64",
cache_from=[docker.buildx.CacheFromArgs(
registry=docker.buildx.CacheFromRegistryArgs(
amd64 = dockerbuild.Image("amd64",
cache_from=[dockerbuild.CacheFromArgs(
registry=dockerbuild.CacheFromRegistryArgs(
ref="docker.io/pulumi/pulumi:cache-amd64",
),
)],
cache_to=[docker.buildx.CacheToArgs(
registry=docker.buildx.CacheToRegistryArgs(
mode=docker.buildx.image.CacheMode.MAX,
cache_to=[dockerbuild.CacheToArgs(
registry=dockerbuild.CacheToRegistryArgs(
mode=dockerbuild.CacheMode.MAX,
ref="docker.io/pulumi/pulumi:cache-amd64",
),
)],
context=docker.buildx.BuildContextArgs(
context=dockerbuild.BuildContextArgs(
location="app",
),
platforms=[docker.buildx.image.Platform.LINUX_AMD64],
platforms=[dockerbuild.Platform.LINUX_AMD64],
tags=["docker.io/pulumi/pulumi:3.107.0-amd64"])
arm64 = docker.buildx.Image("arm64",
cache_from=[docker.buildx.CacheFromArgs(
registry=docker.buildx.CacheFromRegistryArgs(
arm64 = dockerbuild.Image("arm64",
cache_from=[dockerbuild.CacheFromArgs(
registry=dockerbuild.CacheFromRegistryArgs(
ref="docker.io/pulumi/pulumi:cache-arm64",
),
)],
cache_to=[docker.buildx.CacheToArgs(
registry=docker.buildx.CacheToRegistryArgs(
mode=docker.buildx.image.CacheMode.MAX,
cache_to=[dockerbuild.CacheToArgs(
registry=dockerbuild.CacheToRegistryArgs(
mode=dockerbuild.CacheMode.MAX,
ref="docker.io/pulumi/pulumi:cache-arm64",
),
)],
context=docker.buildx.BuildContextArgs(
context=dockerbuild.BuildContextArgs(
location="app",
),
platforms=[docker.buildx.image.Platform.LINUX_ARM64],
platforms=[dockerbuild.Platform.LINUX_ARM64],
tags=["docker.io/pulumi/pulumi:3.107.0-arm64"])
index = docker.buildx.Index("index",
index = dockerbuild.Index("index",
sources=[
amd64.ref,
arm64.ref,
@@ -102,17 +102,17 @@ pulumi.export("ref", index.ref)
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Docker = Pulumi.Docker;
using Dockerbuild = Pulumi.Dockerbuild;
return await Deployment.RunAsync(() =>
{
var amd64 = new Docker.Buildx.Image("amd64", new()
var amd64 = new Dockerbuild.Image("amd64", new()
{
CacheFrom = new[]
{
new Docker.Buildx.Inputs.CacheFromArgs
new Dockerbuild.Inputs.CacheFromArgs
{
Registry = new Docker.Buildx.Inputs.CacheFromRegistryArgs
Registry = new Dockerbuild.Inputs.CacheFromRegistryArgs
{
Ref = "docker.io/pulumi/pulumi:cache-amd64",
},
@@ -120,22 +120,22 @@ return await Deployment.RunAsync(() =>
},
CacheTo = new[]
{
new Docker.Buildx.Inputs.CacheToArgs
new Dockerbuild.Inputs.CacheToArgs
{
Registry = new Docker.Buildx.Inputs.CacheToRegistryArgs
Registry = new Dockerbuild.Inputs.CacheToRegistryArgs
{
Mode = Docker.Buildx.Image.CacheMode.Max,
Mode = Dockerbuild.CacheMode.Max,
Ref = "docker.io/pulumi/pulumi:cache-amd64",
},
},
},
Context = new Docker.Buildx.Inputs.BuildContextArgs
Context = new Dockerbuild.Inputs.BuildContextArgs
{
Location = "app",
},
Platforms = new[]
{
Docker.Buildx.Image.Platform.Linux_amd64,
Dockerbuild.Platform.Linux_amd64,
},
Tags = new[]
{
@@ -143,13 +143,13 @@ return await Deployment.RunAsync(() =>
},
});
var arm64 = new Docker.Buildx.Image("arm64", new()
var arm64 = new Dockerbuild.Image("arm64", new()
{
CacheFrom = new[]
{
new Docker.Buildx.Inputs.CacheFromArgs
new Dockerbuild.Inputs.CacheFromArgs
{
Registry = new Docker.Buildx.Inputs.CacheFromRegistryArgs
Registry = new Dockerbuild.Inputs.CacheFromRegistryArgs
{
Ref = "docker.io/pulumi/pulumi:cache-arm64",
},
@@ -157,22 +157,22 @@ return await Deployment.RunAsync(() =>
},
CacheTo = new[]
{
new Docker.Buildx.Inputs.CacheToArgs
new Dockerbuild.Inputs.CacheToArgs
{
Registry = new Docker.Buildx.Inputs.CacheToRegistryArgs
Registry = new Dockerbuild.Inputs.CacheToRegistryArgs
{
Mode = Docker.Buildx.Image.CacheMode.Max,
Mode = Dockerbuild.CacheMode.Max,
Ref = "docker.io/pulumi/pulumi:cache-arm64",
},
},
},
Context = new Docker.Buildx.Inputs.BuildContextArgs
Context = new Dockerbuild.Inputs.BuildContextArgs
{
Location = "app",
},
Platforms = new[]
{
Docker.Buildx.Image.Platform.Linux_arm64,
Dockerbuild.Platform.Linux_arm64,
},
Tags = new[]
{
@@ -180,7 +180,7 @@ return await Deployment.RunAsync(() =>
},
});
var index = new Docker.Buildx.Index("index", new()
var index = new Dockerbuild.Index("index", new()
{
Sources = new[]
{
@@ -201,33 +201,33 @@ return await Deployment.RunAsync(() =>
package main
import (
"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx"
"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
amd64, err := buildx.NewImage(ctx, "amd64", &buildx.ImageArgs{
CacheFrom: buildx.CacheFromArray{
&buildx.CacheFromArgs{
Registry: &buildx.CacheFromRegistryArgs{
amd64, err := dockerbuild.NewImage(ctx, "amd64", &dockerbuild.ImageArgs{
CacheFrom: dockerbuild.CacheFromArray{
&dockerbuild.CacheFromArgs{
Registry: &dockerbuild.CacheFromRegistryArgs{
Ref: pulumi.String("docker.io/pulumi/pulumi:cache-amd64"),
},
},
},
CacheTo: buildx.CacheToArray{
&buildx.CacheToArgs{
Registry: &buildx.CacheToRegistryArgs{
Mode: buildx.CacheModeMax,
CacheTo: dockerbuild.CacheToArray{
&dockerbuild.CacheToArgs{
Registry: &dockerbuild.CacheToRegistryArgs{
Mode: dockerbuild.CacheModeMax,
Ref: pulumi.String("docker.io/pulumi/pulumi:cache-amd64"),
},
},
},
Context: &buildx.BuildContextArgs{
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("app"),
},
Platforms: buildx.PlatformArray{
buildx.Platform_Linux_amd64,
Platforms: dockerbuild.PlatformArray{
dockerbuild.Platform_Linux_amd64,
},
Tags: pulumi.StringArray{
pulumi.String("docker.io/pulumi/pulumi:3.107.0-amd64"),
@@ -236,27 +236,27 @@ func main() {
if err != nil {
return err
}
arm64, err := buildx.NewImage(ctx, "arm64", &buildx.ImageArgs{
CacheFrom: buildx.CacheFromArray{
&buildx.CacheFromArgs{
Registry: &buildx.CacheFromRegistryArgs{
arm64, err := dockerbuild.NewImage(ctx, "arm64", &dockerbuild.ImageArgs{
CacheFrom: dockerbuild.CacheFromArray{
&dockerbuild.CacheFromArgs{
Registry: &dockerbuild.CacheFromRegistryArgs{
Ref: pulumi.String("docker.io/pulumi/pulumi:cache-arm64"),
},
},
},
CacheTo: buildx.CacheToArray{
&buildx.CacheToArgs{
Registry: &buildx.CacheToRegistryArgs{
Mode: buildx.CacheModeMax,
CacheTo: dockerbuild.CacheToArray{
&dockerbuild.CacheToArgs{
Registry: &dockerbuild.CacheToRegistryArgs{
Mode: dockerbuild.CacheModeMax,
Ref: pulumi.String("docker.io/pulumi/pulumi:cache-arm64"),
},
},
},
Context: &buildx.BuildContextArgs{
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("app"),
},
Platforms: buildx.PlatformArray{
buildx.Platform_Linux_arm64,
Platforms: dockerbuild.PlatformArray{
dockerbuild.Platform_Linux_arm64,
},
Tags: pulumi.StringArray{
pulumi.String("docker.io/pulumi/pulumi:3.107.0-arm64"),
@@ -265,7 +265,7 @@ func main() {
if err != nil {
return err
}
index, err := buildx.NewIndex(ctx, "index", &buildx.IndexArgs{
index, err := dockerbuild.NewIndex(ctx, "index", &dockerbuild.IndexArgs{
Sources: pulumi.StringArray{
amd64.Ref,
arm64.Ref,
@@ -301,7 +301,7 @@ resources:
- linux/amd64
tags:
- docker.io/pulumi/pulumi:3.107.0-amd64
type: docker:buildx/image:Image
type: dockerbuild:Image
arm64:
properties:
cacheFrom:
@@ -317,14 +317,14 @@ resources:
- linux/arm64
tags:
- docker.io/pulumi/pulumi:3.107.0-arm64
type: docker:buildx/image:Image
type: dockerbuild:Image
index:
properties:
sources:
- ${amd64.ref}
- ${arm64.ref}
tag: docker.io/pulumi/pulumi:3.107.0
type: docker:buildx/image:Index
type: dockerbuild:Index
runtime: yaml
```
```java
@@ -333,15 +333,15 @@ package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.docker.buildx.Image;
import com.pulumi.docker.buildx.ImageArgs;
import com.pulumi.docker.buildx.inputs.CacheFromArgs;
import com.pulumi.docker.buildx.inputs.CacheFromRegistryArgs;
import com.pulumi.docker.buildx.inputs.CacheToArgs;
import com.pulumi.docker.buildx.inputs.CacheToRegistryArgs;
import com.pulumi.docker.buildx.inputs.BuildContextArgs;
import com.pulumi.docker.buildx.Index;
import com.pulumi.docker.buildx.IndexArgs;
import com.pulumi.dockerbuild.Image;
import com.pulumi.dockerbuild.ImageArgs;
import com.pulumi.dockerbuild.inputs.CacheFromArgs;
import com.pulumi.dockerbuild.inputs.CacheFromRegistryArgs;
import com.pulumi.dockerbuild.inputs.CacheToArgs;
import com.pulumi.dockerbuild.inputs.CacheToRegistryArgs;
import com.pulumi.dockerbuild.inputs.BuildContextArgs;
import com.pulumi.dockerbuild.Index;
import com.pulumi.dockerbuild.IndexArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;