diff --git a/Makefile b/Makefile index 9d526f0..f7ff863 100644 --- a/Makefile +++ b/Makefile @@ -172,14 +172,12 @@ build_dotnet: # Required by CI ${SCHEMA_PATH}: bin/${PROVIDER} pulumi package get-schema bin/${PROVIDER} > $(SCHEMA_PATH) -bin/${PROVIDER}: $(shell find ./provider -name '*.go') go.mod +bin/${PROVIDER}: $(shell find ./provider -name '*.go') go.mod docs (cd provider && go build -o ../bin/${PROVIDER} -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER)) bin/pulumi-gen-${PACK}: # Required by CI touch bin/pulumi-gen-${PACK} -$(shell find . -name '*.go'): - go.mod: $(shell find . -name '*.go') go.sum: go.mod go mod tidy @@ -245,6 +243,6 @@ sdk/java: $(PULUMI) bin/${PROVIDER} cd ${TMPDIR}/java/ && gradle --console=plain build mv -f ${TMPDIR}/java ${WORKING_DIR}/sdk/. -docs: $(shell find docs/yaml -type f) +docs: $(shell find docs/yaml -type f) $(shell find ./provider/internal/embed -name '*.md') go generate docs/generate.go @touch docs diff --git a/docs/yaml/image-examples.yaml b/docs/yaml/image-examples.yaml index 2306afe..2dcc8ca 100644 --- a/docs/yaml/image-examples.yaml +++ b/docs/yaml/image-examples.yaml @@ -6,7 +6,7 @@ resources: ecr-repository: type: aws:ecr:Repository my-image: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: tags: - ${ecr-repository.repositoryUrl}:latest @@ -36,7 +36,7 @@ runtime: yaml description: Multi-platform image resources: image: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "app" @@ -49,7 +49,7 @@ runtime: yaml description: Registry export resources: image: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: tags: - "docker.io/pulumi/pulumi:3.107.0" @@ -68,7 +68,7 @@ runtime: yaml description: Caching resources: image: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "app" @@ -85,7 +85,7 @@ runtime: yaml description: Docker Build Cloud resources: image: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "app" @@ -98,7 +98,7 @@ runtime: yaml description: Build arguments resources: image: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "app" @@ -110,7 +110,7 @@ runtime: yaml description: Build target resources: image: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "app" @@ -121,7 +121,7 @@ runtime: yaml description: Named contexts resources: image: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: app @@ -134,7 +134,7 @@ runtime: yaml description: Remote context resources: image: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile" @@ -145,7 +145,7 @@ runtime: yaml description: Inline Dockerfile resources: image: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: dockerfile: inline: | @@ -159,7 +159,7 @@ runtime: yaml description: Remote context resources: image: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: dockerfile: location: app/Dockerfile @@ -171,7 +171,7 @@ runtime: yaml description: Local export resources: image: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "app" diff --git a/docs/yaml/index-examples.yaml b/docs/yaml/index-examples.yaml index 4bac5b6..9a8eaa1 100644 --- a/docs/yaml/index-examples.yaml +++ b/docs/yaml/index-examples.yaml @@ -3,7 +3,7 @@ description: Multi-platform registry caching runtime: yaml resources: arm64: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "app" @@ -20,7 +20,7 @@ resources: ref: "docker.io/pulumi/pulumi:cache-arm64" amd64: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "app" @@ -37,7 +37,7 @@ resources: ref: "docker.io/pulumi/pulumi:cache-amd64" index: - type: dockerbuild:index:Index + type: dockerbuild:Index properties: tag: "docker.io/pulumi/pulumi:3.107.0" sources: diff --git a/examples/yaml/Pulumi.yaml b/examples/yaml/Pulumi.yaml index b09522b..b3ee60d 100644 --- a/examples/yaml/Pulumi.yaml +++ b/examples/yaml/Pulumi.yaml @@ -8,7 +8,7 @@ plugins: resources: # docker buildx build -f app/Dockerfile.multiPlatform --platform plan9/amd64,plan9/386 app multiPlatform: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: dockerfile: location: "./app/Dockerfile.multiPlatform" @@ -20,7 +20,7 @@ resources: # docker buildx build --output=type=registry app registryPush: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "./app" @@ -36,7 +36,7 @@ resources: # docker buildx build --cache-to=type=local,dest=tmp/cache,mode=max --cache-from=type=local,src=tmp/cache app cached: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "./app" @@ -50,7 +50,7 @@ resources: # docker buildx build -f app/Dockerfile.buildArgs --build-arg SET_ME_TO_TRUE=true app buildArgs: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: dockerfile: location: "./app/Dockerfile.buildArgs" @@ -61,7 +61,7 @@ resources: # docker buildx build -f app/Dockerfile.extraHosts --add-host metadata.google.internal:169.254.169.254 app extraHosts: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: dockerfile: location: "./app/Dockerfile.extraHosts" @@ -72,7 +72,7 @@ resources: # docker buildx build -f app/Dockerfile.sshMount --ssh default app sshMount: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: dockerfile: location: "./app/Dockerfile.sshMount" @@ -83,7 +83,7 @@ resources: # PASSWORD=hunter2 docker buildx build -f app/Dockerfile.secrets --secret id=password,env=PASSWORD app secrets: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: dockerfile: location: "./app/Dockerfile.secrets" @@ -94,7 +94,7 @@ resources: # docker buildx build --label "description=This image will get a descriptive label 👍" app labels: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "./app" @@ -103,7 +103,7 @@ resources: # docker buildx build -f app/Dockerfile.target --target build-me app target: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: dockerfile: location: "./app/Dockerfile.target" @@ -114,7 +114,7 @@ resources: # docker buildx build -f app/Dockerfile.namedContexts \ # --build-context golang:latest=docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984 app namedContexts: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: dockerfile: location: "./app/Dockerfile.namedContexts" @@ -126,7 +126,7 @@ resources: # docker buildx build https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile remoteContext: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile" @@ -136,7 +136,7 @@ resources: # COPY hello.c ./ # EOF remoteContextWithInline: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: dockerfile: inline: | @@ -147,7 +147,7 @@ resources: # echo "FROM alpine" | docker buildx build -f - . inline: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: dockerfile: inline: | @@ -158,7 +158,7 @@ resources: # docker buildx build --load . dockerLoad: - type: dockerbuild:index:Image + type: dockerbuild:Image properties: context: location: "./app" @@ -168,7 +168,7 @@ resources: # docker buildx build - < app/Dockerfile.emptyContext #emptyContext: - # type: dockerbuild:index:Image + # type: dockerbuild:Image # properties: # file: "app/Dockerfile.emptyContext" # context: "-" diff --git a/provider/cmd/pulumi-resource-dockerbuild/schema.json b/provider/cmd/pulumi-resource-dockerbuild/schema.json index 359b71b..a5ec6ae 100644 --- a/provider/cmd/pulumi-resource-dockerbuild/schema.json +++ b/provider/cmd/pulumi-resource-dockerbuild/schema.json @@ -1,7 +1,7 @@ { "name": "dockerbuild", "displayName": "dockerbuild", - "version": "0.0.1-alpha.1711578427+b6c5d4d5.dirty", + "version": "0.0.1-alpha.1+6efd4b04.dirty", "description": "A Pulumi provider for Docker buildx", "keywords": [ "docker", @@ -1121,7 +1121,7 @@ }, "resources": { "dockerbuild:index:Image": { - "description": "A Docker image built using buildx -- Docker's interface to the improved\nBuildKit backend.\n\n## Stability\n\n**This resource is experimental and subject to change.**\n\nAPI types are unstable. Subsequent releases _may_ require manual edits\nto your state file(s) in order to adopt API changes.\n\n`retainOnDelete: true` is recommended with this resource until it is\nstable. This enables future API changes to be adopted more easily by renaming\nresources.\n\nOnly use this resource if you understand and accept the risks.\n\n## Migrating v3 and v4 Image resources\n\nThe `buildx.Image` resource provides a superset of functionality over the `Image` resources available in versions 3 and 4 of the Pulumi Docker provider.\nExisting `Image` resources can be converted to `build.Image` resources with minor modifications.\n\n### Behavioral differences\n\nThere are several key behavioral differences to keep in mind when transitioning images to the new `buildx.Image` resource.\n\n#### Previews\n\nVersion `3.x` of the Pulumi Docker provider always builds images during preview operations.\nThis is helpful as a safeguard to prevent \"broken\" images from merging, but users found the behavior unnecessarily redundant when running previews and updates locally.\n\nVersion `4.x` changed build-on-preview behavior to be opt-in.\nBy default, `v4.x` `Image` resources do _not_ build during previews, but this behavior can be toggled with the `buildOnPreview` option.\nSome users felt this made previews in CI less helpful because they no longer detected bad images by default.\n\nThe default behavior of the `buildx.Image` resource has been changed to strike a better balance between CI use cases and manual updates.\nBy default, Pulumi will now only build `buildx.Image` resources during previews when it detects a CI environment like GitHub Actions.\nPreviews run in non-CI environments will not build images.\nThis behavior is still configurable with `buildOnPreview`.\n\n#### Push behavior\n\nVersions `3.x` and `4.x` of the Pulumi Docker provider attempt to push images to remote registries by default.\nThey expose a `skipPush: true` option to disable pushing.\n\nThe `buildx.Image` resource matches the Docker CLI's behavior and does not push images anywhere by default.\n\nTo 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`).\nLike 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.\n\n#### Secrets\n\nVersion `3.x` of the Pulumi Docker provider supports secrets by way of the `extraOptions` field.\n\nVersion `4.x` of the Pulumi Docker provider does not support secrets.\n\nThe `buildx.Image` resource supports secrets but does not require those secrets to exist on-disk or in environment variables.\nInstead, they should be passed directly as values.\n(Please be sure to familiarize yourself with Pulumi's [native secret handling](https://www.pulumi.com/docs/concepts/secrets/).)\nPulumi also provides [ESC](https://www.pulumi.com/product/esc/) to make it easier to share secrets across stacks and environments.\n\n#### Caching\n\nVersion `3.x` of the Pulumi Docker provider exposes `cacheFrom: bool | { stages: [...] }`.\nIt builds targets individually and pushes them to separate images for caching.\n\nVersion `4.x` exposes a similar parameter `cacheFrom: { images: [...] }` which pushes and pulls inline caches.\n\nBoth versions 3 and 4 require specific environment variables to be set and deviate from Docker's native caching behavior.\nThis can result in inefficient builds due to unnecessary image pulls, repeated file transfers, etc.\n\nThe `buildx.Image` resource delegates all caching behavior to Docker.\n`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.\n\n#### Outputs\n\nVersions `3.x` and `4.x` of the provider exposed a `repoDigest` output which was a fully qualified tag with digest.\nIn `4.x` this could also be a single sha256 hash if the image wasn't pushed.\n\nUnlike earlier providers the `buildx.Image` resource can push multiple tags.\nAs a convenience, it exposes a `ref` output consisting of a tag with digest as long as the image was pushed.\nIf multiple tags were pushed this uses one at random.\n\nIf you need more control over tag references you can use the `digest` output, which is always a single sha256 hash as long as the image was exported somewhere.\n\n#### Tag deletion and refreshes\n\nVersions 3 and 4 of Pulumi Docker provider do not delete tags when the `Image` resource is deleted, nor do they confirm expected tags exist during `refresh` operations.\n\nThe `buidx.Image` will query your registries during `refresh` to ensure the expected tags exist.\nIf any are missing a subsequent `update` will push them.\n\nWhen a `buildx.Image` is deleted, it will _attempt_ to also delete any pushed tags.\nDeletion of remote tags is not guaranteed because not all registries support the manifest `DELETE` API (`docker.io` in particular).\nManifests 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.\n\nUse the [`retainOnDelete: true`](https://www.pulumi.com/docs/concepts/options/retainondelete/) option if you do not want tags deleted.\n\n### Example migration\n\nExamples 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.\n\nThe `v3` resource leverages `buildx` via a `DOCKER_BUILDKIT` environment variable and CLI flags passed in with `extraOption`.\nAfter migration, the environment variable is no longer needed and CLI flags are now properties on the `buildx.Image`.\nIn almost all cases, properties of `buildx.Image` are named after the Docker CLI flag they correspond to.\n\nThe `v4` resource is less functional than its `v3` counterpart because it lacks the flexibility of `extraOptions`.\nIt it is shown with parameters similar to the `v3` example for completeness.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### v3/v4 migration\n\n```typescript\n\n// v3 Image\nconst v3 = new docker.Image(\"v3-image\", {\n imageName: \"myregistry.com/user/repo:latest\",\n localImageName: \"local-tag\",\n skipPush: false,\n build: {\n dockerfile: \"./Dockerfile\",\n context: \"../app\",\n target: \"mytarget\",\n args: {\n MY_BUILD_ARG: \"foo\",\n },\n env: {\n DOCKER_BUILDKIT: \"1\",\n },\n extraOptions: [\n \"--cache-from\",\n \"type=registry,myregistry.com/user/repo:cache\",\n \"--cache-to\",\n \"type=registry,myregistry.com/user/repo:cache\",\n \"--add-host\",\n \"metadata.google.internal:169.254.169.254\",\n \"--secret\",\n \"id=mysecret,src=/local/secret\",\n \"--ssh\",\n \"default=/home/runner/.ssh/id_ed25519\",\n \"--network\",\n \"host\",\n \"--platform\",\n \"linux/amd64\",\n ],\n },\n registry: {\n server: \"myregistry.com\",\n username: \"username\",\n password: pulumi.secret(\"password\"),\n },\n});\n\n// v3 Image after migrating to buildx.Image\nconst v3Migrated = new docker.buildx.Image(\"v3-to-buildx\", {\n tags: [\"myregistry.com/user/repo:latest\", \"local-tag\"],\n push: true,\n dockerfile: {\n location: \"./Dockerfile\",\n },\n context: {\n location: \"../app\",\n },\n targets: [\"mytarget\"],\n buildArgs: {\n MY_BUILD_ARG: \"foo\",\n },\n cacheFrom: [{ registry: { ref: \"myregistry.com/user/repo:cache\" } }],\n cacheTo: [{ registry: { ref: \"myregistry.com/user/repo:cache\" } }],\n secrets: {\n mysecret: \"value\",\n },\n addHosts: [\"metadata.google.internal:169.254.169.254\"],\n ssh: {\n default: [\"/home/runner/.ssh/id_ed25519\"],\n },\n network: \"host\",\n platforms: [\"linux/amd64\"],\n registries: [{\n address: \"myregistry.com\",\n username: \"username\",\n password: pulumi.secret(\"password\"),\n }],\n});\n\n\n// v4 Image\nconst v4 = new docker.Image(\"v4-image\", {\n imageName: \"myregistry.com/user/repo:latest\",\n skipPush: false,\n build: {\n dockerfile: \"./Dockerfile\",\n context: \"../app\",\n target: \"mytarget\",\n args: {\n MY_BUILD_ARG: \"foo\",\n },\n cacheFrom: {\n images: [\"myregistry.com/user/repo:cache\"],\n },\n addHosts: [\"metadata.google.internal:169.254.169.254\"],\n network: \"host\",\n platform: \"linux/amd64\",\n },\n buildOnPreview: true,\n registry: {\n server: \"myregistry.com\",\n username: \"username\",\n password: pulumi.secret(\"password\"),\n },\n});\n\n// v4 Image after migrating to buildx.Image\nconst v4Migrated = new docker.buildx.Image(\"v4-to-buildx\", {\n tags: [\"myregistry.com/user/repo:latest\"],\n push: true,\n dockerfile: {\n location: \"./Dockerfile\",\n },\n context: {\n location: \"../app\",\n },\n targets: [\"mytarget\"],\n buildArgs: {\n MY_BUILD_ARG: \"foo\",\n },\n cacheFrom: [{ registry: { ref: \"myregistry.com/user/repo:cache\" } }],\n cacheTo: [{ registry: { ref: \"myregistry.com/user/repo:cache\" } }],\n addHosts: [\"metadata.google.internal:169.254.169.254\"],\n network: \"host\",\n platforms: [\"linux/amd64\"],\n registries: [{\n address: \"myregistry.com\",\n username: \"username\",\n password: pulumi.secret(\"password\"),\n }],\n});\n\n```\n\n{{% /example %}}\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Push to AWS ECR with caching\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as docker from \"@pulumi/docker\";\n\nconst ecrRepository = new aws.ecr.Repository(\"ecr-repository\", {});\nconst authToken = aws.ecr.getAuthorizationTokenOutput({\n registryId: ecrRepository.registryId,\n});\nconst myImage = new docker.buildx.Image(\"my-image\", {\n cacheFrom: [{\n registry: {\n ref: pulumi.interpolate`${ecrRepository.repositoryUrl}:cache`,\n },\n }],\n cacheTo: [{\n registry: {\n imageManifest: true,\n ociMediaTypes: true,\n ref: pulumi.interpolate`${ecrRepository.repositoryUrl}:cache`,\n },\n }],\n context: {\n location: \"./app\",\n },\n push: true,\n registries: [{\n address: ecrRepository.repositoryUrl,\n password: authToken.apply(authToken =\u003e authToken.password),\n username: authToken.apply(authToken =\u003e authToken.userName),\n }],\n tags: [pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`],\n});\nexport const ref = myImage.ref;\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_docker as docker\n\necr_repository = aws.ecr.Repository(\"ecr-repository\")\nauth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id)\nmy_image = docker.buildx.Image(\"my-image\",\n cache_from=[docker.buildx.CacheFromArgs(\n registry=docker.buildx.CacheFromRegistryArgs(\n ref=ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:cache\"),\n ),\n )],\n cache_to=[docker.buildx.CacheToArgs(\n registry=docker.buildx.CacheToRegistryArgs(\n image_manifest=True,\n oci_media_types=True,\n ref=ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:cache\"),\n ),\n )],\n context=docker.buildx.BuildContextArgs(\n location=\"./app\",\n ),\n push=True,\n registries=[docker.buildx.RegistryAuthArgs(\n address=ecr_repository.repository_url,\n password=auth_token.password,\n username=auth_token.user_name,\n )],\n tags=[ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:latest\")])\npulumi.export(\"ref\", my_image.ref)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ecrRepository = new Aws.Ecr.Repository(\"ecr-repository\");\n\n var authToken = Aws.Ecr.GetAuthorizationToken.Invoke(new()\n {\n RegistryId = ecrRepository.RegistryId,\n });\n\n var myImage = new Docker.Buildx.Image(\"my-image\", new()\n {\n CacheFrom = new[]\n {\n new Docker.Buildx.Inputs.CacheFromArgs\n {\n Registry = new Docker.Buildx.Inputs.CacheFromRegistryArgs\n {\n Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:cache\"),\n },\n },\n },\n CacheTo = new[]\n {\n new Docker.Buildx.Inputs.CacheToArgs\n {\n Registry = new Docker.Buildx.Inputs.CacheToRegistryArgs\n {\n ImageManifest = true,\n OciMediaTypes = true,\n Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:cache\"),\n },\n },\n },\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"./app\",\n },\n Push = true,\n Registries = new[]\n {\n new Docker.Buildx.Inputs.RegistryAuthArgs\n {\n Address = ecrRepository.RepositoryUrl,\n Password = authToken.Apply(getAuthorizationTokenResult =\u003e getAuthorizationTokenResult.Password),\n Username = authToken.Apply(getAuthorizationTokenResult =\u003e getAuthorizationTokenResult.UserName),\n },\n },\n Tags = new[]\n {\n ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:latest\"),\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"ref\"] = myImage.Ref,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecr\"\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tecrRepository, err := ecr.NewRepository(ctx, \"ecr-repository\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tauthToken := ecr.GetAuthorizationTokenOutput(ctx, ecr.GetAuthorizationTokenOutputArgs{\n\t\t\tRegistryId: ecrRepository.RegistryId,\n\t\t}, nil)\n\t\tmyImage, err := buildx.NewImage(ctx, \"my-image\", \u0026buildx.ImageArgs{\n\t\t\tCacheFrom: buildx.CacheFromArray{\n\t\t\t\t\u0026buildx.CacheFromArgs{\n\t\t\t\t\tRegistry: \u0026buildx.CacheFromRegistryArgs{\n\t\t\t\t\t\tRef: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"%v:cache\", repositoryUrl), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCacheTo: buildx.CacheToArray{\n\t\t\t\t\u0026buildx.CacheToArgs{\n\t\t\t\t\tRegistry: \u0026buildx.CacheToRegistryArgs{\n\t\t\t\t\t\tImageManifest: pulumi.Bool(true),\n\t\t\t\t\t\tOciMediaTypes: pulumi.Bool(true),\n\t\t\t\t\t\tRef: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"%v:cache\", repositoryUrl), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"./app\"),\n\t\t\t},\n\t\t\tPush: pulumi.Bool(true),\n\t\t\tRegistries: buildx.RegistryAuthArray{\n\t\t\t\t\u0026buildx.RegistryAuthArgs{\n\t\t\t\t\tAddress: ecrRepository.RepositoryUrl,\n\t\t\t\t\tPassword: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {\n\t\t\t\t\t\treturn \u0026authToken.Password, nil\n\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\tUsername: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {\n\t\t\t\t\t\treturn \u0026authToken.UserName, nil\n\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"%v:latest\", repositoryUrl), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ref\", myImage.Ref)\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Push to AWS ECR with caching\nname: ecr\noutputs:\n ref: ${my-image.ref}\nresources:\n ecr-repository:\n type: aws:ecr:Repository\n my-image:\n properties:\n cacheFrom:\n - registry:\n ref: ${ecr-repository.repositoryUrl}:cache\n cacheTo:\n - registry:\n imageManifest: true\n ociMediaTypes: true\n ref: ${ecr-repository.repositoryUrl}:cache\n context:\n location: ./app\n push: true\n registries:\n - address: ${ecr-repository.repositoryUrl}\n password: ${auth-token.password}\n username: ${auth-token.userName}\n tags:\n - ${ecr-repository.repositoryUrl}:latest\n type: docker:buildx/image:Image\nruntime: yaml\nvariables:\n auth-token:\n fn::aws:ecr:getAuthorizationToken:\n registryId: ${ecr-repository.registryId}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.aws.ecr.Repository;\nimport com.pulumi.aws.ecr.EcrFunctions;\nimport com.pulumi.aws.ecr.inputs.GetAuthorizationTokenArgs;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.CacheFromArgs;\nimport com.pulumi.docker.buildx.inputs.CacheFromRegistryArgs;\nimport com.pulumi.docker.buildx.inputs.CacheToArgs;\nimport com.pulumi.docker.buildx.inputs.CacheToRegistryArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport com.pulumi.docker.buildx.inputs.RegistryAuthArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ecrRepository = new Repository(\"ecrRepository\");\n\n final var authToken = EcrFunctions.getAuthorizationToken(GetAuthorizationTokenArgs.builder()\n .registryId(ecrRepository.registryId())\n .build());\n\n var myImage = new Image(\"myImage\", ImageArgs.builder() \n .cacheFrom(CacheFromArgs.builder()\n .registry(CacheFromRegistryArgs.builder()\n .ref(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:cache\", repositoryUrl)))\n .build())\n .build())\n .cacheTo(CacheToArgs.builder()\n .registry(CacheToRegistryArgs.builder()\n .imageManifest(true)\n .ociMediaTypes(true)\n .ref(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:cache\", repositoryUrl)))\n .build())\n .build())\n .context(BuildContextArgs.builder()\n .location(\"./app\")\n .build())\n .push(true)\n .registries(RegistryAuthArgs.builder()\n .address(ecrRepository.repositoryUrl())\n .password(authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult).applyValue(authToken -\u003e authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult.password())))\n .username(authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult).applyValue(authToken -\u003e authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult.userName())))\n .build())\n .tags(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:latest\", repositoryUrl)))\n .build());\n\n ctx.export(\"ref\", myImage.ref());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Multi-platform image\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst image = new docker.buildx.Image(\"image\", {\n context: {\n location: \"app\",\n },\n platforms: [\n docker.buildx.image.Platform.Plan9_amd64,\n docker.buildx.image.Platform.Plan9_386,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nimage = docker.buildx.Image(\"image\",\n context=docker.buildx.BuildContextArgs(\n location=\"app\",\n ),\n platforms=[\n docker.buildx.image.Platform.PLAN9_AMD64,\n docker.buildx.image.Platform.PLAN9_386,\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Docker.Buildx.Image(\"image\", new()\n {\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Platforms = new[]\n {\n Docker.Buildx.Image.Platform.Plan9_amd64,\n Docker.Buildx.Image.Platform.Plan9_386,\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := buildx.NewImage(ctx, \"image\", \u0026buildx.ImageArgs{\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPlatforms: buildx.PlatformArray{\n\t\t\t\tbuildx.Platform_Plan9_amd64,\n\t\t\t\tbuildx.Platform_Plan9_386,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Multi-platform image\nname: multi-platform\nresources:\n image:\n properties:\n context:\n location: app\n platforms:\n - plan9/amd64\n - plan9/386\n type: docker:buildx/image:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .platforms( \n \"plan9/amd64\",\n \"plan9/386\")\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Registry export\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst image = new docker.buildx.Image(\"image\", {\n context: {\n location: \"app\",\n },\n push: true,\n registries: [{\n address: \"docker.io\",\n password: dockerHubPassword,\n username: \"pulumibot\",\n }],\n tags: [\"docker.io/pulumi/pulumi:3.107.0\"],\n});\nexport const ref = myImage.ref;\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nimage = docker.buildx.Image(\"image\",\n context=docker.buildx.BuildContextArgs(\n location=\"app\",\n ),\n push=True,\n registries=[docker.buildx.RegistryAuthArgs(\n address=\"docker.io\",\n password=docker_hub_password,\n username=\"pulumibot\",\n )],\n tags=[\"docker.io/pulumi/pulumi:3.107.0\"])\npulumi.export(\"ref\", my_image[\"ref\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Docker.Buildx.Image(\"image\", new()\n {\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Push = true,\n Registries = new[]\n {\n new Docker.Buildx.Inputs.RegistryAuthArgs\n {\n Address = \"docker.io\",\n Password = dockerHubPassword,\n Username = \"pulumibot\",\n },\n },\n Tags = new[]\n {\n \"docker.io/pulumi/pulumi:3.107.0\",\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"ref\"] = myImage.Ref,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := buildx.NewImage(ctx, \"image\", \u0026buildx.ImageArgs{\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPush: pulumi.Bool(true),\n\t\t\tRegistries: buildx.RegistryAuthArray{\n\t\t\t\t\u0026buildx.RegistryAuthArgs{\n\t\t\t\t\tAddress: pulumi.String(\"docker.io\"),\n\t\t\t\t\tPassword: pulumi.Any(dockerHubPassword),\n\t\t\t\t\tUsername: pulumi.String(\"pulumibot\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"docker.io/pulumi/pulumi:3.107.0\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ref\", myImage.Ref)\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Registry export\nname: registry\noutputs:\n ref: ${my-image.ref}\nresources:\n image:\n properties:\n context:\n location: app\n push: true\n registries:\n - address: docker.io\n password: ${dockerHubPassword}\n username: pulumibot\n tags:\n - docker.io/pulumi/pulumi:3.107.0\n type: docker:buildx/image:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport com.pulumi.docker.buildx.inputs.RegistryAuthArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .push(true)\n .registries(RegistryAuthArgs.builder()\n .address(\"docker.io\")\n .password(dockerHubPassword)\n .username(\"pulumibot\")\n .build())\n .tags(\"docker.io/pulumi/pulumi:3.107.0\")\n .build());\n\n ctx.export(\"ref\", myImage.ref());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Caching\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst image = new docker.buildx.Image(\"image\", {\n cacheFrom: [{\n local: {\n src: \"tmp/cache\",\n },\n }],\n cacheTo: [{\n local: {\n dest: \"tmp/cache\",\n mode: docker.buildx.image.CacheMode.Max,\n },\n }],\n context: {\n location: \"app\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nimage = docker.buildx.Image(\"image\",\n cache_from=[docker.buildx.CacheFromArgs(\n local=docker.buildx.CacheFromLocalArgs(\n src=\"tmp/cache\",\n ),\n )],\n cache_to=[docker.buildx.CacheToArgs(\n local=docker.buildx.CacheToLocalArgs(\n dest=\"tmp/cache\",\n mode=docker.buildx.image.CacheMode.MAX,\n ),\n )],\n context=docker.buildx.BuildContextArgs(\n location=\"app\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Docker.Buildx.Image(\"image\", new()\n {\n CacheFrom = new[]\n {\n new Docker.Buildx.Inputs.CacheFromArgs\n {\n Local = new Docker.Buildx.Inputs.CacheFromLocalArgs\n {\n Src = \"tmp/cache\",\n },\n },\n },\n CacheTo = new[]\n {\n new Docker.Buildx.Inputs.CacheToArgs\n {\n Local = new Docker.Buildx.Inputs.CacheToLocalArgs\n {\n Dest = \"tmp/cache\",\n Mode = Docker.Buildx.Image.CacheMode.Max,\n },\n },\n },\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := buildx.NewImage(ctx, \"image\", \u0026buildx.ImageArgs{\n\t\t\tCacheFrom: buildx.CacheFromArray{\n\t\t\t\t\u0026buildx.CacheFromArgs{\n\t\t\t\t\tLocal: \u0026buildx.CacheFromLocalArgs{\n\t\t\t\t\t\tSrc: pulumi.String(\"tmp/cache\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCacheTo: buildx.CacheToArray{\n\t\t\t\t\u0026buildx.CacheToArgs{\n\t\t\t\t\tLocal: \u0026buildx.CacheToLocalArgs{\n\t\t\t\t\t\tDest: pulumi.String(\"tmp/cache\"),\n\t\t\t\t\t\tMode: buildx.CacheModeMax,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Caching\nname: caching\nresources:\n image:\n properties:\n cacheFrom:\n - local:\n src: tmp/cache\n cacheTo:\n - local:\n dest: tmp/cache\n mode: max\n context:\n location: app\n type: docker:buildx/image:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.CacheFromArgs;\nimport com.pulumi.docker.buildx.inputs.CacheFromLocalArgs;\nimport com.pulumi.docker.buildx.inputs.CacheToArgs;\nimport com.pulumi.docker.buildx.inputs.CacheToLocalArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .cacheFrom(CacheFromArgs.builder()\n .local(CacheFromLocalArgs.builder()\n .src(\"tmp/cache\")\n .build())\n .build())\n .cacheTo(CacheToArgs.builder()\n .local(CacheToLocalArgs.builder()\n .dest(\"tmp/cache\")\n .mode(\"max\")\n .build())\n .build())\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Docker Build Cloud\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst image = new docker.buildx.Image(\"image\", {\n builder: {\n name: \"cloud-builder-name\",\n },\n context: {\n location: \"app\",\n },\n exec: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nimage = docker.buildx.Image(\"image\",\n builder=docker.buildx.BuilderConfigArgs(\n name=\"cloud-builder-name\",\n ),\n context=docker.buildx.BuildContextArgs(\n location=\"app\",\n ),\n exec_=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Docker.Buildx.Image(\"image\", new()\n {\n Builder = new Docker.Buildx.Inputs.BuilderConfigArgs\n {\n Name = \"cloud-builder-name\",\n },\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Exec = true,\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := buildx.NewImage(ctx, \"image\", \u0026buildx.ImageArgs{\n\t\t\tBuilder: \u0026buildx.BuilderConfigArgs{\n\t\t\t\tName: pulumi.String(\"cloud-builder-name\"),\n\t\t\t},\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tExec: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Docker Build Cloud\nname: dbc\nresources:\n image:\n properties:\n builder:\n name: cloud-builder-name\n context:\n location: app\n exec: true\n type: docker:buildx/image:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.BuilderConfigArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .builder(BuilderConfigArgs.builder()\n .name(\"cloud-builder-name\")\n .build())\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .exec(true)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Build arguments\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst image = new docker.buildx.Image(\"image\", {\n buildArgs: {\n SET_ME_TO_TRUE: \"true\",\n },\n context: {\n location: \"app\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nimage = docker.buildx.Image(\"image\",\n build_args={\n \"SET_ME_TO_TRUE\": \"true\",\n },\n context=docker.buildx.BuildContextArgs(\n location=\"app\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Docker.Buildx.Image(\"image\", new()\n {\n BuildArgs = \n {\n { \"SET_ME_TO_TRUE\", \"true\" },\n },\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := buildx.NewImage(ctx, \"image\", \u0026buildx.ImageArgs{\n\t\t\tBuildArgs: pulumi.StringMap{\n\t\t\t\t\"SET_ME_TO_TRUE\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Build arguments\nname: build-args\nresources:\n image:\n properties:\n buildArgs:\n SET_ME_TO_TRUE: \"true\"\n context:\n location: app\n type: docker:buildx/image:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .buildArgs(Map.of(\"SET_ME_TO_TRUE\", \"true\"))\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Build target\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst image = new docker.buildx.Image(\"image\", {\n context: {\n location: \"app\",\n },\n target: \"build-me\",\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nimage = docker.buildx.Image(\"image\",\n context=docker.buildx.BuildContextArgs(\n location=\"app\",\n ),\n target=\"build-me\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Docker.Buildx.Image(\"image\", new()\n {\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Target = \"build-me\",\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := buildx.NewImage(ctx, \"image\", \u0026buildx.ImageArgs{\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tTarget: pulumi.String(\"build-me\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Build target\nname: build-target\nresources:\n image:\n properties:\n context:\n location: app\n target: build-me\n type: docker:buildx/image:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .target(\"build-me\")\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Named contexts\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst image = new docker.buildx.Image(\"image\", {context: {\n location: \"app\",\n named: {\n \"golang:latest\": {\n location: \"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\",\n },\n },\n}});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nimage = docker.buildx.Image(\"image\", context=docker.buildx.BuildContextArgs(\n location=\"app\",\n named={\n \"golang:latest\": docker.buildx.ContextArgs(\n location=\"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\",\n ),\n },\n))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Docker.Buildx.Image(\"image\", new()\n {\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"app\",\n Named = \n {\n { \"golang:latest\", new Docker.Buildx.Inputs.ContextArgs\n {\n Location = \"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\",\n } },\n },\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := buildx.NewImage(ctx, \"image\", \u0026buildx.ImageArgs{\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t\tNamed: buildx.ContextMap{\n\t\t\t\t\t\"golang:latest\": \u0026buildx.ContextArgs{\n\t\t\t\t\t\tLocation: pulumi.String(\"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Named contexts\nname: named-contexts\nresources:\n image:\n properties:\n context:\n location: app\n named:\n golang:latest:\n location: docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\n type: docker:buildx/image:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"app\")\n .named(Map.of(\"golang:latest\", Map.of(\"location\", \"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\")))\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Remote context\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst image = new docker.buildx.Image(\"image\", {context: {\n location: \"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\",\n}});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nimage = docker.buildx.Image(\"image\", context=docker.buildx.BuildContextArgs(\n location=\"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\",\n))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Docker.Buildx.Image(\"image\", new()\n {\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\",\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := buildx.NewImage(ctx, \"image\", \u0026buildx.ImageArgs{\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Remote context\nname: remote-context\nresources:\n image:\n properties:\n context:\n location: https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\n type: docker:buildx/image:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\")\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Inline Dockerfile\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst image = new docker.buildx.Image(\"image\", {\n context: {\n location: \"app\",\n },\n dockerfile: {\n inline: `FROM busybox\nCOPY hello.c ./\n`,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nimage = docker.buildx.Image(\"image\",\n context=docker.buildx.BuildContextArgs(\n location=\"app\",\n ),\n dockerfile=docker.buildx.DockerfileArgs(\n inline=\"\"\"FROM busybox\nCOPY hello.c ./\n\"\"\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Docker.Buildx.Image(\"image\", new()\n {\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Dockerfile = new Docker.Buildx.Inputs.DockerfileArgs\n {\n Inline = @\"FROM busybox\nCOPY hello.c ./\n\",\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := buildx.NewImage(ctx, \"image\", \u0026buildx.ImageArgs{\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tDockerfile: \u0026buildx.DockerfileArgs{\n\t\t\t\tInline: pulumi.String(\"FROM busybox\\nCOPY hello.c ./\\n\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Inline Dockerfile\nname: inline\nresources:\n image:\n properties:\n context:\n location: app\n dockerfile:\n inline: |\n FROM busybox\n COPY hello.c ./\n type: docker:buildx/image:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport com.pulumi.docker.buildx.inputs.DockerfileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .dockerfile(DockerfileArgs.builder()\n .inline(\"\"\"\nFROM busybox\nCOPY hello.c ./\n \"\"\")\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Remote context\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst image = new docker.buildx.Image(\"image\", {\n context: {\n location: \"https://github.com/docker-library/hello-world.git\",\n },\n dockerfile: {\n location: \"app/Dockerfile\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nimage = docker.buildx.Image(\"image\",\n context=docker.buildx.BuildContextArgs(\n location=\"https://github.com/docker-library/hello-world.git\",\n ),\n dockerfile=docker.buildx.DockerfileArgs(\n location=\"app/Dockerfile\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Docker.Buildx.Image(\"image\", new()\n {\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"https://github.com/docker-library/hello-world.git\",\n },\n Dockerfile = new Docker.Buildx.Inputs.DockerfileArgs\n {\n Location = \"app/Dockerfile\",\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := buildx.NewImage(ctx, \"image\", \u0026buildx.ImageArgs{\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"https://github.com/docker-library/hello-world.git\"),\n\t\t\t},\n\t\t\tDockerfile: \u0026buildx.DockerfileArgs{\n\t\t\t\tLocation: pulumi.String(\"app/Dockerfile\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Remote context\nname: remote-context\nresources:\n image:\n properties:\n context:\n location: https://github.com/docker-library/hello-world.git\n dockerfile:\n location: app/Dockerfile\n type: docker:buildx/image:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport com.pulumi.docker.buildx.inputs.DockerfileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"https://github.com/docker-library/hello-world.git\")\n .build())\n .dockerfile(DockerfileArgs.builder()\n .location(\"app/Dockerfile\")\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Local export\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst image = new docker.buildx.Image(\"image\", {\n context: {\n location: \"app\",\n },\n exports: [{\n docker: {\n tar: true,\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nimage = docker.buildx.Image(\"image\",\n context=docker.buildx.BuildContextArgs(\n location=\"app\",\n ),\n exports=[docker.buildx.ExportArgs(\n docker=docker.buildx.ExportDockerArgs(\n tar=True,\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Docker.Buildx.Image(\"image\", new()\n {\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Exports = new[]\n {\n new Docker.Buildx.Inputs.ExportArgs\n {\n Docker = new Docker.Buildx.Inputs.ExportDockerArgs\n {\n Tar = true,\n },\n },\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := buildx.NewImage(ctx, \"image\", \u0026buildx.ImageArgs{\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tExports: buildx.ExportArray{\n\t\t\t\t\u0026buildx.ExportArgs{\n\t\t\t\t\tDocker: \u0026buildx.ExportDockerArgs{\n\t\t\t\t\t\tTar: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Local export\nname: docker-load\nresources:\n image:\n properties:\n context:\n location: app\n exports:\n - docker:\n tar: true\n type: docker:buildx/image:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport com.pulumi.docker.buildx.inputs.ExportArgs;\nimport com.pulumi.docker.buildx.inputs.ExportDockerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .exports(ExportArgs.builder()\n .docker(ExportDockerArgs.builder()\n .tar(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "A Docker image built using buildx -- Docker's interface to the improved\nBuildKit backend.\n\n## Stability\n\n**This resource is experimental and subject to change.**\n\nAPI types are unstable. Subsequent releases _may_ require manual edits\nto your state file(s) in order to adopt API changes.\n\n`retainOnDelete: true` is recommended with this resource until it is\nstable. This enables future API changes to be adopted more easily by renaming\nresources.\n\nOnly use this resource if you understand and accept the risks.\n\n## Migrating v3 and v4 Image resources\n\nThe `dockerbuild.Image` resource provides a superset of functionality over the `Image` resources available in versions 3 and 4 of the Pulumi Docker provider.\nExisting `Image` resources can be converted to `dockerbuild.Image` resources with minor modifications.\n\n### Behavioral differences\n\nThere are several key behavioral differences to keep in mind when transitioning images to the new `dockerbuild.Image` resource.\n\n#### Previews\n\nVersion `3.x` of the Pulumi Docker provider always builds images during preview operations.\nThis is helpful as a safeguard to prevent \"broken\" images from merging, but users found the behavior unnecessarily redundant when running previews and updates locally.\n\nVersion `4.x` changed build-on-preview behavior to be opt-in.\nBy default, `v4.x` `Image` resources do _not_ build during previews, but this behavior can be toggled with the `buildOnPreview` option.\nSome users felt this made previews in CI less helpful because they no longer detected bad images by default.\n\nThe default behavior of the `dockerbuild.Image` resource has been changed to strike a better balance between CI use cases and manual updates.\nBy default, Pulumi will now only build `dockerbuild.Image` resources during previews when it detects a CI environment like GitHub Actions.\nPreviews run in non-CI environments will not build images.\nThis behavior is still configurable with `buildOnPreview`.\n\n#### Push behavior\n\nVersions `3.x` and `4.x` of the Pulumi Docker provider attempt to push images to remote registries by default.\nThey expose a `skipPush: true` option to disable pushing.\n\nThe `dockerbuild.Image` resource matches the Docker CLI's behavior and does not push images anywhere by default.\n\nTo 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`).\nLike 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.\n\n#### Secrets\n\nVersion `3.x` of the Pulumi Docker provider supports secrets by way of the `extraOptions` field.\n\nVersion `4.x` of the Pulumi Docker provider does not support secrets.\n\nThe `dockerbuild.Image` resource supports secrets but does not require those secrets to exist on-disk or in environment variables.\nInstead, they should be passed directly as values.\n(Please be sure to familiarize yourself with Pulumi's [native secret handling](https://www.pulumi.com/docs/concepts/secrets/).)\nPulumi also provides [ESC](https://www.pulumi.com/product/esc/) to make it easier to share secrets across stacks and environments.\n\n#### Caching\n\nVersion `3.x` of the Pulumi Docker provider exposes `cacheFrom: bool | { stages: [...] }`.\nIt builds targets individually and pushes them to separate images for caching.\n\nVersion `4.x` exposes a similar parameter `cacheFrom: { images: [...] }` which pushes and pulls inline caches.\n\nBoth versions 3 and 4 require specific environment variables to be set and deviate from Docker's native caching behavior.\nThis can result in inefficient builds due to unnecessary image pulls, repeated file transfers, etc.\n\nThe `dockerbuild.Image` resource delegates all caching behavior to Docker.\n`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.\n\n#### Outputs\n\nVersions `3.x` and `4.x` of the provider exposed a `repoDigest` output which was a fully qualified tag with digest.\nIn `4.x` this could also be a single sha256 hash if the image wasn't pushed.\n\nUnlike earlier providers the `dockerbuild.Image` resource can push multiple tags.\nAs a convenience, it exposes a `ref` output consisting of a tag with digest as long as the image was pushed.\nIf multiple tags were pushed this uses one at random.\n\nIf you need more control over tag references you can use the `digest` output, which is always a single sha256 hash as long as the image was exported somewhere.\n\n#### Tag deletion and refreshes\n\nVersions 3 and 4 of Pulumi Docker provider do not delete tags when the `Image` resource is deleted, nor do they confirm expected tags exist during `refresh` operations.\n\nThe `buidx.Image` will query your registries during `refresh` to ensure the expected tags exist.\nIf any are missing a subsequent `update` will push them.\n\nWhen a `dockerbuild.Image` is deleted, it will _attempt_ to also delete any pushed tags.\nDeletion of remote tags is not guaranteed because not all registries support the manifest `DELETE` API (`docker.io` in particular).\nManifests 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.\n\nUse the [`retainOnDelete: true`](https://www.pulumi.com/docs/concepts/options/retainondelete/) option if you do not want tags deleted.\n\n### Example migration\n\nExamples 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.\n\nThe `v3` resource leverages `buildx` via a `DOCKER_BUILDKIT` environment variable and CLI flags passed in with `extraOption`.\nAfter migration, the environment variable is no longer needed and CLI flags are now properties on the `dockerbuild.Image`.\nIn almost all cases, properties of `dockerbuild.Image` are named after the Docker CLI flag they correspond to.\n\nThe `v4` resource is less functional than its `v3` counterpart because it lacks the flexibility of `extraOptions`.\nIt it is shown with parameters similar to the `v3` example for completeness.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### v3/v4 migration\n\n```typescript\n\n// v3 Image\nconst v3 = new docker.Image(\"v3-image\", {\n imageName: \"myregistry.com/user/repo:latest\",\n localImageName: \"local-tag\",\n skipPush: false,\n build: {\n dockerfile: \"./Dockerfile\",\n context: \"../app\",\n target: \"mytarget\",\n args: {\n MY_BUILD_ARG: \"foo\",\n },\n env: {\n DOCKER_BUILDKIT: \"1\",\n },\n extraOptions: [\n \"--cache-from\",\n \"type=registry,myregistry.com/user/repo:cache\",\n \"--cache-to\",\n \"type=registry,myregistry.com/user/repo:cache\",\n \"--add-host\",\n \"metadata.google.internal:169.254.169.254\",\n \"--secret\",\n \"id=mysecret,src=/local/secret\",\n \"--ssh\",\n \"default=/home/runner/.ssh/id_ed25519\",\n \"--network\",\n \"host\",\n \"--platform\",\n \"linux/amd64\",\n ],\n },\n registry: {\n server: \"myregistry.com\",\n username: \"username\",\n password: pulumi.secret(\"password\"),\n },\n});\n\n// v3 Image after migrating to dockerbuild.Image\nconst v3Migrated = new dockerbuild.Image(\"v3-to-buildx\", {\n tags: [\"myregistry.com/user/repo:latest\", \"local-tag\"],\n push: true,\n dockerfile: {\n location: \"./Dockerfile\",\n },\n context: {\n location: \"../app\",\n },\n targets: [\"mytarget\"],\n buildArgs: {\n MY_BUILD_ARG: \"foo\",\n },\n cacheFrom: [{ registry: { ref: \"myregistry.com/user/repo:cache\" } }],\n cacheTo: [{ registry: { ref: \"myregistry.com/user/repo:cache\" } }],\n secrets: {\n mysecret: \"value\",\n },\n addHosts: [\"metadata.google.internal:169.254.169.254\"],\n ssh: {\n default: [\"/home/runner/.ssh/id_ed25519\"],\n },\n network: \"host\",\n platforms: [\"linux/amd64\"],\n registries: [{\n address: \"myregistry.com\",\n username: \"username\",\n password: pulumi.secret(\"password\"),\n }],\n});\n\n\n// v4 Image\nconst v4 = new docker.Image(\"v4-image\", {\n imageName: \"myregistry.com/user/repo:latest\",\n skipPush: false,\n build: {\n dockerfile: \"./Dockerfile\",\n context: \"../app\",\n target: \"mytarget\",\n args: {\n MY_BUILD_ARG: \"foo\",\n },\n cacheFrom: {\n images: [\"myregistry.com/user/repo:cache\"],\n },\n addHosts: [\"metadata.google.internal:169.254.169.254\"],\n network: \"host\",\n platform: \"linux/amd64\",\n },\n buildOnPreview: true,\n registry: {\n server: \"myregistry.com\",\n username: \"username\",\n password: pulumi.secret(\"password\"),\n },\n});\n\n// v4 Image after migrating to dockerbuild.Image\nconst v4Migrated = new dockerbuild.Image(\"v4-to-buildx\", {\n tags: [\"myregistry.com/user/repo:latest\"],\n push: true,\n dockerfile: {\n location: \"./Dockerfile\",\n },\n context: {\n location: \"../app\",\n },\n targets: [\"mytarget\"],\n buildArgs: {\n MY_BUILD_ARG: \"foo\",\n },\n cacheFrom: [{ registry: { ref: \"myregistry.com/user/repo:cache\" } }],\n cacheTo: [{ registry: { ref: \"myregistry.com/user/repo:cache\" } }],\n addHosts: [\"metadata.google.internal:169.254.169.254\"],\n network: \"host\",\n platforms: [\"linux/amd64\"],\n registries: [{\n address: \"myregistry.com\",\n username: \"username\",\n password: pulumi.secret(\"password\"),\n }],\n});\n\n```\n\n{{% /example %}}\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Push to AWS ECR with caching\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst ecrRepository = new aws.ecr.Repository(\"ecr-repository\", {});\nconst authToken = aws.ecr.getAuthorizationTokenOutput({\n registryId: ecrRepository.registryId,\n});\nconst myImage = new dockerbuild.Image(\"my-image\", {\n cacheFrom: [{\n registry: {\n ref: pulumi.interpolate`${ecrRepository.repositoryUrl}:cache`,\n },\n }],\n cacheTo: [{\n registry: {\n imageManifest: true,\n ociMediaTypes: true,\n ref: pulumi.interpolate`${ecrRepository.repositoryUrl}:cache`,\n },\n }],\n context: {\n location: \"./app\",\n },\n push: true,\n registries: [{\n address: ecrRepository.repositoryUrl,\n password: authToken.apply(authToken =\u003e authToken.password),\n username: authToken.apply(authToken =\u003e authToken.userName),\n }],\n tags: [pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`],\n});\nexport const ref = myImage.ref;\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_dockerbuild as dockerbuild\n\necr_repository = aws.ecr.Repository(\"ecr-repository\")\nauth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id)\nmy_image = dockerbuild.Image(\"my-image\",\n cache_from=[dockerbuild.CacheFromArgs(\n registry=dockerbuild.CacheFromRegistryArgs(\n ref=ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:cache\"),\n ),\n )],\n cache_to=[dockerbuild.CacheToArgs(\n registry=dockerbuild.CacheToRegistryArgs(\n image_manifest=True,\n oci_media_types=True,\n ref=ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:cache\"),\n ),\n )],\n context=dockerbuild.BuildContextArgs(\n location=\"./app\",\n ),\n push=True,\n registries=[dockerbuild.RegistryArgs(\n address=ecr_repository.repository_url,\n password=auth_token.password,\n username=auth_token.user_name,\n )],\n tags=[ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:latest\")])\npulumi.export(\"ref\", my_image.ref)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ecrRepository = new Aws.Ecr.Repository(\"ecr-repository\");\n\n var authToken = Aws.Ecr.GetAuthorizationToken.Invoke(new()\n {\n RegistryId = ecrRepository.RegistryId,\n });\n\n var myImage = new Dockerbuild.Image(\"my-image\", new()\n {\n CacheFrom = new[]\n {\n new Dockerbuild.Inputs.CacheFromArgs\n {\n Registry = new Dockerbuild.Inputs.CacheFromRegistryArgs\n {\n Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:cache\"),\n },\n },\n },\n CacheTo = new[]\n {\n new Dockerbuild.Inputs.CacheToArgs\n {\n Registry = new Dockerbuild.Inputs.CacheToRegistryArgs\n {\n ImageManifest = true,\n OciMediaTypes = true,\n Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:cache\"),\n },\n },\n },\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"./app\",\n },\n Push = true,\n Registries = new[]\n {\n new Dockerbuild.Inputs.RegistryArgs\n {\n Address = ecrRepository.RepositoryUrl,\n Password = authToken.Apply(getAuthorizationTokenResult =\u003e getAuthorizationTokenResult.Password),\n Username = authToken.Apply(getAuthorizationTokenResult =\u003e getAuthorizationTokenResult.UserName),\n },\n },\n Tags = new[]\n {\n ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:latest\"),\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"ref\"] = myImage.Ref,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecr\"\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tecrRepository, err := ecr.NewRepository(ctx, \"ecr-repository\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tauthToken := ecr.GetAuthorizationTokenOutput(ctx, ecr.GetAuthorizationTokenOutputArgs{\n\t\t\tRegistryId: ecrRepository.RegistryId,\n\t\t}, nil)\n\t\tmyImage, err := dockerbuild.NewImage(ctx, \"my-image\", \u0026dockerbuild.ImageArgs{\n\t\t\tCacheFrom: dockerbuild.CacheFromArray{\n\t\t\t\t\u0026dockerbuild.CacheFromArgs{\n\t\t\t\t\tRegistry: \u0026dockerbuild.CacheFromRegistryArgs{\n\t\t\t\t\t\tRef: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"%v:cache\", repositoryUrl), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCacheTo: dockerbuild.CacheToArray{\n\t\t\t\t\u0026dockerbuild.CacheToArgs{\n\t\t\t\t\tRegistry: \u0026dockerbuild.CacheToRegistryArgs{\n\t\t\t\t\t\tImageManifest: pulumi.Bool(true),\n\t\t\t\t\t\tOciMediaTypes: pulumi.Bool(true),\n\t\t\t\t\t\tRef: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"%v:cache\", repositoryUrl), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"./app\"),\n\t\t\t},\n\t\t\tPush: pulumi.Bool(true),\n\t\t\tRegistries: dockerbuild.RegistryArray{\n\t\t\t\t\u0026dockerbuild.RegistryArgs{\n\t\t\t\t\tAddress: ecrRepository.RepositoryUrl,\n\t\t\t\t\tPassword: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {\n\t\t\t\t\t\treturn \u0026authToken.Password, nil\n\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\tUsername: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {\n\t\t\t\t\t\treturn \u0026authToken.UserName, nil\n\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"%v:latest\", repositoryUrl), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ref\", myImage.Ref)\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Push to AWS ECR with caching\nname: ecr\noutputs:\n ref: ${my-image.ref}\nresources:\n ecr-repository:\n type: aws:ecr:Repository\n my-image:\n properties:\n cacheFrom:\n - registry:\n ref: ${ecr-repository.repositoryUrl}:cache\n cacheTo:\n - registry:\n imageManifest: true\n ociMediaTypes: true\n ref: ${ecr-repository.repositoryUrl}:cache\n context:\n location: ./app\n push: true\n registries:\n - address: ${ecr-repository.repositoryUrl}\n password: ${auth-token.password}\n username: ${auth-token.userName}\n tags:\n - ${ecr-repository.repositoryUrl}:latest\n type: dockerbuild:index:Image\nruntime: yaml\nvariables:\n auth-token:\n fn::aws:ecr:getAuthorizationToken:\n registryId: ${ecr-repository.registryId}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.aws.ecr.Repository;\nimport com.pulumi.aws.ecr.EcrFunctions;\nimport com.pulumi.aws.ecr.inputs.GetAuthorizationTokenArgs;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.CacheFromArgs;\nimport com.pulumi.dockerbuild.inputs.CacheFromRegistryArgs;\nimport com.pulumi.dockerbuild.inputs.CacheToArgs;\nimport com.pulumi.dockerbuild.inputs.CacheToRegistryArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport com.pulumi.dockerbuild.inputs.RegistryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ecrRepository = new Repository(\"ecrRepository\");\n\n final var authToken = EcrFunctions.getAuthorizationToken(GetAuthorizationTokenArgs.builder()\n .registryId(ecrRepository.registryId())\n .build());\n\n var myImage = new Image(\"myImage\", ImageArgs.builder() \n .cacheFrom(CacheFromArgs.builder()\n .registry(CacheFromRegistryArgs.builder()\n .ref(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:cache\", repositoryUrl)))\n .build())\n .build())\n .cacheTo(CacheToArgs.builder()\n .registry(CacheToRegistryArgs.builder()\n .imageManifest(true)\n .ociMediaTypes(true)\n .ref(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:cache\", repositoryUrl)))\n .build())\n .build())\n .context(BuildContextArgs.builder()\n .location(\"./app\")\n .build())\n .push(true)\n .registries(RegistryArgs.builder()\n .address(ecrRepository.repositoryUrl())\n .password(authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult).applyValue(authToken -\u003e authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult.password())))\n .username(authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult).applyValue(authToken -\u003e authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult.userName())))\n .build())\n .tags(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:latest\", repositoryUrl)))\n .build());\n\n ctx.export(\"ref\", myImage.ref());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Multi-platform image\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst image = new dockerbuild.Image(\"image\", {\n context: {\n location: \"app\",\n },\n platforms: [\n dockerbuild.Platform.Plan9_amd64,\n dockerbuild.Platform.Plan9_386,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_dockerbuild as dockerbuild\n\nimage = dockerbuild.Image(\"image\",\n context=dockerbuild.BuildContextArgs(\n location=\"app\",\n ),\n platforms=[\n dockerbuild.Platform.PLAN9_AMD64,\n dockerbuild.Platform.PLAN9_386,\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Dockerbuild.Image(\"image\", new()\n {\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Platforms = new[]\n {\n Dockerbuild.Platform.Plan9_amd64,\n Dockerbuild.Platform.Plan9_386,\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", \u0026dockerbuild.ImageArgs{\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPlatforms: dockerbuild.PlatformArray{\n\t\t\t\tdockerbuild.Platform_Plan9_amd64,\n\t\t\t\tdockerbuild.Platform_Plan9_386,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Multi-platform image\nname: multi-platform\nresources:\n image:\n properties:\n context:\n location: app\n platforms:\n - plan9/amd64\n - plan9/386\n type: dockerbuild:index:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .platforms( \n \"plan9/amd64\",\n \"plan9/386\")\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Registry export\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst image = new dockerbuild.Image(\"image\", {\n context: {\n location: \"app\",\n },\n push: true,\n registries: [{\n address: \"docker.io\",\n password: dockerHubPassword,\n username: \"pulumibot\",\n }],\n tags: [\"docker.io/pulumi/pulumi:3.107.0\"],\n});\nexport const ref = myImage.ref;\n```\n```python\nimport pulumi\nimport pulumi_dockerbuild as dockerbuild\n\nimage = dockerbuild.Image(\"image\",\n context=dockerbuild.BuildContextArgs(\n location=\"app\",\n ),\n push=True,\n registries=[dockerbuild.RegistryArgs(\n address=\"docker.io\",\n password=docker_hub_password,\n username=\"pulumibot\",\n )],\n tags=[\"docker.io/pulumi/pulumi:3.107.0\"])\npulumi.export(\"ref\", my_image[\"ref\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Dockerbuild.Image(\"image\", new()\n {\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Push = true,\n Registries = new[]\n {\n new Dockerbuild.Inputs.RegistryArgs\n {\n Address = \"docker.io\",\n Password = dockerHubPassword,\n Username = \"pulumibot\",\n },\n },\n Tags = new[]\n {\n \"docker.io/pulumi/pulumi:3.107.0\",\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"ref\"] = myImage.Ref,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", \u0026dockerbuild.ImageArgs{\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPush: pulumi.Bool(true),\n\t\t\tRegistries: dockerbuild.RegistryArray{\n\t\t\t\t\u0026dockerbuild.RegistryArgs{\n\t\t\t\t\tAddress: pulumi.String(\"docker.io\"),\n\t\t\t\t\tPassword: pulumi.Any(dockerHubPassword),\n\t\t\t\t\tUsername: pulumi.String(\"pulumibot\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"docker.io/pulumi/pulumi:3.107.0\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ref\", myImage.Ref)\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Registry export\nname: registry\noutputs:\n ref: ${my-image.ref}\nresources:\n image:\n properties:\n context:\n location: app\n push: true\n registries:\n - address: docker.io\n password: ${dockerHubPassword}\n username: pulumibot\n tags:\n - docker.io/pulumi/pulumi:3.107.0\n type: dockerbuild:index:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport com.pulumi.dockerbuild.inputs.RegistryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .push(true)\n .registries(RegistryArgs.builder()\n .address(\"docker.io\")\n .password(dockerHubPassword)\n .username(\"pulumibot\")\n .build())\n .tags(\"docker.io/pulumi/pulumi:3.107.0\")\n .build());\n\n ctx.export(\"ref\", myImage.ref());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Caching\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst image = new dockerbuild.Image(\"image\", {\n cacheFrom: [{\n local: {\n src: \"tmp/cache\",\n },\n }],\n cacheTo: [{\n local: {\n dest: \"tmp/cache\",\n mode: dockerbuild.CacheMode.Max,\n },\n }],\n context: {\n location: \"app\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_dockerbuild as dockerbuild\n\nimage = dockerbuild.Image(\"image\",\n cache_from=[dockerbuild.CacheFromArgs(\n local=dockerbuild.CacheFromLocalArgs(\n src=\"tmp/cache\",\n ),\n )],\n cache_to=[dockerbuild.CacheToArgs(\n local=dockerbuild.CacheToLocalArgs(\n dest=\"tmp/cache\",\n mode=dockerbuild.CacheMode.MAX,\n ),\n )],\n context=dockerbuild.BuildContextArgs(\n location=\"app\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Dockerbuild.Image(\"image\", new()\n {\n CacheFrom = new[]\n {\n new Dockerbuild.Inputs.CacheFromArgs\n {\n Local = new Dockerbuild.Inputs.CacheFromLocalArgs\n {\n Src = \"tmp/cache\",\n },\n },\n },\n CacheTo = new[]\n {\n new Dockerbuild.Inputs.CacheToArgs\n {\n Local = new Dockerbuild.Inputs.CacheToLocalArgs\n {\n Dest = \"tmp/cache\",\n Mode = Dockerbuild.CacheMode.Max,\n },\n },\n },\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", \u0026dockerbuild.ImageArgs{\n\t\t\tCacheFrom: dockerbuild.CacheFromArray{\n\t\t\t\t\u0026dockerbuild.CacheFromArgs{\n\t\t\t\t\tLocal: \u0026dockerbuild.CacheFromLocalArgs{\n\t\t\t\t\t\tSrc: pulumi.String(\"tmp/cache\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCacheTo: dockerbuild.CacheToArray{\n\t\t\t\t\u0026dockerbuild.CacheToArgs{\n\t\t\t\t\tLocal: \u0026dockerbuild.CacheToLocalArgs{\n\t\t\t\t\t\tDest: pulumi.String(\"tmp/cache\"),\n\t\t\t\t\t\tMode: dockerbuild.CacheModeMax,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Caching\nname: caching\nresources:\n image:\n properties:\n cacheFrom:\n - local:\n src: tmp/cache\n cacheTo:\n - local:\n dest: tmp/cache\n mode: max\n context:\n location: app\n type: dockerbuild:index:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.CacheFromArgs;\nimport com.pulumi.dockerbuild.inputs.CacheFromLocalArgs;\nimport com.pulumi.dockerbuild.inputs.CacheToArgs;\nimport com.pulumi.dockerbuild.inputs.CacheToLocalArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .cacheFrom(CacheFromArgs.builder()\n .local(CacheFromLocalArgs.builder()\n .src(\"tmp/cache\")\n .build())\n .build())\n .cacheTo(CacheToArgs.builder()\n .local(CacheToLocalArgs.builder()\n .dest(\"tmp/cache\")\n .mode(\"max\")\n .build())\n .build())\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Docker Build Cloud\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst image = new dockerbuild.Image(\"image\", {\n builder: {\n name: \"cloud-builder-name\",\n },\n context: {\n location: \"app\",\n },\n exec: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_dockerbuild as dockerbuild\n\nimage = dockerbuild.Image(\"image\",\n builder=dockerbuild.BuilderConfigArgs(\n name=\"cloud-builder-name\",\n ),\n context=dockerbuild.BuildContextArgs(\n location=\"app\",\n ),\n exec_=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Dockerbuild.Image(\"image\", new()\n {\n Builder = new Dockerbuild.Inputs.BuilderConfigArgs\n {\n Name = \"cloud-builder-name\",\n },\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Exec = true,\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", \u0026dockerbuild.ImageArgs{\n\t\t\tBuilder: \u0026dockerbuild.BuilderConfigArgs{\n\t\t\t\tName: pulumi.String(\"cloud-builder-name\"),\n\t\t\t},\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tExec: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Docker Build Cloud\nname: dbc\nresources:\n image:\n properties:\n builder:\n name: cloud-builder-name\n context:\n location: app\n exec: true\n type: dockerbuild:index:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuilderConfigArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .builder(BuilderConfigArgs.builder()\n .name(\"cloud-builder-name\")\n .build())\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .exec(true)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Build arguments\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst image = new dockerbuild.Image(\"image\", {\n buildArgs: {\n SET_ME_TO_TRUE: \"true\",\n },\n context: {\n location: \"app\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_dockerbuild as dockerbuild\n\nimage = dockerbuild.Image(\"image\",\n build_args={\n \"SET_ME_TO_TRUE\": \"true\",\n },\n context=dockerbuild.BuildContextArgs(\n location=\"app\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Dockerbuild.Image(\"image\", new()\n {\n BuildArgs = \n {\n { \"SET_ME_TO_TRUE\", \"true\" },\n },\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", \u0026dockerbuild.ImageArgs{\n\t\t\tBuildArgs: pulumi.StringMap{\n\t\t\t\t\"SET_ME_TO_TRUE\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Build arguments\nname: build-args\nresources:\n image:\n properties:\n buildArgs:\n SET_ME_TO_TRUE: \"true\"\n context:\n location: app\n type: dockerbuild:index:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .buildArgs(Map.of(\"SET_ME_TO_TRUE\", \"true\"))\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Build target\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst image = new dockerbuild.Image(\"image\", {\n context: {\n location: \"app\",\n },\n target: \"build-me\",\n});\n```\n```python\nimport pulumi\nimport pulumi_dockerbuild as dockerbuild\n\nimage = dockerbuild.Image(\"image\",\n context=dockerbuild.BuildContextArgs(\n location=\"app\",\n ),\n target=\"build-me\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Dockerbuild.Image(\"image\", new()\n {\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Target = \"build-me\",\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", \u0026dockerbuild.ImageArgs{\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tTarget: pulumi.String(\"build-me\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Build target\nname: build-target\nresources:\n image:\n properties:\n context:\n location: app\n target: build-me\n type: dockerbuild:index:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .target(\"build-me\")\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Named contexts\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst image = new dockerbuild.Image(\"image\", {context: {\n location: \"app\",\n named: {\n \"golang:latest\": {\n location: \"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\",\n },\n },\n}});\n```\n```python\nimport pulumi\nimport pulumi_dockerbuild as dockerbuild\n\nimage = dockerbuild.Image(\"image\", context=dockerbuild.BuildContextArgs(\n location=\"app\",\n named={\n \"golang:latest\": dockerbuild.ContextArgs(\n location=\"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\",\n ),\n },\n))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Dockerbuild.Image(\"image\", new()\n {\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n Named = \n {\n { \"golang:latest\", new Dockerbuild.Inputs.ContextArgs\n {\n Location = \"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\",\n } },\n },\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", \u0026dockerbuild.ImageArgs{\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t\tNamed: dockerbuild.ContextMap{\n\t\t\t\t\t\"golang:latest\": \u0026dockerbuild.ContextArgs{\n\t\t\t\t\t\tLocation: pulumi.String(\"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Named contexts\nname: named-contexts\nresources:\n image:\n properties:\n context:\n location: app\n named:\n golang:latest:\n location: docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\n type: dockerbuild:index:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"app\")\n .named(Map.of(\"golang:latest\", Map.of(\"location\", \"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\")))\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Remote context\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst image = new dockerbuild.Image(\"image\", {context: {\n location: \"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\",\n}});\n```\n```python\nimport pulumi\nimport pulumi_dockerbuild as dockerbuild\n\nimage = dockerbuild.Image(\"image\", context=dockerbuild.BuildContextArgs(\n location=\"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\",\n))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Dockerbuild.Image(\"image\", new()\n {\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\",\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", \u0026dockerbuild.ImageArgs{\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Remote context\nname: remote-context\nresources:\n image:\n properties:\n context:\n location: https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\n type: dockerbuild:index:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\")\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Inline Dockerfile\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst image = new dockerbuild.Image(\"image\", {\n context: {\n location: \"app\",\n },\n dockerfile: {\n inline: `FROM busybox\nCOPY hello.c ./\n`,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_dockerbuild as dockerbuild\n\nimage = dockerbuild.Image(\"image\",\n context=dockerbuild.BuildContextArgs(\n location=\"app\",\n ),\n dockerfile=dockerbuild.DockerfileArgs(\n inline=\"\"\"FROM busybox\nCOPY hello.c ./\n\"\"\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Dockerbuild.Image(\"image\", new()\n {\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Dockerfile = new Dockerbuild.Inputs.DockerfileArgs\n {\n Inline = @\"FROM busybox\nCOPY hello.c ./\n\",\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", \u0026dockerbuild.ImageArgs{\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tDockerfile: \u0026dockerbuild.DockerfileArgs{\n\t\t\t\tInline: pulumi.String(\"FROM busybox\\nCOPY hello.c ./\\n\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Inline Dockerfile\nname: inline\nresources:\n image:\n properties:\n context:\n location: app\n dockerfile:\n inline: |\n FROM busybox\n COPY hello.c ./\n type: dockerbuild:index:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport com.pulumi.dockerbuild.inputs.DockerfileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .dockerfile(DockerfileArgs.builder()\n .inline(\"\"\"\nFROM busybox\nCOPY hello.c ./\n \"\"\")\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Remote context\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst image = new dockerbuild.Image(\"image\", {\n context: {\n location: \"https://github.com/docker-library/hello-world.git\",\n },\n dockerfile: {\n location: \"app/Dockerfile\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_dockerbuild as dockerbuild\n\nimage = dockerbuild.Image(\"image\",\n context=dockerbuild.BuildContextArgs(\n location=\"https://github.com/docker-library/hello-world.git\",\n ),\n dockerfile=dockerbuild.DockerfileArgs(\n location=\"app/Dockerfile\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Dockerbuild.Image(\"image\", new()\n {\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"https://github.com/docker-library/hello-world.git\",\n },\n Dockerfile = new Dockerbuild.Inputs.DockerfileArgs\n {\n Location = \"app/Dockerfile\",\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", \u0026dockerbuild.ImageArgs{\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"https://github.com/docker-library/hello-world.git\"),\n\t\t\t},\n\t\t\tDockerfile: \u0026dockerbuild.DockerfileArgs{\n\t\t\t\tLocation: pulumi.String(\"app/Dockerfile\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Remote context\nname: remote-context\nresources:\n image:\n properties:\n context:\n location: https://github.com/docker-library/hello-world.git\n dockerfile:\n location: app/Dockerfile\n type: dockerbuild:index:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport com.pulumi.dockerbuild.inputs.DockerfileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"https://github.com/docker-library/hello-world.git\")\n .build())\n .dockerfile(DockerfileArgs.builder()\n .location(\"app/Dockerfile\")\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Local export\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst image = new dockerbuild.Image(\"image\", {\n context: {\n location: \"app\",\n },\n exports: [{\n docker: {\n tar: true,\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_dockerbuild as dockerbuild\n\nimage = dockerbuild.Image(\"image\",\n context=dockerbuild.BuildContextArgs(\n location=\"app\",\n ),\n exports=[dockerbuild.ExportArgs(\n docker=dockerbuild.ExportDockerArgs(\n tar=True,\n ),\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image = new Dockerbuild.Image(\"image\", new()\n {\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Exports = new[]\n {\n new Dockerbuild.Inputs.ExportArgs\n {\n Docker = new Dockerbuild.Inputs.ExportDockerArgs\n {\n Tar = true,\n },\n },\n },\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", \u0026dockerbuild.ImageArgs{\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tExports: dockerbuild.ExportArray{\n\t\t\t\t\u0026dockerbuild.ExportArgs{\n\t\t\t\t\tDocker: \u0026dockerbuild.ExportDockerArgs{\n\t\t\t\t\t\tTar: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Local export\nname: docker-load\nresources:\n image:\n properties:\n context:\n location: app\n exports:\n - docker:\n tar: true\n type: dockerbuild:index:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport com.pulumi.dockerbuild.inputs.ExportArgs;\nimport com.pulumi.dockerbuild.inputs.ExportDockerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder() \n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .exports(ExportArgs.builder()\n .docker(ExportDockerArgs.builder()\n .tar(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}", "properties": { "addHosts": { "type": "array", @@ -1390,7 +1390,7 @@ } }, "dockerbuild:index:Index": { - "description": "An index (or manifest list) referencing one or more existing images.\n\nUseful for crafting a multi-platform image from several\nplatform-specific images.\n\nThis creates an OCI image index or a Docker manifest list depending on\nthe media types of the source images.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Multi-platform registry caching\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst amd64 = new docker.buildx.Image(\"amd64\", {\n cacheFrom: [{\n registry: {\n ref: \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n }],\n cacheTo: [{\n registry: {\n mode: docker.buildx.image.CacheMode.Max,\n ref: \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n }],\n context: {\n location: \"app\",\n },\n platforms: [docker.buildx.image.Platform.Linux_amd64],\n tags: [\"docker.io/pulumi/pulumi:3.107.0-amd64\"],\n});\nconst arm64 = new docker.buildx.Image(\"arm64\", {\n cacheFrom: [{\n registry: {\n ref: \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n }],\n cacheTo: [{\n registry: {\n mode: docker.buildx.image.CacheMode.Max,\n ref: \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n }],\n context: {\n location: \"app\",\n },\n platforms: [docker.buildx.image.Platform.Linux_arm64],\n tags: [\"docker.io/pulumi/pulumi:3.107.0-arm64\"],\n});\nconst index = new docker.buildx.Index(\"index\", {\n sources: [\n amd64.ref,\n arm64.ref,\n ],\n tag: \"docker.io/pulumi/pulumi:3.107.0\",\n});\nexport const ref = index.ref;\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\namd64 = docker.buildx.Image(\"amd64\",\n cache_from=[docker.buildx.CacheFromArgs(\n registry=docker.buildx.CacheFromRegistryArgs(\n ref=\"docker.io/pulumi/pulumi:cache-amd64\",\n ),\n )],\n cache_to=[docker.buildx.CacheToArgs(\n registry=docker.buildx.CacheToRegistryArgs(\n mode=docker.buildx.image.CacheMode.MAX,\n ref=\"docker.io/pulumi/pulumi:cache-amd64\",\n ),\n )],\n context=docker.buildx.BuildContextArgs(\n location=\"app\",\n ),\n platforms=[docker.buildx.image.Platform.LINUX_AMD64],\n tags=[\"docker.io/pulumi/pulumi:3.107.0-amd64\"])\narm64 = docker.buildx.Image(\"arm64\",\n cache_from=[docker.buildx.CacheFromArgs(\n registry=docker.buildx.CacheFromRegistryArgs(\n ref=\"docker.io/pulumi/pulumi:cache-arm64\",\n ),\n )],\n cache_to=[docker.buildx.CacheToArgs(\n registry=docker.buildx.CacheToRegistryArgs(\n mode=docker.buildx.image.CacheMode.MAX,\n ref=\"docker.io/pulumi/pulumi:cache-arm64\",\n ),\n )],\n context=docker.buildx.BuildContextArgs(\n location=\"app\",\n ),\n platforms=[docker.buildx.image.Platform.LINUX_ARM64],\n tags=[\"docker.io/pulumi/pulumi:3.107.0-arm64\"])\nindex = docker.buildx.Index(\"index\",\n sources=[\n amd64.ref,\n arm64.ref,\n ],\n tag=\"docker.io/pulumi/pulumi:3.107.0\")\npulumi.export(\"ref\", index.ref)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var amd64 = new Docker.Buildx.Image(\"amd64\", new()\n {\n CacheFrom = new[]\n {\n new Docker.Buildx.Inputs.CacheFromArgs\n {\n Registry = new Docker.Buildx.Inputs.CacheFromRegistryArgs\n {\n Ref = \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n },\n },\n CacheTo = new[]\n {\n new Docker.Buildx.Inputs.CacheToArgs\n {\n Registry = new Docker.Buildx.Inputs.CacheToRegistryArgs\n {\n Mode = Docker.Buildx.Image.CacheMode.Max,\n Ref = \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n },\n },\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Platforms = new[]\n {\n Docker.Buildx.Image.Platform.Linux_amd64,\n },\n Tags = new[]\n {\n \"docker.io/pulumi/pulumi:3.107.0-amd64\",\n },\n });\n\n var arm64 = new Docker.Buildx.Image(\"arm64\", new()\n {\n CacheFrom = new[]\n {\n new Docker.Buildx.Inputs.CacheFromArgs\n {\n Registry = new Docker.Buildx.Inputs.CacheFromRegistryArgs\n {\n Ref = \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n },\n },\n CacheTo = new[]\n {\n new Docker.Buildx.Inputs.CacheToArgs\n {\n Registry = new Docker.Buildx.Inputs.CacheToRegistryArgs\n {\n Mode = Docker.Buildx.Image.CacheMode.Max,\n Ref = \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n },\n },\n Context = new Docker.Buildx.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Platforms = new[]\n {\n Docker.Buildx.Image.Platform.Linux_arm64,\n },\n Tags = new[]\n {\n \"docker.io/pulumi/pulumi:3.107.0-arm64\",\n },\n });\n\n var index = new Docker.Buildx.Index(\"index\", new()\n {\n Sources = new[]\n {\n amd64.Ref,\n arm64.Ref,\n },\n Tag = \"docker.io/pulumi/pulumi:3.107.0\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"ref\"] = index.Ref,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker/buildx\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tamd64, err := buildx.NewImage(ctx, \"amd64\", \u0026buildx.ImageArgs{\n\t\t\tCacheFrom: buildx.CacheFromArray{\n\t\t\t\t\u0026buildx.CacheFromArgs{\n\t\t\t\t\tRegistry: \u0026buildx.CacheFromRegistryArgs{\n\t\t\t\t\t\tRef: pulumi.String(\"docker.io/pulumi/pulumi:cache-amd64\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCacheTo: buildx.CacheToArray{\n\t\t\t\t\u0026buildx.CacheToArgs{\n\t\t\t\t\tRegistry: \u0026buildx.CacheToRegistryArgs{\n\t\t\t\t\t\tMode: buildx.CacheModeMax,\n\t\t\t\t\t\tRef: pulumi.String(\"docker.io/pulumi/pulumi:cache-amd64\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPlatforms: buildx.PlatformArray{\n\t\t\t\tbuildx.Platform_Linux_amd64,\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"docker.io/pulumi/pulumi:3.107.0-amd64\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tarm64, err := buildx.NewImage(ctx, \"arm64\", \u0026buildx.ImageArgs{\n\t\t\tCacheFrom: buildx.CacheFromArray{\n\t\t\t\t\u0026buildx.CacheFromArgs{\n\t\t\t\t\tRegistry: \u0026buildx.CacheFromRegistryArgs{\n\t\t\t\t\t\tRef: pulumi.String(\"docker.io/pulumi/pulumi:cache-arm64\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCacheTo: buildx.CacheToArray{\n\t\t\t\t\u0026buildx.CacheToArgs{\n\t\t\t\t\tRegistry: \u0026buildx.CacheToRegistryArgs{\n\t\t\t\t\t\tMode: buildx.CacheModeMax,\n\t\t\t\t\t\tRef: pulumi.String(\"docker.io/pulumi/pulumi:cache-arm64\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tContext: \u0026buildx.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPlatforms: buildx.PlatformArray{\n\t\t\t\tbuildx.Platform_Linux_arm64,\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"docker.io/pulumi/pulumi:3.107.0-arm64\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tindex, err := buildx.NewIndex(ctx, \"index\", \u0026buildx.IndexArgs{\n\t\t\tSources: pulumi.StringArray{\n\t\t\t\tamd64.Ref,\n\t\t\t\tarm64.Ref,\n\t\t\t},\n\t\t\tTag: pulumi.String(\"docker.io/pulumi/pulumi:3.107.0\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ref\", index.Ref)\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Multi-platform registry caching\nname: registry-caching\noutputs:\n ref: ${index.ref}\nresources:\n amd64:\n properties:\n cacheFrom:\n - registry:\n ref: docker.io/pulumi/pulumi:cache-amd64\n cacheTo:\n - registry:\n mode: max\n ref: docker.io/pulumi/pulumi:cache-amd64\n context:\n location: app\n platforms:\n - linux/amd64\n tags:\n - docker.io/pulumi/pulumi:3.107.0-amd64\n type: docker:buildx/image:Image\n arm64:\n properties:\n cacheFrom:\n - registry:\n ref: docker.io/pulumi/pulumi:cache-arm64\n cacheTo:\n - registry:\n mode: max\n ref: docker.io/pulumi/pulumi:cache-arm64\n context:\n location: app\n platforms:\n - linux/arm64\n tags:\n - docker.io/pulumi/pulumi:3.107.0-arm64\n type: docker:buildx/image:Image\n index:\n properties:\n sources:\n - ${amd64.ref}\n - ${arm64.ref}\n tag: docker.io/pulumi/pulumi:3.107.0\n type: docker:buildx/image:Index\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.buildx.Image;\nimport com.pulumi.docker.buildx.ImageArgs;\nimport com.pulumi.docker.buildx.inputs.CacheFromArgs;\nimport com.pulumi.docker.buildx.inputs.CacheFromRegistryArgs;\nimport com.pulumi.docker.buildx.inputs.CacheToArgs;\nimport com.pulumi.docker.buildx.inputs.CacheToRegistryArgs;\nimport com.pulumi.docker.buildx.inputs.BuildContextArgs;\nimport com.pulumi.docker.buildx.Index;\nimport com.pulumi.docker.buildx.IndexArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var amd64 = new Image(\"amd64\", ImageArgs.builder() \n .cacheFrom(CacheFromArgs.builder()\n .registry(CacheFromRegistryArgs.builder()\n .ref(\"docker.io/pulumi/pulumi:cache-amd64\")\n .build())\n .build())\n .cacheTo(CacheToArgs.builder()\n .registry(CacheToRegistryArgs.builder()\n .mode(\"max\")\n .ref(\"docker.io/pulumi/pulumi:cache-amd64\")\n .build())\n .build())\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .platforms(\"linux/amd64\")\n .tags(\"docker.io/pulumi/pulumi:3.107.0-amd64\")\n .build());\n\n var arm64 = new Image(\"arm64\", ImageArgs.builder() \n .cacheFrom(CacheFromArgs.builder()\n .registry(CacheFromRegistryArgs.builder()\n .ref(\"docker.io/pulumi/pulumi:cache-arm64\")\n .build())\n .build())\n .cacheTo(CacheToArgs.builder()\n .registry(CacheToRegistryArgs.builder()\n .mode(\"max\")\n .ref(\"docker.io/pulumi/pulumi:cache-arm64\")\n .build())\n .build())\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .platforms(\"linux/arm64\")\n .tags(\"docker.io/pulumi/pulumi:3.107.0-arm64\")\n .build());\n\n var index = new Index(\"index\", IndexArgs.builder() \n .sources( \n amd64.ref(),\n arm64.ref())\n .tag(\"docker.io/pulumi/pulumi:3.107.0\")\n .build());\n\n ctx.export(\"ref\", index.ref());\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "An index (or manifest list) referencing one or more existing images.\n\nUseful for crafting a multi-platform image from several\nplatform-specific images.\n\nThis creates an OCI image index or a Docker manifest list depending on\nthe media types of the source images.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Multi-platform registry caching\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as dockerbuild from \"@pulumi/dockerbuild\";\n\nconst amd64 = new dockerbuild.Image(\"amd64\", {\n cacheFrom: [{\n registry: {\n ref: \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n }],\n cacheTo: [{\n registry: {\n mode: dockerbuild.CacheMode.Max,\n ref: \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n }],\n context: {\n location: \"app\",\n },\n platforms: [dockerbuild.Platform.Linux_amd64],\n tags: [\"docker.io/pulumi/pulumi:3.107.0-amd64\"],\n});\nconst arm64 = new dockerbuild.Image(\"arm64\", {\n cacheFrom: [{\n registry: {\n ref: \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n }],\n cacheTo: [{\n registry: {\n mode: dockerbuild.CacheMode.Max,\n ref: \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n }],\n context: {\n location: \"app\",\n },\n platforms: [dockerbuild.Platform.Linux_arm64],\n tags: [\"docker.io/pulumi/pulumi:3.107.0-arm64\"],\n});\nconst index = new dockerbuild.Index(\"index\", {\n sources: [\n amd64.ref,\n arm64.ref,\n ],\n tag: \"docker.io/pulumi/pulumi:3.107.0\",\n});\nexport const ref = index.ref;\n```\n```python\nimport pulumi\nimport pulumi_dockerbuild as dockerbuild\n\namd64 = dockerbuild.Image(\"amd64\",\n cache_from=[dockerbuild.CacheFromArgs(\n registry=dockerbuild.CacheFromRegistryArgs(\n ref=\"docker.io/pulumi/pulumi:cache-amd64\",\n ),\n )],\n cache_to=[dockerbuild.CacheToArgs(\n registry=dockerbuild.CacheToRegistryArgs(\n mode=dockerbuild.CacheMode.MAX,\n ref=\"docker.io/pulumi/pulumi:cache-amd64\",\n ),\n )],\n context=dockerbuild.BuildContextArgs(\n location=\"app\",\n ),\n platforms=[dockerbuild.Platform.LINUX_AMD64],\n tags=[\"docker.io/pulumi/pulumi:3.107.0-amd64\"])\narm64 = dockerbuild.Image(\"arm64\",\n cache_from=[dockerbuild.CacheFromArgs(\n registry=dockerbuild.CacheFromRegistryArgs(\n ref=\"docker.io/pulumi/pulumi:cache-arm64\",\n ),\n )],\n cache_to=[dockerbuild.CacheToArgs(\n registry=dockerbuild.CacheToRegistryArgs(\n mode=dockerbuild.CacheMode.MAX,\n ref=\"docker.io/pulumi/pulumi:cache-arm64\",\n ),\n )],\n context=dockerbuild.BuildContextArgs(\n location=\"app\",\n ),\n platforms=[dockerbuild.Platform.LINUX_ARM64],\n tags=[\"docker.io/pulumi/pulumi:3.107.0-arm64\"])\nindex = dockerbuild.Index(\"index\",\n sources=[\n amd64.ref,\n arm64.ref,\n ],\n tag=\"docker.io/pulumi/pulumi:3.107.0\")\npulumi.export(\"ref\", index.ref)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Dockerbuild = Pulumi.Dockerbuild;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var amd64 = new Dockerbuild.Image(\"amd64\", new()\n {\n CacheFrom = new[]\n {\n new Dockerbuild.Inputs.CacheFromArgs\n {\n Registry = new Dockerbuild.Inputs.CacheFromRegistryArgs\n {\n Ref = \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n },\n },\n CacheTo = new[]\n {\n new Dockerbuild.Inputs.CacheToArgs\n {\n Registry = new Dockerbuild.Inputs.CacheToRegistryArgs\n {\n Mode = Dockerbuild.CacheMode.Max,\n Ref = \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n },\n },\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Platforms = new[]\n {\n Dockerbuild.Platform.Linux_amd64,\n },\n Tags = new[]\n {\n \"docker.io/pulumi/pulumi:3.107.0-amd64\",\n },\n });\n\n var arm64 = new Dockerbuild.Image(\"arm64\", new()\n {\n CacheFrom = new[]\n {\n new Dockerbuild.Inputs.CacheFromArgs\n {\n Registry = new Dockerbuild.Inputs.CacheFromRegistryArgs\n {\n Ref = \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n },\n },\n CacheTo = new[]\n {\n new Dockerbuild.Inputs.CacheToArgs\n {\n Registry = new Dockerbuild.Inputs.CacheToRegistryArgs\n {\n Mode = Dockerbuild.CacheMode.Max,\n Ref = \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n },\n },\n Context = new Dockerbuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Platforms = new[]\n {\n Dockerbuild.Platform.Linux_arm64,\n },\n Tags = new[]\n {\n \"docker.io/pulumi/pulumi:3.107.0-arm64\",\n },\n });\n\n var index = new Dockerbuild.Index(\"index\", new()\n {\n Sources = new[]\n {\n amd64.Ref,\n arm64.Ref,\n },\n Tag = \"docker.io/pulumi/pulumi:3.107.0\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"ref\"] = index.Ref,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tamd64, err := dockerbuild.NewImage(ctx, \"amd64\", \u0026dockerbuild.ImageArgs{\n\t\t\tCacheFrom: dockerbuild.CacheFromArray{\n\t\t\t\t\u0026dockerbuild.CacheFromArgs{\n\t\t\t\t\tRegistry: \u0026dockerbuild.CacheFromRegistryArgs{\n\t\t\t\t\t\tRef: pulumi.String(\"docker.io/pulumi/pulumi:cache-amd64\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCacheTo: dockerbuild.CacheToArray{\n\t\t\t\t\u0026dockerbuild.CacheToArgs{\n\t\t\t\t\tRegistry: \u0026dockerbuild.CacheToRegistryArgs{\n\t\t\t\t\t\tMode: dockerbuild.CacheModeMax,\n\t\t\t\t\t\tRef: pulumi.String(\"docker.io/pulumi/pulumi:cache-amd64\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPlatforms: dockerbuild.PlatformArray{\n\t\t\t\tdockerbuild.Platform_Linux_amd64,\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"docker.io/pulumi/pulumi:3.107.0-amd64\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tarm64, err := dockerbuild.NewImage(ctx, \"arm64\", \u0026dockerbuild.ImageArgs{\n\t\t\tCacheFrom: dockerbuild.CacheFromArray{\n\t\t\t\t\u0026dockerbuild.CacheFromArgs{\n\t\t\t\t\tRegistry: \u0026dockerbuild.CacheFromRegistryArgs{\n\t\t\t\t\t\tRef: pulumi.String(\"docker.io/pulumi/pulumi:cache-arm64\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCacheTo: dockerbuild.CacheToArray{\n\t\t\t\t\u0026dockerbuild.CacheToArgs{\n\t\t\t\t\tRegistry: \u0026dockerbuild.CacheToRegistryArgs{\n\t\t\t\t\t\tMode: dockerbuild.CacheModeMax,\n\t\t\t\t\t\tRef: pulumi.String(\"docker.io/pulumi/pulumi:cache-arm64\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tContext: \u0026dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPlatforms: dockerbuild.PlatformArray{\n\t\t\t\tdockerbuild.Platform_Linux_arm64,\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"docker.io/pulumi/pulumi:3.107.0-arm64\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tindex, err := dockerbuild.NewIndex(ctx, \"index\", \u0026dockerbuild.IndexArgs{\n\t\t\tSources: pulumi.StringArray{\n\t\t\t\tamd64.Ref,\n\t\t\t\tarm64.Ref,\n\t\t\t},\n\t\t\tTag: pulumi.String(\"docker.io/pulumi/pulumi:3.107.0\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ref\", index.Ref)\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Multi-platform registry caching\nname: registry-caching\noutputs:\n ref: ${index.ref}\nresources:\n amd64:\n properties:\n cacheFrom:\n - registry:\n ref: docker.io/pulumi/pulumi:cache-amd64\n cacheTo:\n - registry:\n mode: max\n ref: docker.io/pulumi/pulumi:cache-amd64\n context:\n location: app\n platforms:\n - linux/amd64\n tags:\n - docker.io/pulumi/pulumi:3.107.0-amd64\n type: dockerbuild:index:Image\n arm64:\n properties:\n cacheFrom:\n - registry:\n ref: docker.io/pulumi/pulumi:cache-arm64\n cacheTo:\n - registry:\n mode: max\n ref: docker.io/pulumi/pulumi:cache-arm64\n context:\n location: app\n platforms:\n - linux/arm64\n tags:\n - docker.io/pulumi/pulumi:3.107.0-arm64\n type: dockerbuild:index:Image\n index:\n properties:\n sources:\n - ${amd64.ref}\n - ${arm64.ref}\n tag: docker.io/pulumi/pulumi:3.107.0\n type: dockerbuild:index:Index\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.CacheFromArgs;\nimport com.pulumi.dockerbuild.inputs.CacheFromRegistryArgs;\nimport com.pulumi.dockerbuild.inputs.CacheToArgs;\nimport com.pulumi.dockerbuild.inputs.CacheToRegistryArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport com.pulumi.dockerbuild.Index;\nimport com.pulumi.dockerbuild.IndexArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var amd64 = new Image(\"amd64\", ImageArgs.builder() \n .cacheFrom(CacheFromArgs.builder()\n .registry(CacheFromRegistryArgs.builder()\n .ref(\"docker.io/pulumi/pulumi:cache-amd64\")\n .build())\n .build())\n .cacheTo(CacheToArgs.builder()\n .registry(CacheToRegistryArgs.builder()\n .mode(\"max\")\n .ref(\"docker.io/pulumi/pulumi:cache-amd64\")\n .build())\n .build())\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .platforms(\"linux/amd64\")\n .tags(\"docker.io/pulumi/pulumi:3.107.0-amd64\")\n .build());\n\n var arm64 = new Image(\"arm64\", ImageArgs.builder() \n .cacheFrom(CacheFromArgs.builder()\n .registry(CacheFromRegistryArgs.builder()\n .ref(\"docker.io/pulumi/pulumi:cache-arm64\")\n .build())\n .build())\n .cacheTo(CacheToArgs.builder()\n .registry(CacheToRegistryArgs.builder()\n .mode(\"max\")\n .ref(\"docker.io/pulumi/pulumi:cache-arm64\")\n .build())\n .build())\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .platforms(\"linux/arm64\")\n .tags(\"docker.io/pulumi/pulumi:3.107.0-arm64\")\n .build());\n\n var index = new Index(\"index\", IndexArgs.builder() \n .sources( \n amd64.ref(),\n arm64.ref())\n .tag(\"docker.io/pulumi/pulumi:3.107.0\")\n .build());\n\n ctx.export(\"ref\", index.ref());\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}", "properties": { "push": { "type": "boolean", diff --git a/provider/internal/embed/image-examples.md b/provider/internal/embed/image-examples.md index 061c280..a70cb7d 100644 --- a/provider/internal/embed/image-examples.md +++ b/provider/internal/embed/image-examples.md @@ -6,13 +6,13 @@ ```typescript import * as pulumi from "@pulumi/pulumi"; import * as aws from "@pulumi/aws"; -import * as docker from "@pulumi/docker"; +import * as dockerbuild from "@pulumi/dockerbuild"; const ecrRepository = new aws.ecr.Repository("ecr-repository", {}); const authToken = aws.ecr.getAuthorizationTokenOutput({ registryId: ecrRepository.registryId, }); -const myImage = new docker.buildx.Image("my-image", { +const myImage = new dockerbuild.Image("my-image", { cacheFrom: [{ registry: { ref: pulumi.interpolate`${ecrRepository.repositoryUrl}:cache`, @@ -41,28 +41,28 @@ export const ref = myImage.ref; ```python import pulumi import pulumi_aws as aws -import pulumi_docker as docker +import pulumi_dockerbuild as dockerbuild ecr_repository = aws.ecr.Repository("ecr-repository") auth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id) -my_image = docker.buildx.Image("my-image", - cache_from=[docker.buildx.CacheFromArgs( - registry=docker.buildx.CacheFromRegistryArgs( +my_image = dockerbuild.Image("my-image", + cache_from=[dockerbuild.CacheFromArgs( + registry=dockerbuild.CacheFromRegistryArgs( ref=ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:cache"), ), )], - cache_to=[docker.buildx.CacheToArgs( - registry=docker.buildx.CacheToRegistryArgs( + cache_to=[dockerbuild.CacheToArgs( + registry=dockerbuild.CacheToRegistryArgs( image_manifest=True, oci_media_types=True, ref=ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:cache"), ), )], - context=docker.buildx.BuildContextArgs( + context=dockerbuild.BuildContextArgs( location="./app", ), push=True, - registries=[docker.buildx.RegistryAuthArgs( + registries=[dockerbuild.RegistryArgs( address=ecr_repository.repository_url, password=auth_token.password, username=auth_token.user_name, @@ -75,7 +75,7 @@ using System.Collections.Generic; using System.Linq; using Pulumi; using Aws = Pulumi.Aws; -using Docker = Pulumi.Docker; +using Dockerbuild = Pulumi.Dockerbuild; return await Deployment.RunAsync(() => { @@ -86,13 +86,13 @@ return await Deployment.RunAsync(() => RegistryId = ecrRepository.RegistryId, }); - var myImage = new Docker.Buildx.Image("my-image", new() + var myImage = new Dockerbuild.Image("my-image", new() { CacheFrom = new[] { - new Docker.Buildx.Inputs.CacheFromArgs + new Dockerbuild.Inputs.CacheFromArgs { - Registry = new Docker.Buildx.Inputs.CacheFromRegistryArgs + Registry = new Dockerbuild.Inputs.CacheFromRegistryArgs { Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl => $"{repositoryUrl}:cache"), }, @@ -100,9 +100,9 @@ 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 { ImageManifest = true, OciMediaTypes = true, @@ -110,14 +110,14 @@ return await Deployment.RunAsync(() => }, }, }, - Context = new Docker.Buildx.Inputs.BuildContextArgs + Context = new Dockerbuild.Inputs.BuildContextArgs { Location = "./app", }, Push = true, Registries = new[] { - new Docker.Buildx.Inputs.RegistryAuthArgs + new Dockerbuild.Inputs.RegistryArgs { Address = ecrRepository.RepositoryUrl, Password = authToken.Apply(getAuthorizationTokenResult => getAuthorizationTokenResult.Password), @@ -144,7 +144,7 @@ import ( "fmt" "github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecr" - "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" ) @@ -157,19 +157,19 @@ func main() { authToken := ecr.GetAuthorizationTokenOutput(ctx, ecr.GetAuthorizationTokenOutputArgs{ RegistryId: ecrRepository.RegistryId, }, nil) - myImage, err := buildx.NewImage(ctx, "my-image", &buildx.ImageArgs{ - CacheFrom: buildx.CacheFromArray{ - &buildx.CacheFromArgs{ - Registry: &buildx.CacheFromRegistryArgs{ + myImage, err := dockerbuild.NewImage(ctx, "my-image", &dockerbuild.ImageArgs{ + CacheFrom: dockerbuild.CacheFromArray{ + &dockerbuild.CacheFromArgs{ + Registry: &dockerbuild.CacheFromRegistryArgs{ Ref: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) { return fmt.Sprintf("%v:cache", repositoryUrl), nil }).(pulumi.StringOutput), }, }, }, - CacheTo: buildx.CacheToArray{ - &buildx.CacheToArgs{ - Registry: &buildx.CacheToRegistryArgs{ + CacheTo: dockerbuild.CacheToArray{ + &dockerbuild.CacheToArgs{ + Registry: &dockerbuild.CacheToRegistryArgs{ ImageManifest: pulumi.Bool(true), OciMediaTypes: pulumi.Bool(true), Ref: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) { @@ -178,12 +178,12 @@ func main() { }, }, }, - Context: &buildx.BuildContextArgs{ + Context: &dockerbuild.BuildContextArgs{ Location: pulumi.String("./app"), }, Push: pulumi.Bool(true), - Registries: buildx.RegistryAuthArray{ - &buildx.RegistryAuthArgs{ + Registries: dockerbuild.RegistryArray{ + &dockerbuild.RegistryArgs{ Address: ecrRepository.RepositoryUrl, Password: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) { return &authToken.Password, nil @@ -234,7 +234,7 @@ resources: username: ${auth-token.userName} tags: - ${ecr-repository.repositoryUrl}:latest - type: docker:buildx/image:Image + type: dockerbuild:Image runtime: yaml variables: auth-token: @@ -250,14 +250,14 @@ import com.pulumi.core.Output; import com.pulumi.aws.ecr.Repository; import com.pulumi.aws.ecr.EcrFunctions; import com.pulumi.aws.ecr.inputs.GetAuthorizationTokenArgs; -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.inputs.RegistryAuthArgs; +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.inputs.RegistryArgs; import java.util.List; import java.util.ArrayList; import java.util.Map; @@ -294,7 +294,7 @@ public class App { .location("./app") .build()) .push(true) - .registries(RegistryAuthArgs.builder() + .registries(RegistryArgs.builder() .address(ecrRepository.repositoryUrl()) .password(authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult).applyValue(authToken -> authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult.password()))) .username(authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult).applyValue(authToken -> authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult.userName()))) @@ -312,49 +312,49 @@ public class App { ```typescript import * as pulumi from "@pulumi/pulumi"; -import * as docker from "@pulumi/docker"; +import * as dockerbuild from "@pulumi/dockerbuild"; -const image = new docker.buildx.Image("image", { +const image = new dockerbuild.Image("image", { context: { location: "app", }, platforms: [ - docker.buildx.image.Platform.Plan9_amd64, - docker.buildx.image.Platform.Plan9_386, + dockerbuild.Platform.Plan9_amd64, + dockerbuild.Platform.Plan9_386, ], }); ``` ```python import pulumi -import pulumi_docker as docker +import pulumi_dockerbuild as dockerbuild -image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( +image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), platforms=[ - docker.buildx.image.Platform.PLAN9_AMD64, - docker.buildx.image.Platform.PLAN9_386, + dockerbuild.Platform.PLAN9_AMD64, + dockerbuild.Platform.PLAN9_386, ]) ``` ```csharp using System.Collections.Generic; using System.Linq; using Pulumi; -using Docker = Pulumi.Docker; +using Dockerbuild = Pulumi.Dockerbuild; return await Deployment.RunAsync(() => { - var image = new Docker.Buildx.Image("image", new() + var image = new Dockerbuild.Image("image", new() { - Context = new Docker.Buildx.Inputs.BuildContextArgs + Context = new Dockerbuild.Inputs.BuildContextArgs { Location = "app", }, Platforms = new[] { - Docker.Buildx.Image.Platform.Plan9_amd64, - Docker.Buildx.Image.Platform.Plan9_386, + Dockerbuild.Platform.Plan9_amd64, + Dockerbuild.Platform.Plan9_386, }, }); @@ -365,19 +365,19 @@ 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 { - _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ - Context: &buildx.BuildContextArgs{ + _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ + Context: &dockerbuild.BuildContextArgs{ Location: pulumi.String("app"), }, - Platforms: buildx.PlatformArray{ - buildx.Platform_Plan9_amd64, - buildx.Platform_Plan9_386, + Platforms: dockerbuild.PlatformArray{ + dockerbuild.Platform_Plan9_amd64, + dockerbuild.Platform_Plan9_386, }, }) if err != nil { @@ -398,7 +398,7 @@ resources: platforms: - plan9/amd64 - plan9/386 - type: docker:buildx/image:Image + type: dockerbuild:Image runtime: yaml ``` ```java @@ -407,9 +407,9 @@ 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.BuildContextArgs; +import com.pulumi.dockerbuild.Image; +import com.pulumi.dockerbuild.ImageArgs; +import com.pulumi.dockerbuild.inputs.BuildContextArgs; import java.util.List; import java.util.ArrayList; import java.util.Map; @@ -441,9 +441,9 @@ public class App { ```typescript import * as pulumi from "@pulumi/pulumi"; -import * as docker from "@pulumi/docker"; +import * as dockerbuild from "@pulumi/dockerbuild"; -const image = new docker.buildx.Image("image", { +const image = new dockerbuild.Image("image", { context: { location: "app", }, @@ -459,14 +459,14 @@ export const ref = myImage.ref; ``` ```python import pulumi -import pulumi_docker as docker +import pulumi_dockerbuild as dockerbuild -image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( +image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), push=True, - registries=[docker.buildx.RegistryAuthArgs( + registries=[dockerbuild.RegistryArgs( address="docker.io", password=docker_hub_password, username="pulumibot", @@ -478,20 +478,20 @@ pulumi.export("ref", my_image["ref"]) using System.Collections.Generic; using System.Linq; using Pulumi; -using Docker = Pulumi.Docker; +using Dockerbuild = Pulumi.Dockerbuild; return await Deployment.RunAsync(() => { - var image = new Docker.Buildx.Image("image", new() + var image = new Dockerbuild.Image("image", new() { - Context = new Docker.Buildx.Inputs.BuildContextArgs + Context = new Dockerbuild.Inputs.BuildContextArgs { Location = "app", }, Push = true, Registries = new[] { - new Docker.Buildx.Inputs.RegistryAuthArgs + new Dockerbuild.Inputs.RegistryArgs { Address = "docker.io", Password = dockerHubPassword, @@ -515,19 +515,19 @@ 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 { - _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ - Context: &buildx.BuildContextArgs{ + _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ + Context: &dockerbuild.BuildContextArgs{ Location: pulumi.String("app"), }, Push: pulumi.Bool(true), - Registries: buildx.RegistryAuthArray{ - &buildx.RegistryAuthArgs{ + Registries: dockerbuild.RegistryArray{ + &dockerbuild.RegistryArgs{ Address: pulumi.String("docker.io"), Password: pulumi.Any(dockerHubPassword), Username: pulumi.String("pulumibot"), @@ -562,7 +562,7 @@ resources: username: pulumibot tags: - docker.io/pulumi/pulumi:3.107.0 - type: docker:buildx/image:Image + type: dockerbuild:Image runtime: yaml ``` ```java @@ -571,10 +571,10 @@ 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.BuildContextArgs; -import com.pulumi.docker.buildx.inputs.RegistryAuthArgs; +import com.pulumi.dockerbuild.Image; +import com.pulumi.dockerbuild.ImageArgs; +import com.pulumi.dockerbuild.inputs.BuildContextArgs; +import com.pulumi.dockerbuild.inputs.RegistryArgs; import java.util.List; import java.util.ArrayList; import java.util.Map; @@ -593,7 +593,7 @@ public class App { .location("app") .build()) .push(true) - .registries(RegistryAuthArgs.builder() + .registries(RegistryArgs.builder() .address("docker.io") .password(dockerHubPassword) .username("pulumibot") @@ -611,9 +611,9 @@ public class App { ```typescript import * as pulumi from "@pulumi/pulumi"; -import * as docker from "@pulumi/docker"; +import * as dockerbuild from "@pulumi/dockerbuild"; -const image = new docker.buildx.Image("image", { +const image = new dockerbuild.Image("image", { cacheFrom: [{ local: { src: "tmp/cache", @@ -622,7 +622,7 @@ const image = new docker.buildx.Image("image", { cacheTo: [{ local: { dest: "tmp/cache", - mode: docker.buildx.image.CacheMode.Max, + mode: dockerbuild.CacheMode.Max, }, }], context: { @@ -632,21 +632,21 @@ const image = new docker.buildx.Image("image", { ``` ```python import pulumi -import pulumi_docker as docker +import pulumi_dockerbuild as dockerbuild -image = docker.buildx.Image("image", - cache_from=[docker.buildx.CacheFromArgs( - local=docker.buildx.CacheFromLocalArgs( +image = dockerbuild.Image("image", + cache_from=[dockerbuild.CacheFromArgs( + local=dockerbuild.CacheFromLocalArgs( src="tmp/cache", ), )], - cache_to=[docker.buildx.CacheToArgs( - local=docker.buildx.CacheToLocalArgs( + cache_to=[dockerbuild.CacheToArgs( + local=dockerbuild.CacheToLocalArgs( dest="tmp/cache", - mode=docker.buildx.image.CacheMode.MAX, + mode=dockerbuild.CacheMode.MAX, ), )], - context=docker.buildx.BuildContextArgs( + context=dockerbuild.BuildContextArgs( location="app", )) ``` @@ -654,17 +654,17 @@ image = docker.buildx.Image("image", using System.Collections.Generic; using System.Linq; using Pulumi; -using Docker = Pulumi.Docker; +using Dockerbuild = Pulumi.Dockerbuild; return await Deployment.RunAsync(() => { - var image = new Docker.Buildx.Image("image", new() + var image = new Dockerbuild.Image("image", new() { CacheFrom = new[] { - new Docker.Buildx.Inputs.CacheFromArgs + new Dockerbuild.Inputs.CacheFromArgs { - Local = new Docker.Buildx.Inputs.CacheFromLocalArgs + Local = new Dockerbuild.Inputs.CacheFromLocalArgs { Src = "tmp/cache", }, @@ -672,16 +672,16 @@ return await Deployment.RunAsync(() => }, CacheTo = new[] { - new Docker.Buildx.Inputs.CacheToArgs + new Dockerbuild.Inputs.CacheToArgs { - Local = new Docker.Buildx.Inputs.CacheToLocalArgs + Local = new Dockerbuild.Inputs.CacheToLocalArgs { Dest = "tmp/cache", - Mode = Docker.Buildx.Image.CacheMode.Max, + Mode = Dockerbuild.CacheMode.Max, }, }, }, - Context = new Docker.Buildx.Inputs.BuildContextArgs + Context = new Dockerbuild.Inputs.BuildContextArgs { Location = "app", }, @@ -694,29 +694,29 @@ 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 { - _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ - CacheFrom: buildx.CacheFromArray{ - &buildx.CacheFromArgs{ - Local: &buildx.CacheFromLocalArgs{ + _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ + CacheFrom: dockerbuild.CacheFromArray{ + &dockerbuild.CacheFromArgs{ + Local: &dockerbuild.CacheFromLocalArgs{ Src: pulumi.String("tmp/cache"), }, }, }, - CacheTo: buildx.CacheToArray{ - &buildx.CacheToArgs{ - Local: &buildx.CacheToLocalArgs{ + CacheTo: dockerbuild.CacheToArray{ + &dockerbuild.CacheToArgs{ + Local: &dockerbuild.CacheToLocalArgs{ Dest: pulumi.String("tmp/cache"), - Mode: buildx.CacheModeMax, + Mode: dockerbuild.CacheModeMax, }, }, }, - Context: &buildx.BuildContextArgs{ + Context: &dockerbuild.BuildContextArgs{ Location: pulumi.String("app"), }, }) @@ -742,7 +742,7 @@ resources: mode: max context: location: app - type: docker:buildx/image:Image + type: dockerbuild:Image runtime: yaml ``` ```java @@ -751,13 +751,13 @@ 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.CacheFromLocalArgs; -import com.pulumi.docker.buildx.inputs.CacheToArgs; -import com.pulumi.docker.buildx.inputs.CacheToLocalArgs; -import com.pulumi.docker.buildx.inputs.BuildContextArgs; +import com.pulumi.dockerbuild.Image; +import com.pulumi.dockerbuild.ImageArgs; +import com.pulumi.dockerbuild.inputs.CacheFromArgs; +import com.pulumi.dockerbuild.inputs.CacheFromLocalArgs; +import com.pulumi.dockerbuild.inputs.CacheToArgs; +import com.pulumi.dockerbuild.inputs.CacheToLocalArgs; +import com.pulumi.dockerbuild.inputs.BuildContextArgs; import java.util.List; import java.util.ArrayList; import java.util.Map; @@ -797,9 +797,9 @@ public class App { ```typescript import * as pulumi from "@pulumi/pulumi"; -import * as docker from "@pulumi/docker"; +import * as dockerbuild from "@pulumi/dockerbuild"; -const image = new docker.buildx.Image("image", { +const image = new dockerbuild.Image("image", { builder: { name: "cloud-builder-name", }, @@ -811,13 +811,13 @@ const image = new docker.buildx.Image("image", { ``` ```python import pulumi -import pulumi_docker as docker +import pulumi_dockerbuild as dockerbuild -image = docker.buildx.Image("image", - builder=docker.buildx.BuilderConfigArgs( +image = dockerbuild.Image("image", + builder=dockerbuild.BuilderConfigArgs( name="cloud-builder-name", ), - context=docker.buildx.BuildContextArgs( + context=dockerbuild.BuildContextArgs( location="app", ), exec_=True) @@ -826,17 +826,17 @@ image = docker.buildx.Image("image", using System.Collections.Generic; using System.Linq; using Pulumi; -using Docker = Pulumi.Docker; +using Dockerbuild = Pulumi.Dockerbuild; return await Deployment.RunAsync(() => { - var image = new Docker.Buildx.Image("image", new() + var image = new Dockerbuild.Image("image", new() { - Builder = new Docker.Buildx.Inputs.BuilderConfigArgs + Builder = new Dockerbuild.Inputs.BuilderConfigArgs { Name = "cloud-builder-name", }, - Context = new Docker.Buildx.Inputs.BuildContextArgs + Context = new Dockerbuild.Inputs.BuildContextArgs { Location = "app", }, @@ -850,17 +850,17 @@ 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 { - _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ - Builder: &buildx.BuilderConfigArgs{ + _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ + Builder: &dockerbuild.BuilderConfigArgs{ Name: pulumi.String("cloud-builder-name"), }, - Context: &buildx.BuildContextArgs{ + Context: &dockerbuild.BuildContextArgs{ Location: pulumi.String("app"), }, Exec: pulumi.Bool(true), @@ -883,7 +883,7 @@ resources: context: location: app exec: true - type: docker:buildx/image:Image + type: dockerbuild:Image runtime: yaml ``` ```java @@ -892,10 +892,10 @@ 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.BuilderConfigArgs; -import com.pulumi.docker.buildx.inputs.BuildContextArgs; +import com.pulumi.dockerbuild.Image; +import com.pulumi.dockerbuild.ImageArgs; +import com.pulumi.dockerbuild.inputs.BuilderConfigArgs; +import com.pulumi.dockerbuild.inputs.BuildContextArgs; import java.util.List; import java.util.ArrayList; import java.util.Map; @@ -928,9 +928,9 @@ public class App { ```typescript import * as pulumi from "@pulumi/pulumi"; -import * as docker from "@pulumi/docker"; +import * as dockerbuild from "@pulumi/dockerbuild"; -const image = new docker.buildx.Image("image", { +const image = new dockerbuild.Image("image", { buildArgs: { SET_ME_TO_TRUE: "true", }, @@ -941,13 +941,13 @@ const image = new docker.buildx.Image("image", { ``` ```python import pulumi -import pulumi_docker as docker +import pulumi_dockerbuild as dockerbuild -image = docker.buildx.Image("image", +image = dockerbuild.Image("image", build_args={ "SET_ME_TO_TRUE": "true", }, - context=docker.buildx.BuildContextArgs( + context=dockerbuild.BuildContextArgs( location="app", )) ``` @@ -955,17 +955,17 @@ image = docker.buildx.Image("image", using System.Collections.Generic; using System.Linq; using Pulumi; -using Docker = Pulumi.Docker; +using Dockerbuild = Pulumi.Dockerbuild; return await Deployment.RunAsync(() => { - var image = new Docker.Buildx.Image("image", new() + var image = new Dockerbuild.Image("image", new() { BuildArgs = { { "SET_ME_TO_TRUE", "true" }, }, - Context = new Docker.Buildx.Inputs.BuildContextArgs + Context = new Dockerbuild.Inputs.BuildContextArgs { Location = "app", }, @@ -978,17 +978,17 @@ 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 { - _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ + _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ BuildArgs: pulumi.StringMap{ "SET_ME_TO_TRUE": pulumi.String("true"), }, - Context: &buildx.BuildContextArgs{ + Context: &dockerbuild.BuildContextArgs{ Location: pulumi.String("app"), }, }) @@ -1009,7 +1009,7 @@ resources: SET_ME_TO_TRUE: "true" context: location: app - type: docker:buildx/image:Image + type: dockerbuild:Image runtime: yaml ``` ```java @@ -1018,9 +1018,9 @@ 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.BuildContextArgs; +import com.pulumi.dockerbuild.Image; +import com.pulumi.dockerbuild.ImageArgs; +import com.pulumi.dockerbuild.inputs.BuildContextArgs; import java.util.List; import java.util.ArrayList; import java.util.Map; @@ -1050,9 +1050,9 @@ public class App { ```typescript import * as pulumi from "@pulumi/pulumi"; -import * as docker from "@pulumi/docker"; +import * as dockerbuild from "@pulumi/dockerbuild"; -const image = new docker.buildx.Image("image", { +const image = new dockerbuild.Image("image", { context: { location: "app", }, @@ -1061,10 +1061,10 @@ const image = new docker.buildx.Image("image", { ``` ```python import pulumi -import pulumi_docker as docker +import pulumi_dockerbuild as dockerbuild -image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( +image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), target="build-me") @@ -1073,13 +1073,13 @@ image = docker.buildx.Image("image", using System.Collections.Generic; using System.Linq; using Pulumi; -using Docker = Pulumi.Docker; +using Dockerbuild = Pulumi.Dockerbuild; return await Deployment.RunAsync(() => { - var image = new Docker.Buildx.Image("image", new() + var image = new Dockerbuild.Image("image", new() { - Context = new Docker.Buildx.Inputs.BuildContextArgs + Context = new Dockerbuild.Inputs.BuildContextArgs { Location = "app", }, @@ -1093,14 +1093,14 @@ 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 { - _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ - Context: &buildx.BuildContextArgs{ + _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ + Context: &dockerbuild.BuildContextArgs{ Location: pulumi.String("app"), }, Target: pulumi.String("build-me"), @@ -1121,7 +1121,7 @@ resources: context: location: app target: build-me - type: docker:buildx/image:Image + type: dockerbuild:Image runtime: yaml ``` ```java @@ -1130,9 +1130,9 @@ 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.BuildContextArgs; +import com.pulumi.dockerbuild.Image; +import com.pulumi.dockerbuild.ImageArgs; +import com.pulumi.dockerbuild.inputs.BuildContextArgs; import java.util.List; import java.util.ArrayList; import java.util.Map; @@ -1162,9 +1162,9 @@ public class App { ```typescript import * as pulumi from "@pulumi/pulumi"; -import * as docker from "@pulumi/docker"; +import * as dockerbuild from "@pulumi/dockerbuild"; -const image = new docker.buildx.Image("image", {context: { +const image = new dockerbuild.Image("image", {context: { location: "app", named: { "golang:latest": { @@ -1175,12 +1175,12 @@ const image = new docker.buildx.Image("image", {context: { ``` ```python import pulumi -import pulumi_docker as docker +import pulumi_dockerbuild as dockerbuild -image = docker.buildx.Image("image", context=docker.buildx.BuildContextArgs( +image = dockerbuild.Image("image", context=dockerbuild.BuildContextArgs( location="app", named={ - "golang:latest": docker.buildx.ContextArgs( + "golang:latest": dockerbuild.ContextArgs( location="docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984", ), }, @@ -1190,18 +1190,18 @@ image = docker.buildx.Image("image", context=docker.buildx.BuildContextArgs( using System.Collections.Generic; using System.Linq; using Pulumi; -using Docker = Pulumi.Docker; +using Dockerbuild = Pulumi.Dockerbuild; return await Deployment.RunAsync(() => { - var image = new Docker.Buildx.Image("image", new() + var image = new Dockerbuild.Image("image", new() { - Context = new Docker.Buildx.Inputs.BuildContextArgs + Context = new Dockerbuild.Inputs.BuildContextArgs { Location = "app", Named = { - { "golang:latest", new Docker.Buildx.Inputs.ContextArgs + { "golang:latest", new Dockerbuild.Inputs.ContextArgs { Location = "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984", } }, @@ -1216,17 +1216,17 @@ 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 { - _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ - Context: &buildx.BuildContextArgs{ + _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ + Context: &dockerbuild.BuildContextArgs{ Location: pulumi.String("app"), - Named: buildx.ContextMap{ - "golang:latest": &buildx.ContextArgs{ + Named: dockerbuild.ContextMap{ + "golang:latest": &dockerbuild.ContextArgs{ Location: pulumi.String("docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"), }, }, @@ -1250,7 +1250,7 @@ resources: named: golang:latest: location: docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984 - type: docker:buildx/image:Image + type: dockerbuild:Image runtime: yaml ``` ```java @@ -1259,9 +1259,9 @@ 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.BuildContextArgs; +import com.pulumi.dockerbuild.Image; +import com.pulumi.dockerbuild.ImageArgs; +import com.pulumi.dockerbuild.inputs.BuildContextArgs; import java.util.List; import java.util.ArrayList; import java.util.Map; @@ -1291,17 +1291,17 @@ public class App { ```typescript import * as pulumi from "@pulumi/pulumi"; -import * as docker from "@pulumi/docker"; +import * as dockerbuild from "@pulumi/dockerbuild"; -const image = new docker.buildx.Image("image", {context: { +const image = new dockerbuild.Image("image", {context: { location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile", }}); ``` ```python import pulumi -import pulumi_docker as docker +import pulumi_dockerbuild as dockerbuild -image = docker.buildx.Image("image", context=docker.buildx.BuildContextArgs( +image = dockerbuild.Image("image", context=dockerbuild.BuildContextArgs( location="https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile", )) ``` @@ -1309,13 +1309,13 @@ image = docker.buildx.Image("image", context=docker.buildx.BuildContextArgs( using System.Collections.Generic; using System.Linq; using Pulumi; -using Docker = Pulumi.Docker; +using Dockerbuild = Pulumi.Dockerbuild; return await Deployment.RunAsync(() => { - var image = new Docker.Buildx.Image("image", new() + var image = new Dockerbuild.Image("image", new() { - Context = new Docker.Buildx.Inputs.BuildContextArgs + Context = new Dockerbuild.Inputs.BuildContextArgs { Location = "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile", }, @@ -1328,14 +1328,14 @@ 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 { - _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ - Context: &buildx.BuildContextArgs{ + _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ + Context: &dockerbuild.BuildContextArgs{ Location: pulumi.String("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"), }, }) @@ -1354,7 +1354,7 @@ resources: properties: context: location: https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile - type: docker:buildx/image:Image + type: dockerbuild:Image runtime: yaml ``` ```java @@ -1363,9 +1363,9 @@ 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.BuildContextArgs; +import com.pulumi.dockerbuild.Image; +import com.pulumi.dockerbuild.ImageArgs; +import com.pulumi.dockerbuild.inputs.BuildContextArgs; import java.util.List; import java.util.ArrayList; import java.util.Map; @@ -1394,9 +1394,9 @@ public class App { ```typescript import * as pulumi from "@pulumi/pulumi"; -import * as docker from "@pulumi/docker"; +import * as dockerbuild from "@pulumi/dockerbuild"; -const image = new docker.buildx.Image("image", { +const image = new dockerbuild.Image("image", { context: { location: "app", }, @@ -1409,13 +1409,13 @@ COPY hello.c ./ ``` ```python import pulumi -import pulumi_docker as docker +import pulumi_dockerbuild as dockerbuild -image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( +image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), - dockerfile=docker.buildx.DockerfileArgs( + dockerfile=dockerbuild.DockerfileArgs( inline="""FROM busybox COPY hello.c ./ """, @@ -1425,17 +1425,17 @@ COPY hello.c ./ using System.Collections.Generic; using System.Linq; using Pulumi; -using Docker = Pulumi.Docker; +using Dockerbuild = Pulumi.Dockerbuild; return await Deployment.RunAsync(() => { - var image = new Docker.Buildx.Image("image", new() + var image = new Dockerbuild.Image("image", new() { - Context = new Docker.Buildx.Inputs.BuildContextArgs + Context = new Dockerbuild.Inputs.BuildContextArgs { Location = "app", }, - Dockerfile = new Docker.Buildx.Inputs.DockerfileArgs + Dockerfile = new Dockerbuild.Inputs.DockerfileArgs { Inline = @"FROM busybox COPY hello.c ./ @@ -1450,17 +1450,17 @@ COPY hello.c ./ 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 { - _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ - Context: &buildx.BuildContextArgs{ + _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ + Context: &dockerbuild.BuildContextArgs{ Location: pulumi.String("app"), }, - Dockerfile: &buildx.DockerfileArgs{ + Dockerfile: &dockerbuild.DockerfileArgs{ Inline: pulumi.String("FROM busybox\nCOPY hello.c ./\n"), }, }) @@ -1483,7 +1483,7 @@ resources: inline: | FROM busybox COPY hello.c ./ - type: docker:buildx/image:Image + type: dockerbuild:Image runtime: yaml ``` ```java @@ -1492,10 +1492,10 @@ 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.BuildContextArgs; -import com.pulumi.docker.buildx.inputs.DockerfileArgs; +import com.pulumi.dockerbuild.Image; +import com.pulumi.dockerbuild.ImageArgs; +import com.pulumi.dockerbuild.inputs.BuildContextArgs; +import com.pulumi.dockerbuild.inputs.DockerfileArgs; import java.util.List; import java.util.ArrayList; import java.util.Map; @@ -1530,9 +1530,9 @@ COPY hello.c ./ ```typescript import * as pulumi from "@pulumi/pulumi"; -import * as docker from "@pulumi/docker"; +import * as dockerbuild from "@pulumi/dockerbuild"; -const image = new docker.buildx.Image("image", { +const image = new dockerbuild.Image("image", { context: { location: "https://github.com/docker-library/hello-world.git", }, @@ -1543,13 +1543,13 @@ const image = new docker.buildx.Image("image", { ``` ```python import pulumi -import pulumi_docker as docker +import pulumi_dockerbuild as dockerbuild -image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( +image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="https://github.com/docker-library/hello-world.git", ), - dockerfile=docker.buildx.DockerfileArgs( + dockerfile=dockerbuild.DockerfileArgs( location="app/Dockerfile", )) ``` @@ -1557,17 +1557,17 @@ image = docker.buildx.Image("image", using System.Collections.Generic; using System.Linq; using Pulumi; -using Docker = Pulumi.Docker; +using Dockerbuild = Pulumi.Dockerbuild; return await Deployment.RunAsync(() => { - var image = new Docker.Buildx.Image("image", new() + var image = new Dockerbuild.Image("image", new() { - Context = new Docker.Buildx.Inputs.BuildContextArgs + Context = new Dockerbuild.Inputs.BuildContextArgs { Location = "https://github.com/docker-library/hello-world.git", }, - Dockerfile = new Docker.Buildx.Inputs.DockerfileArgs + Dockerfile = new Dockerbuild.Inputs.DockerfileArgs { Location = "app/Dockerfile", }, @@ -1580,17 +1580,17 @@ 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 { - _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ - Context: &buildx.BuildContextArgs{ + _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ + Context: &dockerbuild.BuildContextArgs{ Location: pulumi.String("https://github.com/docker-library/hello-world.git"), }, - Dockerfile: &buildx.DockerfileArgs{ + Dockerfile: &dockerbuild.DockerfileArgs{ Location: pulumi.String("app/Dockerfile"), }, }) @@ -1611,7 +1611,7 @@ resources: location: https://github.com/docker-library/hello-world.git dockerfile: location: app/Dockerfile - type: docker:buildx/image:Image + type: dockerbuild:Image runtime: yaml ``` ```java @@ -1620,10 +1620,10 @@ 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.BuildContextArgs; -import com.pulumi.docker.buildx.inputs.DockerfileArgs; +import com.pulumi.dockerbuild.Image; +import com.pulumi.dockerbuild.ImageArgs; +import com.pulumi.dockerbuild.inputs.BuildContextArgs; +import com.pulumi.dockerbuild.inputs.DockerfileArgs; import java.util.List; import java.util.ArrayList; import java.util.Map; @@ -1655,9 +1655,9 @@ public class App { ```typescript import * as pulumi from "@pulumi/pulumi"; -import * as docker from "@pulumi/docker"; +import * as dockerbuild from "@pulumi/dockerbuild"; -const image = new docker.buildx.Image("image", { +const image = new dockerbuild.Image("image", { context: { location: "app", }, @@ -1670,14 +1670,14 @@ const image = new docker.buildx.Image("image", { ``` ```python import pulumi -import pulumi_docker as docker +import pulumi_dockerbuild as dockerbuild -image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( +image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), - exports=[docker.buildx.ExportArgs( - docker=docker.buildx.ExportDockerArgs( + exports=[dockerbuild.ExportArgs( + docker=dockerbuild.ExportDockerArgs( tar=True, ), )]) @@ -1686,21 +1686,21 @@ image = docker.buildx.Image("image", using System.Collections.Generic; using System.Linq; using Pulumi; -using Docker = Pulumi.Docker; +using Dockerbuild = Pulumi.Dockerbuild; return await Deployment.RunAsync(() => { - var image = new Docker.Buildx.Image("image", new() + var image = new Dockerbuild.Image("image", new() { - Context = new Docker.Buildx.Inputs.BuildContextArgs + Context = new Dockerbuild.Inputs.BuildContextArgs { Location = "app", }, Exports = new[] { - new Docker.Buildx.Inputs.ExportArgs + new Dockerbuild.Inputs.ExportArgs { - Docker = new Docker.Buildx.Inputs.ExportDockerArgs + Docker = new Dockerbuild.Inputs.ExportDockerArgs { Tar = true, }, @@ -1715,19 +1715,19 @@ 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 { - _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ - Context: &buildx.BuildContextArgs{ + _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ + Context: &dockerbuild.BuildContextArgs{ Location: pulumi.String("app"), }, - Exports: buildx.ExportArray{ - &buildx.ExportArgs{ - Docker: &buildx.ExportDockerArgs{ + Exports: dockerbuild.ExportArray{ + &dockerbuild.ExportArgs{ + Docker: &dockerbuild.ExportDockerArgs{ Tar: pulumi.Bool(true), }, }, @@ -1751,7 +1751,7 @@ resources: exports: - docker: tar: true - type: docker:buildx/image:Image + type: dockerbuild:Image runtime: yaml ``` ```java @@ -1760,11 +1760,11 @@ 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.BuildContextArgs; -import com.pulumi.docker.buildx.inputs.ExportArgs; -import com.pulumi.docker.buildx.inputs.ExportDockerArgs; +import com.pulumi.dockerbuild.Image; +import com.pulumi.dockerbuild.ImageArgs; +import com.pulumi.dockerbuild.inputs.BuildContextArgs; +import com.pulumi.dockerbuild.inputs.ExportArgs; +import com.pulumi.dockerbuild.inputs.ExportDockerArgs; import java.util.List; import java.util.ArrayList; import java.util.Map; diff --git a/provider/internal/embed/image-migration.md b/provider/internal/embed/image-migration.md index 5c34436..0b562e5 100644 --- a/provider/internal/embed/image-migration.md +++ b/provider/internal/embed/image-migration.md @@ -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: { diff --git a/provider/internal/embed/index-examples.md b/provider/internal/embed/index-examples.md index b803b47..663dc11 100644 --- a/provider/internal/embed/index-examples.md +++ b/provider/internal/embed/index-examples.md @@ -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; diff --git a/sdk/dotnet/Image.cs b/sdk/dotnet/Image.cs index 0782922..ae1b159 100644 --- a/sdk/dotnet/Image.cs +++ b/sdk/dotnet/Image.cs @@ -28,12 +28,12 @@ namespace Pulumi.Dockerbuild /// /// ## 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 /// @@ -44,8 +44,8 @@ namespace Pulumi.Dockerbuild /// 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`. /// @@ -54,7 +54,7 @@ namespace Pulumi.Dockerbuild /// 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. @@ -65,7 +65,7 @@ namespace Pulumi.Dockerbuild /// /// 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. @@ -80,7 +80,7 @@ namespace Pulumi.Dockerbuild /// 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 @@ -88,7 +88,7 @@ namespace Pulumi.Dockerbuild /// 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. /// @@ -101,7 +101,7 @@ namespace Pulumi.Dockerbuild /// 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. /// @@ -109,11 +109,11 @@ namespace Pulumi.Dockerbuild /// /// ### 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. @@ -127,7 +127,7 @@ namespace Pulumi.Dockerbuild /// using System.Linq; /// using Pulumi; /// using Aws = Pulumi.Aws; - /// using Docker = Pulumi.Docker; + /// using Dockerbuild = Pulumi.Dockerbuild; /// /// return await Deployment.RunAsync(() => /// { @@ -138,13 +138,13 @@ namespace Pulumi.Dockerbuild /// RegistryId = ecrRepository.RegistryId, /// }); /// - /// var myImage = new Docker.Buildx.Image("my-image", new() + /// var myImage = new Dockerbuild.Image("my-image", new() /// { /// CacheFrom = new[] /// { - /// new Docker.Buildx.Inputs.CacheFromArgs + /// new Dockerbuild.Inputs.CacheFromArgs /// { - /// Registry = new Docker.Buildx.Inputs.CacheFromRegistryArgs + /// Registry = new Dockerbuild.Inputs.CacheFromRegistryArgs /// { /// Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl => $"{repositoryUrl}:cache"), /// }, @@ -152,9 +152,9 @@ namespace Pulumi.Dockerbuild /// }, /// CacheTo = new[] /// { - /// new Docker.Buildx.Inputs.CacheToArgs + /// new Dockerbuild.Inputs.CacheToArgs /// { - /// Registry = new Docker.Buildx.Inputs.CacheToRegistryArgs + /// Registry = new Dockerbuild.Inputs.CacheToRegistryArgs /// { /// ImageManifest = true, /// OciMediaTypes = true, @@ -162,14 +162,14 @@ namespace Pulumi.Dockerbuild /// }, /// }, /// }, - /// Context = new Docker.Buildx.Inputs.BuildContextArgs + /// Context = new Dockerbuild.Inputs.BuildContextArgs /// { /// Location = "./app", /// }, /// Push = true, /// Registries = new[] /// { - /// new Docker.Buildx.Inputs.RegistryAuthArgs + /// new Dockerbuild.Inputs.RegistryArgs /// { /// Address = ecrRepository.RepositoryUrl, /// Password = authToken.Apply(getAuthorizationTokenResult => getAuthorizationTokenResult.Password), @@ -194,20 +194,20 @@ namespace Pulumi.Dockerbuild /// using System.Collections.Generic; /// using System.Linq; /// using Pulumi; - /// using Docker = Pulumi.Docker; + /// using Dockerbuild = Pulumi.Dockerbuild; /// /// return await Deployment.RunAsync(() => /// { - /// var image = new Docker.Buildx.Image("image", new() + /// var image = new Dockerbuild.Image("image", new() /// { - /// Context = new Docker.Buildx.Inputs.BuildContextArgs + /// Context = new Dockerbuild.Inputs.BuildContextArgs /// { /// Location = "app", /// }, /// Platforms = new[] /// { - /// Docker.Buildx.Image.Platform.Plan9_amd64, - /// Docker.Buildx.Image.Platform.Plan9_386, + /// Dockerbuild.Platform.Plan9_amd64, + /// Dockerbuild.Platform.Plan9_386, /// }, /// }); /// @@ -219,20 +219,20 @@ namespace Pulumi.Dockerbuild /// using System.Collections.Generic; /// using System.Linq; /// using Pulumi; - /// using Docker = Pulumi.Docker; + /// using Dockerbuild = Pulumi.Dockerbuild; /// /// return await Deployment.RunAsync(() => /// { - /// var image = new Docker.Buildx.Image("image", new() + /// var image = new Dockerbuild.Image("image", new() /// { - /// Context = new Docker.Buildx.Inputs.BuildContextArgs + /// Context = new Dockerbuild.Inputs.BuildContextArgs /// { /// Location = "app", /// }, /// Push = true, /// Registries = new[] /// { - /// new Docker.Buildx.Inputs.RegistryAuthArgs + /// new Dockerbuild.Inputs.RegistryArgs /// { /// Address = "docker.io", /// Password = dockerHubPassword, @@ -257,17 +257,17 @@ namespace Pulumi.Dockerbuild /// using System.Collections.Generic; /// using System.Linq; /// using Pulumi; - /// using Docker = Pulumi.Docker; + /// using Dockerbuild = Pulumi.Dockerbuild; /// /// return await Deployment.RunAsync(() => /// { - /// var image = new Docker.Buildx.Image("image", new() + /// var image = new Dockerbuild.Image("image", new() /// { /// CacheFrom = new[] /// { - /// new Docker.Buildx.Inputs.CacheFromArgs + /// new Dockerbuild.Inputs.CacheFromArgs /// { - /// Local = new Docker.Buildx.Inputs.CacheFromLocalArgs + /// Local = new Dockerbuild.Inputs.CacheFromLocalArgs /// { /// Src = "tmp/cache", /// }, @@ -275,16 +275,16 @@ namespace Pulumi.Dockerbuild /// }, /// CacheTo = new[] /// { - /// new Docker.Buildx.Inputs.CacheToArgs + /// new Dockerbuild.Inputs.CacheToArgs /// { - /// Local = new Docker.Buildx.Inputs.CacheToLocalArgs + /// Local = new Dockerbuild.Inputs.CacheToLocalArgs /// { /// Dest = "tmp/cache", - /// Mode = Docker.Buildx.Image.CacheMode.Max, + /// Mode = Dockerbuild.CacheMode.Max, /// }, /// }, /// }, - /// Context = new Docker.Buildx.Inputs.BuildContextArgs + /// Context = new Dockerbuild.Inputs.BuildContextArgs /// { /// Location = "app", /// }, @@ -298,17 +298,17 @@ namespace Pulumi.Dockerbuild /// using System.Collections.Generic; /// using System.Linq; /// using Pulumi; - /// using Docker = Pulumi.Docker; + /// using Dockerbuild = Pulumi.Dockerbuild; /// /// return await Deployment.RunAsync(() => /// { - /// var image = new Docker.Buildx.Image("image", new() + /// var image = new Dockerbuild.Image("image", new() /// { - /// Builder = new Docker.Buildx.Inputs.BuilderConfigArgs + /// Builder = new Dockerbuild.Inputs.BuilderConfigArgs /// { /// Name = "cloud-builder-name", /// }, - /// Context = new Docker.Buildx.Inputs.BuildContextArgs + /// Context = new Dockerbuild.Inputs.BuildContextArgs /// { /// Location = "app", /// }, @@ -323,17 +323,17 @@ namespace Pulumi.Dockerbuild /// using System.Collections.Generic; /// using System.Linq; /// using Pulumi; - /// using Docker = Pulumi.Docker; + /// using Dockerbuild = Pulumi.Dockerbuild; /// /// return await Deployment.RunAsync(() => /// { - /// var image = new Docker.Buildx.Image("image", new() + /// var image = new Dockerbuild.Image("image", new() /// { /// BuildArgs = /// { /// { "SET_ME_TO_TRUE", "true" }, /// }, - /// Context = new Docker.Buildx.Inputs.BuildContextArgs + /// Context = new Dockerbuild.Inputs.BuildContextArgs /// { /// Location = "app", /// }, @@ -347,13 +347,13 @@ namespace Pulumi.Dockerbuild /// using System.Collections.Generic; /// using System.Linq; /// using Pulumi; - /// using Docker = Pulumi.Docker; + /// using Dockerbuild = Pulumi.Dockerbuild; /// /// return await Deployment.RunAsync(() => /// { - /// var image = new Docker.Buildx.Image("image", new() + /// var image = new Dockerbuild.Image("image", new() /// { - /// Context = new Docker.Buildx.Inputs.BuildContextArgs + /// Context = new Dockerbuild.Inputs.BuildContextArgs /// { /// Location = "app", /// }, @@ -368,18 +368,18 @@ namespace Pulumi.Dockerbuild /// using System.Collections.Generic; /// using System.Linq; /// using Pulumi; - /// using Docker = Pulumi.Docker; + /// using Dockerbuild = Pulumi.Dockerbuild; /// /// return await Deployment.RunAsync(() => /// { - /// var image = new Docker.Buildx.Image("image", new() + /// var image = new Dockerbuild.Image("image", new() /// { - /// Context = new Docker.Buildx.Inputs.BuildContextArgs + /// Context = new Dockerbuild.Inputs.BuildContextArgs /// { /// Location = "app", /// Named = /// { - /// { "golang:latest", new Docker.Buildx.Inputs.ContextArgs + /// { "golang:latest", new Dockerbuild.Inputs.ContextArgs /// { /// Location = "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984", /// } }, @@ -395,13 +395,13 @@ namespace Pulumi.Dockerbuild /// using System.Collections.Generic; /// using System.Linq; /// using Pulumi; - /// using Docker = Pulumi.Docker; + /// using Dockerbuild = Pulumi.Dockerbuild; /// /// return await Deployment.RunAsync(() => /// { - /// var image = new Docker.Buildx.Image("image", new() + /// var image = new Dockerbuild.Image("image", new() /// { - /// Context = new Docker.Buildx.Inputs.BuildContextArgs + /// Context = new Dockerbuild.Inputs.BuildContextArgs /// { /// Location = "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile", /// }, @@ -415,17 +415,17 @@ namespace Pulumi.Dockerbuild /// using System.Collections.Generic; /// using System.Linq; /// using Pulumi; - /// using Docker = Pulumi.Docker; + /// using Dockerbuild = Pulumi.Dockerbuild; /// /// return await Deployment.RunAsync(() => /// { - /// var image = new Docker.Buildx.Image("image", new() + /// var image = new Dockerbuild.Image("image", new() /// { - /// Context = new Docker.Buildx.Inputs.BuildContextArgs + /// Context = new Dockerbuild.Inputs.BuildContextArgs /// { /// Location = "app", /// }, - /// Dockerfile = new Docker.Buildx.Inputs.DockerfileArgs + /// Dockerfile = new Dockerbuild.Inputs.DockerfileArgs /// { /// Inline = @"FROM busybox /// COPY hello.c ./ @@ -441,17 +441,17 @@ namespace Pulumi.Dockerbuild /// using System.Collections.Generic; /// using System.Linq; /// using Pulumi; - /// using Docker = Pulumi.Docker; + /// using Dockerbuild = Pulumi.Dockerbuild; /// /// return await Deployment.RunAsync(() => /// { - /// var image = new Docker.Buildx.Image("image", new() + /// var image = new Dockerbuild.Image("image", new() /// { - /// Context = new Docker.Buildx.Inputs.BuildContextArgs + /// Context = new Dockerbuild.Inputs.BuildContextArgs /// { /// Location = "https://github.com/docker-library/hello-world.git", /// }, - /// Dockerfile = new Docker.Buildx.Inputs.DockerfileArgs + /// Dockerfile = new Dockerbuild.Inputs.DockerfileArgs /// { /// Location = "app/Dockerfile", /// }, @@ -465,21 +465,21 @@ namespace Pulumi.Dockerbuild /// using System.Collections.Generic; /// using System.Linq; /// using Pulumi; - /// using Docker = Pulumi.Docker; + /// using Dockerbuild = Pulumi.Dockerbuild; /// /// return await Deployment.RunAsync(() => /// { - /// var image = new Docker.Buildx.Image("image", new() + /// var image = new Dockerbuild.Image("image", new() /// { - /// Context = new Docker.Buildx.Inputs.BuildContextArgs + /// Context = new Dockerbuild.Inputs.BuildContextArgs /// { /// Location = "app", /// }, /// Exports = new[] /// { - /// new Docker.Buildx.Inputs.ExportArgs + /// new Dockerbuild.Inputs.ExportArgs /// { - /// Docker = new Docker.Buildx.Inputs.ExportDockerArgs + /// Docker = new Dockerbuild.Inputs.ExportDockerArgs /// { /// Tar = true, /// }, diff --git a/sdk/dotnet/Index.cs b/sdk/dotnet/Index.cs index 35aa3ec..b425711 100644 --- a/sdk/dotnet/Index.cs +++ b/sdk/dotnet/Index.cs @@ -24,17 +24,17 @@ namespace Pulumi.Dockerbuild /// 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", /// }, @@ -42,22 +42,22 @@ namespace Pulumi.Dockerbuild /// }, /// 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[] /// { @@ -65,13 +65,13 @@ namespace Pulumi.Dockerbuild /// }, /// }); /// - /// 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", /// }, @@ -79,22 +79,22 @@ namespace Pulumi.Dockerbuild /// }, /// 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[] /// { @@ -102,7 +102,7 @@ namespace Pulumi.Dockerbuild /// }, /// }); /// - /// var index = new Docker.Buildx.Index("index", new() + /// var index = new Dockerbuild.Index("index", new() /// { /// Sources = new[] /// { diff --git a/sdk/go/dockerbuild/image.go b/sdk/go/dockerbuild/image.go index e7673b4..48f5084 100644 --- a/sdk/go/dockerbuild/image.go +++ b/sdk/go/dockerbuild/image.go @@ -30,12 +30,12 @@ import ( // // ## 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 // @@ -46,8 +46,8 @@ import ( // 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`. // @@ -56,7 +56,7 @@ import ( // 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. @@ -67,7 +67,7 @@ import ( // // 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. @@ -82,7 +82,7 @@ import ( // 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 @@ -90,7 +90,7 @@ import ( // 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. // @@ -103,7 +103,7 @@ import ( // 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. // @@ -111,11 +111,11 @@ import ( // // ### 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. @@ -132,7 +132,7 @@ import ( // "fmt" // // "github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecr" -// "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" // // ) @@ -146,19 +146,19 @@ import ( // authToken := ecr.GetAuthorizationTokenOutput(ctx, ecr.GetAuthorizationTokenOutputArgs{ // RegistryId: ecrRepository.RegistryId, // }, nil) -// myImage, err := buildx.NewImage(ctx, "my-image", &buildx.ImageArgs{ -// CacheFrom: buildx.CacheFromArray{ -// &buildx.CacheFromArgs{ -// Registry: &buildx.CacheFromRegistryArgs{ +// myImage, err := dockerbuild.NewImage(ctx, "my-image", &dockerbuild.ImageArgs{ +// CacheFrom: dockerbuild.CacheFromArray{ +// &dockerbuild.CacheFromArgs{ +// Registry: &dockerbuild.CacheFromRegistryArgs{ // Ref: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) { // return fmt.Sprintf("%v:cache", repositoryUrl), nil // }).(pulumi.StringOutput), // }, // }, // }, -// CacheTo: buildx.CacheToArray{ -// &buildx.CacheToArgs{ -// Registry: &buildx.CacheToRegistryArgs{ +// CacheTo: dockerbuild.CacheToArray{ +// &dockerbuild.CacheToArgs{ +// Registry: &dockerbuild.CacheToRegistryArgs{ // ImageManifest: pulumi.Bool(true), // OciMediaTypes: pulumi.Bool(true), // Ref: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) { @@ -167,12 +167,12 @@ import ( // }, // }, // }, -// Context: &buildx.BuildContextArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("./app"), // }, // Push: pulumi.Bool(true), -// Registries: buildx.RegistryAuthArray{ -// &buildx.RegistryAuthArgs{ +// Registries: dockerbuild.RegistryArray{ +// &dockerbuild.RegistryArgs{ // Address: ecrRepository.RepositoryUrl, // Password: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) { // return &authToken.Password, nil @@ -203,20 +203,20 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, -// Platforms: buildx.PlatformArray{ -// buildx.Platform_Plan9_amd64, -// buildx.Platform_Plan9_386, +// Platforms: dockerbuild.PlatformArray{ +// dockerbuild.Platform_Plan9_amd64, +// dockerbuild.Platform_Plan9_386, // }, // }) // if err != nil { @@ -233,20 +233,20 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, // Push: pulumi.Bool(true), -// Registries: buildx.RegistryAuthArray{ -// &buildx.RegistryAuthArgs{ +// Registries: dockerbuild.RegistryArray{ +// &dockerbuild.RegistryArgs{ // Address: pulumi.String("docker.io"), // Password: pulumi.Any(dockerHubPassword), // Username: pulumi.String("pulumibot"), @@ -271,30 +271,30 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// CacheFrom: buildx.CacheFromArray{ -// &buildx.CacheFromArgs{ -// Local: &buildx.CacheFromLocalArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// CacheFrom: dockerbuild.CacheFromArray{ +// &dockerbuild.CacheFromArgs{ +// Local: &dockerbuild.CacheFromLocalArgs{ // Src: pulumi.String("tmp/cache"), // }, // }, // }, -// CacheTo: buildx.CacheToArray{ -// &buildx.CacheToArgs{ -// Local: &buildx.CacheToLocalArgs{ +// CacheTo: dockerbuild.CacheToArray{ +// &dockerbuild.CacheToArgs{ +// Local: &dockerbuild.CacheToLocalArgs{ // Dest: pulumi.String("tmp/cache"), -// Mode: buildx.CacheModeMax, +// Mode: dockerbuild.CacheModeMax, // }, // }, // }, -// Context: &buildx.BuildContextArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, // }) @@ -312,18 +312,18 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Builder: &buildx.BuilderConfigArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Builder: &dockerbuild.BuilderConfigArgs{ // Name: pulumi.String("cloud-builder-name"), // }, -// Context: &buildx.BuildContextArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, // Exec: pulumi.Bool(true), @@ -342,18 +342,18 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ // BuildArgs: pulumi.StringMap{ // "SET_ME_TO_TRUE": pulumi.String("true"), // }, -// Context: &buildx.BuildContextArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, // }) @@ -371,15 +371,15 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, // Target: pulumi.String("build-me"), @@ -398,18 +398,18 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), -// Named: buildx.ContextMap{ -// "golang:latest": &buildx.ContextArgs{ +// Named: dockerbuild.ContextMap{ +// "golang:latest": &dockerbuild.ContextArgs{ // Location: pulumi.String("docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"), // }, // }, @@ -429,15 +429,15 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"), // }, // }) @@ -455,18 +455,18 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, -// Dockerfile: &buildx.DockerfileArgs{ +// Dockerfile: &dockerbuild.DockerfileArgs{ // Inline: pulumi.String("FROM busybox\nCOPY hello.c ./\n"), // }, // }) @@ -484,18 +484,18 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("https://github.com/docker-library/hello-world.git"), // }, -// Dockerfile: &buildx.DockerfileArgs{ +// Dockerfile: &dockerbuild.DockerfileArgs{ // Location: pulumi.String("app/Dockerfile"), // }, // }) @@ -513,20 +513,20 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, -// Exports: buildx.ExportArray{ -// &buildx.ExportArgs{ -// Docker: &buildx.ExportDockerArgs{ +// Exports: dockerbuild.ExportArray{ +// &dockerbuild.ExportArgs{ +// Docker: &dockerbuild.ExportDockerArgs{ // Tar: pulumi.Bool(true), // }, // }, diff --git a/sdk/go/dockerbuild/index.go b/sdk/go/dockerbuild/index.go index 422f3f1..e16322c 100644 --- a/sdk/go/dockerbuild/index.go +++ b/sdk/go/dockerbuild/index.go @@ -28,34 +28,34 @@ import ( // // 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"), @@ -64,27 +64,27 @@ import ( // 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"), @@ -93,7 +93,7 @@ import ( // 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, diff --git a/sdk/go/dockerbuild/x/image.go b/sdk/go/dockerbuild/x/image.go index 4ef4f84..b8a6a23 100644 --- a/sdk/go/dockerbuild/x/image.go +++ b/sdk/go/dockerbuild/x/image.go @@ -30,12 +30,12 @@ import ( // // ## 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 // @@ -46,8 +46,8 @@ import ( // 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`. // @@ -56,7 +56,7 @@ import ( // 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. @@ -67,7 +67,7 @@ import ( // // 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. @@ -82,7 +82,7 @@ import ( // 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 @@ -90,7 +90,7 @@ import ( // 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. // @@ -103,7 +103,7 @@ import ( // 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. // @@ -111,11 +111,11 @@ import ( // // ### 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. @@ -132,7 +132,7 @@ import ( // "fmt" // // "github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecr" -// "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" // // ) @@ -146,19 +146,19 @@ import ( // authToken := ecr.GetAuthorizationTokenOutput(ctx, ecr.GetAuthorizationTokenOutputArgs{ // RegistryId: ecrRepository.RegistryId, // }, nil) -// myImage, err := buildx.NewImage(ctx, "my-image", &buildx.ImageArgs{ -// CacheFrom: buildx.CacheFromArray{ -// &buildx.CacheFromArgs{ -// Registry: &buildx.CacheFromRegistryArgs{ +// myImage, err := dockerbuild.NewImage(ctx, "my-image", &dockerbuild.ImageArgs{ +// CacheFrom: dockerbuild.CacheFromArray{ +// &dockerbuild.CacheFromArgs{ +// Registry: &dockerbuild.CacheFromRegistryArgs{ // Ref: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) { // return fmt.Sprintf("%v:cache", repositoryUrl), nil // }).(pulumi.StringOutput), // }, // }, // }, -// CacheTo: buildx.CacheToArray{ -// &buildx.CacheToArgs{ -// Registry: &buildx.CacheToRegistryArgs{ +// CacheTo: dockerbuild.CacheToArray{ +// &dockerbuild.CacheToArgs{ +// Registry: &dockerbuild.CacheToRegistryArgs{ // ImageManifest: pulumi.Bool(true), // OciMediaTypes: pulumi.Bool(true), // Ref: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) { @@ -167,12 +167,12 @@ import ( // }, // }, // }, -// Context: &buildx.BuildContextArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("./app"), // }, // Push: pulumi.Bool(true), -// Registries: buildx.RegistryAuthArray{ -// &buildx.RegistryAuthArgs{ +// Registries: dockerbuild.RegistryArray{ +// &dockerbuild.RegistryArgs{ // Address: ecrRepository.RepositoryUrl, // Password: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) { // return &authToken.Password, nil @@ -203,20 +203,20 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, -// Platforms: buildx.PlatformArray{ -// buildx.Platform_Plan9_amd64, -// buildx.Platform_Plan9_386, +// Platforms: dockerbuild.PlatformArray{ +// dockerbuild.Platform_Plan9_amd64, +// dockerbuild.Platform_Plan9_386, // }, // }) // if err != nil { @@ -233,20 +233,20 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, // Push: pulumi.Bool(true), -// Registries: buildx.RegistryAuthArray{ -// &buildx.RegistryAuthArgs{ +// Registries: dockerbuild.RegistryArray{ +// &dockerbuild.RegistryArgs{ // Address: pulumi.String("docker.io"), // Password: pulumi.Any(dockerHubPassword), // Username: pulumi.String("pulumibot"), @@ -271,30 +271,30 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// CacheFrom: buildx.CacheFromArray{ -// &buildx.CacheFromArgs{ -// Local: &buildx.CacheFromLocalArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// CacheFrom: dockerbuild.CacheFromArray{ +// &dockerbuild.CacheFromArgs{ +// Local: &dockerbuild.CacheFromLocalArgs{ // Src: pulumi.String("tmp/cache"), // }, // }, // }, -// CacheTo: buildx.CacheToArray{ -// &buildx.CacheToArgs{ -// Local: &buildx.CacheToLocalArgs{ +// CacheTo: dockerbuild.CacheToArray{ +// &dockerbuild.CacheToArgs{ +// Local: &dockerbuild.CacheToLocalArgs{ // Dest: pulumi.String("tmp/cache"), -// Mode: buildx.CacheModeMax, +// Mode: dockerbuild.CacheModeMax, // }, // }, // }, -// Context: &buildx.BuildContextArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, // }) @@ -312,18 +312,18 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Builder: &buildx.BuilderConfigArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Builder: &dockerbuild.BuilderConfigArgs{ // Name: pulumi.String("cloud-builder-name"), // }, -// Context: &buildx.BuildContextArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, // Exec: pulumi.Bool(true), @@ -342,18 +342,18 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ // BuildArgs: pulumi.StringMap{ // "SET_ME_TO_TRUE": pulumi.String("true"), // }, -// Context: &buildx.BuildContextArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, // }) @@ -371,15 +371,15 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, // Target: pulumi.String("build-me"), @@ -398,18 +398,18 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), -// Named: buildx.ContextMap{ -// "golang:latest": &buildx.ContextArgs{ +// Named: dockerbuild.ContextMap{ +// "golang:latest": &dockerbuild.ContextArgs{ // Location: pulumi.String("docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"), // }, // }, @@ -429,15 +429,15 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"), // }, // }) @@ -455,18 +455,18 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, -// Dockerfile: &buildx.DockerfileArgs{ +// Dockerfile: &dockerbuild.DockerfileArgs{ // Inline: pulumi.String("FROM busybox\nCOPY hello.c ./\n"), // }, // }) @@ -484,18 +484,18 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("https://github.com/docker-library/hello-world.git"), // }, -// Dockerfile: &buildx.DockerfileArgs{ +// Dockerfile: &dockerbuild.DockerfileArgs{ // Location: pulumi.String("app/Dockerfile"), // }, // }) @@ -513,20 +513,20 @@ import ( // // 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 { -// _, err := buildx.NewImage(ctx, "image", &buildx.ImageArgs{ -// Context: &buildx.BuildContextArgs{ +// _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{ +// Context: &dockerbuild.BuildContextArgs{ // Location: pulumi.String("app"), // }, -// Exports: buildx.ExportArray{ -// &buildx.ExportArgs{ -// Docker: &buildx.ExportDockerArgs{ +// Exports: dockerbuild.ExportArray{ +// &dockerbuild.ExportArgs{ +// Docker: &dockerbuild.ExportDockerArgs{ // Tar: pulumi.Bool(true), // }, // }, diff --git a/sdk/go/dockerbuild/x/index.go b/sdk/go/dockerbuild/x/index.go index 0cd2026..1d446a5 100644 --- a/sdk/go/dockerbuild/x/index.go +++ b/sdk/go/dockerbuild/x/index.go @@ -28,34 +28,34 @@ import ( // // 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"), @@ -64,27 +64,27 @@ import ( // 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"), @@ -93,7 +93,7 @@ import ( // 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, diff --git a/sdk/java/src/main/java/com/pulumi/dockerbuild/Image.java b/sdk/java/src/main/java/com/pulumi/dockerbuild/Image.java index ed625a3..f631034 100644 --- a/sdk/java/src/main/java/com/pulumi/dockerbuild/Image.java +++ b/sdk/java/src/main/java/com/pulumi/dockerbuild/Image.java @@ -44,12 +44,12 @@ import javax.annotation.Nullable; * * ## 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 * @@ -60,8 +60,8 @@ import javax.annotation.Nullable; * 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`. * @@ -70,7 +70,7 @@ import javax.annotation.Nullable; * 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. @@ -81,7 +81,7 @@ import javax.annotation.Nullable; * * 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. @@ -96,7 +96,7 @@ import javax.annotation.Nullable; * 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 @@ -104,7 +104,7 @@ import javax.annotation.Nullable; * 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. * @@ -117,7 +117,7 @@ import javax.annotation.Nullable; * 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. * @@ -125,11 +125,11 @@ import javax.annotation.Nullable; * * ### 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. @@ -147,14 +147,14 @@ import javax.annotation.Nullable; * import com.pulumi.aws.ecr.Repository; * import com.pulumi.aws.ecr.EcrFunctions; * import com.pulumi.aws.ecr.inputs.GetAuthorizationTokenArgs; - * 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.inputs.RegistryAuthArgs; + * 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.inputs.RegistryArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -191,7 +191,7 @@ import javax.annotation.Nullable; * .location("./app") * .build()) * .push(true) - * .registries(RegistryAuthArgs.builder() + * .registries(RegistryArgs.builder() * .address(ecrRepository.repositoryUrl()) * .password(authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult).applyValue(authToken -> authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult.password()))) * .username(authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult).applyValue(authToken -> authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult.userName()))) @@ -210,9 +210,9 @@ import javax.annotation.Nullable; * 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.BuildContextArgs; + * import com.pulumi.dockerbuild.Image; + * import com.pulumi.dockerbuild.ImageArgs; + * import com.pulumi.dockerbuild.inputs.BuildContextArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -245,10 +245,10 @@ import javax.annotation.Nullable; * 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.BuildContextArgs; - * import com.pulumi.docker.buildx.inputs.RegistryAuthArgs; + * import com.pulumi.dockerbuild.Image; + * import com.pulumi.dockerbuild.ImageArgs; + * import com.pulumi.dockerbuild.inputs.BuildContextArgs; + * import com.pulumi.dockerbuild.inputs.RegistryArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -267,7 +267,7 @@ import javax.annotation.Nullable; * .location("app") * .build()) * .push(true) - * .registries(RegistryAuthArgs.builder() + * .registries(RegistryArgs.builder() * .address("docker.io") * .password(dockerHubPassword) * .username("pulumibot") @@ -286,13 +286,13 @@ import javax.annotation.Nullable; * 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.CacheFromLocalArgs; - * import com.pulumi.docker.buildx.inputs.CacheToArgs; - * import com.pulumi.docker.buildx.inputs.CacheToLocalArgs; - * import com.pulumi.docker.buildx.inputs.BuildContextArgs; + * import com.pulumi.dockerbuild.Image; + * import com.pulumi.dockerbuild.ImageArgs; + * import com.pulumi.dockerbuild.inputs.CacheFromArgs; + * import com.pulumi.dockerbuild.inputs.CacheFromLocalArgs; + * import com.pulumi.dockerbuild.inputs.CacheToArgs; + * import com.pulumi.dockerbuild.inputs.CacheToLocalArgs; + * import com.pulumi.dockerbuild.inputs.BuildContextArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -333,10 +333,10 @@ import javax.annotation.Nullable; * 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.BuilderConfigArgs; - * import com.pulumi.docker.buildx.inputs.BuildContextArgs; + * import com.pulumi.dockerbuild.Image; + * import com.pulumi.dockerbuild.ImageArgs; + * import com.pulumi.dockerbuild.inputs.BuilderConfigArgs; + * import com.pulumi.dockerbuild.inputs.BuildContextArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -370,9 +370,9 @@ import javax.annotation.Nullable; * 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.BuildContextArgs; + * import com.pulumi.dockerbuild.Image; + * import com.pulumi.dockerbuild.ImageArgs; + * import com.pulumi.dockerbuild.inputs.BuildContextArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -403,9 +403,9 @@ import javax.annotation.Nullable; * 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.BuildContextArgs; + * import com.pulumi.dockerbuild.Image; + * import com.pulumi.dockerbuild.ImageArgs; + * import com.pulumi.dockerbuild.inputs.BuildContextArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -436,9 +436,9 @@ import javax.annotation.Nullable; * 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.BuildContextArgs; + * import com.pulumi.dockerbuild.Image; + * import com.pulumi.dockerbuild.ImageArgs; + * import com.pulumi.dockerbuild.inputs.BuildContextArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -469,9 +469,9 @@ import javax.annotation.Nullable; * 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.BuildContextArgs; + * import com.pulumi.dockerbuild.Image; + * import com.pulumi.dockerbuild.ImageArgs; + * import com.pulumi.dockerbuild.inputs.BuildContextArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -501,10 +501,10 @@ import javax.annotation.Nullable; * 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.BuildContextArgs; - * import com.pulumi.docker.buildx.inputs.DockerfileArgs; + * import com.pulumi.dockerbuild.Image; + * import com.pulumi.dockerbuild.ImageArgs; + * import com.pulumi.dockerbuild.inputs.BuildContextArgs; + * import com.pulumi.dockerbuild.inputs.DockerfileArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -540,10 +540,10 @@ import javax.annotation.Nullable; * 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.BuildContextArgs; - * import com.pulumi.docker.buildx.inputs.DockerfileArgs; + * import com.pulumi.dockerbuild.Image; + * import com.pulumi.dockerbuild.ImageArgs; + * import com.pulumi.dockerbuild.inputs.BuildContextArgs; + * import com.pulumi.dockerbuild.inputs.DockerfileArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -576,11 +576,11 @@ import javax.annotation.Nullable; * 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.BuildContextArgs; - * import com.pulumi.docker.buildx.inputs.ExportArgs; - * import com.pulumi.docker.buildx.inputs.ExportDockerArgs; + * import com.pulumi.dockerbuild.Image; + * import com.pulumi.dockerbuild.ImageArgs; + * import com.pulumi.dockerbuild.inputs.BuildContextArgs; + * import com.pulumi.dockerbuild.inputs.ExportArgs; + * import com.pulumi.dockerbuild.inputs.ExportDockerArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; diff --git a/sdk/java/src/main/java/com/pulumi/dockerbuild/Index.java b/sdk/java/src/main/java/com/pulumi/dockerbuild/Index.java index 1823bb5..9dafae2 100644 --- a/sdk/java/src/main/java/com/pulumi/dockerbuild/Index.java +++ b/sdk/java/src/main/java/com/pulumi/dockerbuild/Index.java @@ -33,15 +33,15 @@ import javax.annotation.Nullable; * 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; diff --git a/sdk/nodejs/image.ts b/sdk/nodejs/image.ts index a9d0947..3d9d005 100644 --- a/sdk/nodejs/image.ts +++ b/sdk/nodejs/image.ts @@ -26,12 +26,12 @@ import * as utilities from "./utilities"; * * ## 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 * @@ -42,8 +42,8 @@ import * as utilities from "./utilities"; * 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`. * @@ -52,7 +52,7 @@ import * as utilities from "./utilities"; * 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. @@ -63,7 +63,7 @@ import * as utilities from "./utilities"; * * 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. @@ -78,7 +78,7 @@ import * as utilities from "./utilities"; * 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 @@ -86,7 +86,7 @@ import * as utilities from "./utilities"; * 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. * @@ -99,7 +99,7 @@ import * as utilities from "./utilities"; * 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. * @@ -107,11 +107,11 @@ import * as utilities from "./utilities"; * * ### 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. @@ -160,8 +160,8 @@ import * as utilities from "./utilities"; * }, * }); * - * // 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: { @@ -219,8 +219,8 @@ import * as utilities from "./utilities"; * }, * }); * - * // 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: { @@ -253,13 +253,13 @@ import * as utilities from "./utilities"; * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as aws from "@pulumi/aws"; - * import * as docker from "@pulumi/docker"; + * import * as dockerbuild from "@pulumi/dockerbuild"; * * const ecrRepository = new aws.ecr.Repository("ecr-repository", {}); * const authToken = aws.ecr.getAuthorizationTokenOutput({ * registryId: ecrRepository.registryId, * }); - * const myImage = new docker.buildx.Image("my-image", { + * const myImage = new dockerbuild.Image("my-image", { * cacheFrom: [{ * registry: { * ref: pulumi.interpolate`${ecrRepository.repositoryUrl}:cache`, @@ -289,15 +289,15 @@ import * as utilities from "./utilities"; * * ```typescript * import * as pulumi from "@pulumi/pulumi"; - * import * as docker from "@pulumi/docker"; + * import * as dockerbuild from "@pulumi/dockerbuild"; * - * const image = new docker.buildx.Image("image", { + * const image = new dockerbuild.Image("image", { * context: { * location: "app", * }, * platforms: [ - * docker.buildx.image.Platform.Plan9_amd64, - * docker.buildx.image.Platform.Plan9_386, + * dockerbuild.Platform.Plan9_amd64, + * dockerbuild.Platform.Plan9_386, * ], * }); * ``` @@ -305,9 +305,9 @@ import * as utilities from "./utilities"; * * ```typescript * import * as pulumi from "@pulumi/pulumi"; - * import * as docker from "@pulumi/docker"; + * import * as dockerbuild from "@pulumi/dockerbuild"; * - * const image = new docker.buildx.Image("image", { + * const image = new dockerbuild.Image("image", { * context: { * location: "app", * }, @@ -325,9 +325,9 @@ import * as utilities from "./utilities"; * * ```typescript * import * as pulumi from "@pulumi/pulumi"; - * import * as docker from "@pulumi/docker"; + * import * as dockerbuild from "@pulumi/dockerbuild"; * - * const image = new docker.buildx.Image("image", { + * const image = new dockerbuild.Image("image", { * cacheFrom: [{ * local: { * src: "tmp/cache", @@ -336,7 +336,7 @@ import * as utilities from "./utilities"; * cacheTo: [{ * local: { * dest: "tmp/cache", - * mode: docker.buildx.image.CacheMode.Max, + * mode: dockerbuild.CacheMode.Max, * }, * }], * context: { @@ -348,9 +348,9 @@ import * as utilities from "./utilities"; * * ```typescript * import * as pulumi from "@pulumi/pulumi"; - * import * as docker from "@pulumi/docker"; + * import * as dockerbuild from "@pulumi/dockerbuild"; * - * const image = new docker.buildx.Image("image", { + * const image = new dockerbuild.Image("image", { * builder: { * name: "cloud-builder-name", * }, @@ -364,9 +364,9 @@ import * as utilities from "./utilities"; * * ```typescript * import * as pulumi from "@pulumi/pulumi"; - * import * as docker from "@pulumi/docker"; + * import * as dockerbuild from "@pulumi/dockerbuild"; * - * const image = new docker.buildx.Image("image", { + * const image = new dockerbuild.Image("image", { * buildArgs: { * SET_ME_TO_TRUE: "true", * }, @@ -379,9 +379,9 @@ import * as utilities from "./utilities"; * * ```typescript * import * as pulumi from "@pulumi/pulumi"; - * import * as docker from "@pulumi/docker"; + * import * as dockerbuild from "@pulumi/dockerbuild"; * - * const image = new docker.buildx.Image("image", { + * const image = new dockerbuild.Image("image", { * context: { * location: "app", * }, @@ -392,9 +392,9 @@ import * as utilities from "./utilities"; * * ```typescript * import * as pulumi from "@pulumi/pulumi"; - * import * as docker from "@pulumi/docker"; + * import * as dockerbuild from "@pulumi/dockerbuild"; * - * const image = new docker.buildx.Image("image", {context: { + * const image = new dockerbuild.Image("image", {context: { * location: "app", * named: { * "golang:latest": { @@ -407,9 +407,9 @@ import * as utilities from "./utilities"; * * ```typescript * import * as pulumi from "@pulumi/pulumi"; - * import * as docker from "@pulumi/docker"; + * import * as dockerbuild from "@pulumi/dockerbuild"; * - * const image = new docker.buildx.Image("image", {context: { + * const image = new dockerbuild.Image("image", {context: { * location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile", * }}); * ``` @@ -417,9 +417,9 @@ import * as utilities from "./utilities"; * * ```typescript * import * as pulumi from "@pulumi/pulumi"; - * import * as docker from "@pulumi/docker"; + * import * as dockerbuild from "@pulumi/dockerbuild"; * - * const image = new docker.buildx.Image("image", { + * const image = new dockerbuild.Image("image", { * context: { * location: "app", * }, @@ -434,9 +434,9 @@ import * as utilities from "./utilities"; * * ```typescript * import * as pulumi from "@pulumi/pulumi"; - * import * as docker from "@pulumi/docker"; + * import * as dockerbuild from "@pulumi/dockerbuild"; * - * const image = new docker.buildx.Image("image", { + * const image = new dockerbuild.Image("image", { * context: { * location: "https://github.com/docker-library/hello-world.git", * }, @@ -449,9 +449,9 @@ import * as utilities from "./utilities"; * * ```typescript * import * as pulumi from "@pulumi/pulumi"; - * import * as docker from "@pulumi/docker"; + * import * as dockerbuild from "@pulumi/dockerbuild"; * - * const image = new docker.buildx.Image("image", { + * const image = new dockerbuild.Image("image", { * context: { * location: "app", * }, diff --git a/sdk/nodejs/index_.ts b/sdk/nodejs/index_.ts index 413e521..0109824 100644 --- a/sdk/nodejs/index_.ts +++ b/sdk/nodejs/index_.ts @@ -21,9 +21,9 @@ import * as utilities from "./utilities"; * * ```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", @@ -31,17 +31,17 @@ import * as utilities from "./utilities"; * }], * 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", @@ -49,17 +49,17 @@ import * as utilities from "./utilities"; * }], * 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, diff --git a/sdk/python/pulumi_dockerbuild/image.py b/sdk/python/pulumi_dockerbuild/image.py index 1d07c9f..5f3bb01 100644 --- a/sdk/python/pulumi_dockerbuild/image.py +++ b/sdk/python/pulumi_dockerbuild/image.py @@ -629,12 +629,12 @@ class Image(pulumi.CustomResource): ## 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 @@ -645,8 +645,8 @@ class Image(pulumi.CustomResource): 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`. @@ -655,7 +655,7 @@ class Image(pulumi.CustomResource): 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. @@ -666,7 +666,7 @@ class Image(pulumi.CustomResource): 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. @@ -681,7 +681,7 @@ class Image(pulumi.CustomResource): 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 @@ -689,7 +689,7 @@ class Image(pulumi.CustomResource): 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. @@ -702,7 +702,7 @@ class Image(pulumi.CustomResource): 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. @@ -710,11 +710,11 @@ class Image(pulumi.CustomResource): ### 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. @@ -726,28 +726,28 @@ class Image(pulumi.CustomResource): ```python import pulumi import pulumi_aws as aws - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild ecr_repository = aws.ecr.Repository("ecr-repository") auth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id) - my_image = docker.buildx.Image("my-image", - cache_from=[docker.buildx.CacheFromArgs( - registry=docker.buildx.CacheFromRegistryArgs( + my_image = dockerbuild.Image("my-image", + cache_from=[dockerbuild.CacheFromArgs( + registry=dockerbuild.CacheFromRegistryArgs( ref=ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:cache"), ), )], - cache_to=[docker.buildx.CacheToArgs( - registry=docker.buildx.CacheToRegistryArgs( + cache_to=[dockerbuild.CacheToArgs( + registry=dockerbuild.CacheToRegistryArgs( image_manifest=True, oci_media_types=True, ref=ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:cache"), ), )], - context=docker.buildx.BuildContextArgs( + context=dockerbuild.BuildContextArgs( location="./app", ), push=True, - registries=[docker.buildx.RegistryAuthArgs( + registries=[dockerbuild.RegistryArgs( address=ecr_repository.repository_url, password=auth_token.password, username=auth_token.user_name, @@ -758,28 +758,28 @@ class Image(pulumi.CustomResource): ### Multi-platform image ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), platforms=[ - docker.buildx.image.Platform.PLAN9_AMD64, - docker.buildx.image.Platform.PLAN9_386, + dockerbuild.Platform.PLAN9_AMD64, + dockerbuild.Platform.PLAN9_386, ]) ``` ### Registry export ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), push=True, - registries=[docker.buildx.RegistryAuthArgs( + registries=[dockerbuild.RegistryArgs( address="docker.io", password=docker_hub_password, username="pulumibot", @@ -790,34 +790,34 @@ class Image(pulumi.CustomResource): ### Caching ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - cache_from=[docker.buildx.CacheFromArgs( - local=docker.buildx.CacheFromLocalArgs( + image = dockerbuild.Image("image", + cache_from=[dockerbuild.CacheFromArgs( + local=dockerbuild.CacheFromLocalArgs( src="tmp/cache", ), )], - cache_to=[docker.buildx.CacheToArgs( - local=docker.buildx.CacheToLocalArgs( + cache_to=[dockerbuild.CacheToArgs( + local=dockerbuild.CacheToLocalArgs( dest="tmp/cache", - mode=docker.buildx.image.CacheMode.MAX, + mode=dockerbuild.CacheMode.MAX, ), )], - context=docker.buildx.BuildContextArgs( + context=dockerbuild.BuildContextArgs( location="app", )) ``` ### Docker Build Cloud ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - builder=docker.buildx.BuilderConfigArgs( + image = dockerbuild.Image("image", + builder=dockerbuild.BuilderConfigArgs( name="cloud-builder-name", ), - context=docker.buildx.BuildContextArgs( + context=dockerbuild.BuildContextArgs( location="app", ), exec_=True) @@ -825,23 +825,23 @@ class Image(pulumi.CustomResource): ### Build arguments ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", + image = dockerbuild.Image("image", build_args={ "SET_ME_TO_TRUE": "true", }, - context=docker.buildx.BuildContextArgs( + context=dockerbuild.BuildContextArgs( location="app", )) ``` ### Build target ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), target="build-me") @@ -849,12 +849,12 @@ class Image(pulumi.CustomResource): ### Named contexts ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", context=dockerbuild.BuildContextArgs( location="app", named={ - "golang:latest": docker.buildx.ContextArgs( + "golang:latest": dockerbuild.ContextArgs( location="docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984", ), }, @@ -863,22 +863,22 @@ class Image(pulumi.CustomResource): ### Remote context ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", context=dockerbuild.BuildContextArgs( location="https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile", )) ``` ### Inline Dockerfile ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), - dockerfile=docker.buildx.DockerfileArgs( + dockerfile=dockerbuild.DockerfileArgs( inline=\"\"\"FROM busybox COPY hello.c ./ \"\"\", @@ -887,27 +887,27 @@ class Image(pulumi.CustomResource): ### Remote context ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="https://github.com/docker-library/hello-world.git", ), - dockerfile=docker.buildx.DockerfileArgs( + dockerfile=dockerbuild.DockerfileArgs( location="app/Dockerfile", )) ``` ### Local export ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), - exports=[docker.buildx.ExportArgs( - docker=docker.buildx.ExportDockerArgs( + exports=[dockerbuild.ExportArgs( + docker=dockerbuild.ExportDockerArgs( tar=True, ), )]) @@ -1066,12 +1066,12 @@ class Image(pulumi.CustomResource): ## 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 @@ -1082,8 +1082,8 @@ class Image(pulumi.CustomResource): 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`. @@ -1092,7 +1092,7 @@ class Image(pulumi.CustomResource): 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. @@ -1103,7 +1103,7 @@ class Image(pulumi.CustomResource): 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. @@ -1118,7 +1118,7 @@ class Image(pulumi.CustomResource): 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 @@ -1126,7 +1126,7 @@ class Image(pulumi.CustomResource): 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. @@ -1139,7 +1139,7 @@ class Image(pulumi.CustomResource): 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. @@ -1147,11 +1147,11 @@ class Image(pulumi.CustomResource): ### 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. @@ -1163,28 +1163,28 @@ class Image(pulumi.CustomResource): ```python import pulumi import pulumi_aws as aws - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild ecr_repository = aws.ecr.Repository("ecr-repository") auth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id) - my_image = docker.buildx.Image("my-image", - cache_from=[docker.buildx.CacheFromArgs( - registry=docker.buildx.CacheFromRegistryArgs( + my_image = dockerbuild.Image("my-image", + cache_from=[dockerbuild.CacheFromArgs( + registry=dockerbuild.CacheFromRegistryArgs( ref=ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:cache"), ), )], - cache_to=[docker.buildx.CacheToArgs( - registry=docker.buildx.CacheToRegistryArgs( + cache_to=[dockerbuild.CacheToArgs( + registry=dockerbuild.CacheToRegistryArgs( image_manifest=True, oci_media_types=True, ref=ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:cache"), ), )], - context=docker.buildx.BuildContextArgs( + context=dockerbuild.BuildContextArgs( location="./app", ), push=True, - registries=[docker.buildx.RegistryAuthArgs( + registries=[dockerbuild.RegistryArgs( address=ecr_repository.repository_url, password=auth_token.password, username=auth_token.user_name, @@ -1195,28 +1195,28 @@ class Image(pulumi.CustomResource): ### Multi-platform image ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), platforms=[ - docker.buildx.image.Platform.PLAN9_AMD64, - docker.buildx.image.Platform.PLAN9_386, + dockerbuild.Platform.PLAN9_AMD64, + dockerbuild.Platform.PLAN9_386, ]) ``` ### Registry export ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), push=True, - registries=[docker.buildx.RegistryAuthArgs( + registries=[dockerbuild.RegistryArgs( address="docker.io", password=docker_hub_password, username="pulumibot", @@ -1227,34 +1227,34 @@ class Image(pulumi.CustomResource): ### Caching ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - cache_from=[docker.buildx.CacheFromArgs( - local=docker.buildx.CacheFromLocalArgs( + image = dockerbuild.Image("image", + cache_from=[dockerbuild.CacheFromArgs( + local=dockerbuild.CacheFromLocalArgs( src="tmp/cache", ), )], - cache_to=[docker.buildx.CacheToArgs( - local=docker.buildx.CacheToLocalArgs( + cache_to=[dockerbuild.CacheToArgs( + local=dockerbuild.CacheToLocalArgs( dest="tmp/cache", - mode=docker.buildx.image.CacheMode.MAX, + mode=dockerbuild.CacheMode.MAX, ), )], - context=docker.buildx.BuildContextArgs( + context=dockerbuild.BuildContextArgs( location="app", )) ``` ### Docker Build Cloud ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - builder=docker.buildx.BuilderConfigArgs( + image = dockerbuild.Image("image", + builder=dockerbuild.BuilderConfigArgs( name="cloud-builder-name", ), - context=docker.buildx.BuildContextArgs( + context=dockerbuild.BuildContextArgs( location="app", ), exec_=True) @@ -1262,23 +1262,23 @@ class Image(pulumi.CustomResource): ### Build arguments ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", + image = dockerbuild.Image("image", build_args={ "SET_ME_TO_TRUE": "true", }, - context=docker.buildx.BuildContextArgs( + context=dockerbuild.BuildContextArgs( location="app", )) ``` ### Build target ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), target="build-me") @@ -1286,12 +1286,12 @@ class Image(pulumi.CustomResource): ### Named contexts ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", context=dockerbuild.BuildContextArgs( location="app", named={ - "golang:latest": docker.buildx.ContextArgs( + "golang:latest": dockerbuild.ContextArgs( location="docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984", ), }, @@ -1300,22 +1300,22 @@ class Image(pulumi.CustomResource): ### Remote context ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", context=dockerbuild.BuildContextArgs( location="https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile", )) ``` ### Inline Dockerfile ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), - dockerfile=docker.buildx.DockerfileArgs( + dockerfile=dockerbuild.DockerfileArgs( inline=\"\"\"FROM busybox COPY hello.c ./ \"\"\", @@ -1324,27 +1324,27 @@ class Image(pulumi.CustomResource): ### Remote context ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="https://github.com/docker-library/hello-world.git", ), - dockerfile=docker.buildx.DockerfileArgs( + dockerfile=dockerbuild.DockerfileArgs( location="app/Dockerfile", )) ``` ### Local export ```python import pulumi - import pulumi_docker as docker + import pulumi_dockerbuild as dockerbuild - image = docker.buildx.Image("image", - context=docker.buildx.BuildContextArgs( + image = dockerbuild.Image("image", + context=dockerbuild.BuildContextArgs( location="app", ), - exports=[docker.buildx.ExportArgs( - docker=docker.buildx.ExportDockerArgs( + exports=[dockerbuild.ExportArgs( + docker=dockerbuild.ExportDockerArgs( tar=True, ), )]) diff --git a/sdk/python/pulumi_dockerbuild/index.py b/sdk/python/pulumi_dockerbuild/index.py index aa1c268..b6de6d9 100644 --- a/sdk/python/pulumi_dockerbuild/index.py +++ b/sdk/python/pulumi_dockerbuild/index.py @@ -116,43 +116,43 @@ class Index(pulumi.CustomResource): ### Multi-platform registry caching ```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, @@ -191,43 +191,43 @@ class Index(pulumi.CustomResource): ### Multi-platform registry caching ```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,