diff --git a/examples/go.mod b/examples/go.mod index ea710e75..7fd71faf 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -4,7 +4,7 @@ go 1.21 require ( github.com/docker/docker v24.0.7+incompatible - github.com/pulumi/pulumi/pkg/v3 v3.108.1 + github.com/pulumi/pulumi/pkg/v3 v3.111.1 github.com/stretchr/testify v1.8.4 ) @@ -146,7 +146,7 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect github.com/pulumi/esc v0.6.2 // indirect - github.com/pulumi/pulumi/sdk/v3 v3.108.1 // indirect + github.com/pulumi/pulumi/sdk/v3 v3.111.1 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect diff --git a/examples/go.sum b/examples/go.sum index 8c44ef1c..ce8c38cb 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -1831,10 +1831,10 @@ github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435 github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= github.com/pulumi/esc v0.6.2 h1:+z+l8cuwIauLSwXQS0uoI3rqB+YG4SzsZYtHfNoXBvw= github.com/pulumi/esc v0.6.2/go.mod h1:jNnYNjzsOgVTjCp0LL24NsCk8ZJxq4IoLQdCT0X7l8k= -github.com/pulumi/pulumi/pkg/v3 v3.108.1 h1:K1UK40v5IpEPIaJ2un3WNOTBbLQaKR26HbLLh5EmMHY= -github.com/pulumi/pulumi/pkg/v3 v3.108.1/go.mod h1:48uCfxkPXUq/XTBqei9VuR0CRWObnSVlqcLkD6DhII8= -github.com/pulumi/pulumi/sdk/v3 v3.108.1 h1:5idjc3JmzToYVizRPbFyjJ5UU4AbExd04pcSP9AhPEc= -github.com/pulumi/pulumi/sdk/v3 v3.108.1/go.mod h1:5A6GHUwAJlRY1SSLZh84aDIbsBShcrfcmHzI50ecSBg= +github.com/pulumi/pulumi/pkg/v3 v3.111.1 h1:SrVgQE96T7YlZx/AZoFSlXYwur7ZmQUHyjbPI8sH96Q= +github.com/pulumi/pulumi/pkg/v3 v3.111.1/go.mod h1:ZWsq8Y0EMHZ5E2ju92jC+POz97TEXs3BbQ6r2o0U4SA= +github.com/pulumi/pulumi/sdk/v3 v3.111.1 h1:uOeG/b6YxBuL59xHtmFPspMa8BB6ovjHelL7sVCGJZw= +github.com/pulumi/pulumi/sdk/v3 v3.111.1/go.mod h1:5A6GHUwAJlRY1SSLZh84aDIbsBShcrfcmHzI50ecSBg= github.com/rakyll/embedmd v0.0.0-20171029212350-c8060a0752a2/go.mod h1:7jOTMgqac46PZcF54q6l2hkLEG8op93fZu61KmxWDV4= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= diff --git a/provider/cmd/pulumi-resource-docker/schema.json b/provider/cmd/pulumi-resource-docker/schema.json index e42fe4be..aa2b7954 100644 --- a/provider/cmd/pulumi-resource-docker/schema.json +++ b/provider/cmd/pulumi-resource-docker/schema.json @@ -3165,7 +3165,7 @@ } }, "docker:index/image:Image": { - "description": "`Image` builds a Docker image and pushes it Docker and OCI compatible registries.\nThis resource enables running Docker builds as part of a Pulumi deployment.\n\nNote: This resource does not delete tags, locally or remotely, when destroyed.\n\n## Image name\n\nThe Image resource uses `imageName` to refer to a fully qualified Docker image name, by the format `repository:tag`.\nNote that this does not include any digest information and thus will not cause any updates when passed to dependencies,\neven when using `latest` tag. To trigger such updates, e.g. when referencing pushed images in container orchestration \nand management resources, please use the `repoDigest` Output instead, which is of the format \n`repository@\u003calgorithm\u003e:\u003chash\u003e` and unique per build/push. \nAs of Docker v4.4, `repoDigest` is now available for local Images.\n\n## Cross-platform builds\n\nThe Image resource supports cross-platform builds when the [Docker engine has cross-platform support enabled via emulators](https://docs.docker.com/build/building/multi-platform/#building-multi-platform-images).\nThe Image resource currently supports providing only a single operating system and architecture in the `platform` field, e.g.: `linux/amd64`.\nTo enable this support, you may need to install the emulators in the environment running your Pulumi program.\n\nIf you are using Linux, you may be using Docker Engine or Docker Desktop for Linux, depending on how you have installed Docker. The [FAQ for Docker Desktop for Linux](https://docs.docker.com/desktop/faqs/linuxfaqs/#context) describes the differences and how to select which Docker context is in use.\n\n* For local development using Docker Desktop, this is enabled by default.\n* For systems using Docker Engine, install the QEMU binaries and register them with using the docker image from [github.com/tonistiigi/binfmt](https://github.com/tonistiigi/binfmt):\n\n ```shell\n docker run --privileged --rm tonistiigi/binfmt --install all\n ```\n* In a GitHub Actions workflow, the [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) can be used instead by adding this step to your workflow file. Example workflow usage:\n\n ```yaml\n name: Pulumi\n on:\n push:\n branches:\n - master\n jobs:\n up:\n name: Preview\n runs-on: ubuntu-latest\n steps:\n # This is the step added:\n - name: Set up QEMU\n uses: docker/setup-qemu-action@v2\n # The ordinary pulumi/actions workflow:\n - uses: actions/checkout@v3\n - uses: pulumi/actions@v4\n with:\n command: preview\n stack-name: org-name/stack-name\n env:\n PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}\n ```\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### A Docker image build\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst demoImage = new docker.Image(\"demo-image\", {\n build: {\n context: \".\",\n dockerfile: \"Dockerfile\",\n platform: \"linux/amd64\",\n },\n imageName: \"username/image:tag1\",\n skipPush: true,\n});\nexport const imageName = demoImage.imageName;\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\ndemo_image = docker.Image(\"demo-image\",\n build=docker.DockerBuildArgs(\n context=\".\",\n dockerfile=\"Dockerfile\",\n platform=\"linux/amd64\",\n ),\n image_name=\"username/image:tag1\",\n skip_push=True)\npulumi.export(\"imageName\", demo_image.image_name)\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 demoImage = new Docker.Image(\"demo-image\", new()\n {\n Build = new Docker.Inputs.DockerBuildArgs\n {\n Context = \".\",\n Dockerfile = \"Dockerfile\",\n Platform = \"linux/amd64\",\n },\n ImageName = \"username/image:tag1\",\n SkipPush = true,\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"imageName\"] = demoImage.ImageName,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoImage, err := docker.NewImage(ctx, \"demo-image\", \u0026docker.ImageArgs{\n\t\t\tBuild: \u0026docker.DockerBuildArgs{\n\t\t\t\tContext: pulumi.String(\".\"),\n\t\t\t\tDockerfile: pulumi.String(\"Dockerfile\"),\n\t\t\t\tPlatform: pulumi.String(\"linux/amd64\"),\n\t\t\t},\n\t\t\tImageName: pulumi.String(\"username/image:tag1\"),\n\t\t\tSkipPush: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"imageName\", demoImage.ImageName)\n\t\treturn nil\n\t})\n}\n```\n```yaml\nconfig: {}\ndescription: A Docker image build\nname: image-yaml\noutputs:\n imageName: ${demo-image.imageName}\nresources:\n demo-image:\n options:\n version: v4.4.0\n properties:\n build:\n context: .\n dockerfile: Dockerfile\n platform: linux/amd64\n imageName: username/image:tag1\n skipPush: true\n type: docker:Image\nruntime: yaml\nvariables: {}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.Image;\nimport com.pulumi.docker.ImageArgs;\nimport com.pulumi.docker.inputs.DockerBuildArgs;\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 demoImage = new Image(\"demoImage\", ImageArgs.builder() \n .build(DockerBuildArgs.builder()\n .context(\".\")\n .dockerfile(\"Dockerfile\")\n .platform(\"linux/amd64\")\n .build())\n .imageName(\"username/image:tag1\")\n .skipPush(true)\n .build());\n\n ctx.export(\"imageName\", demoImage.imageName());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### A Docker image build and push\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst demoPushImage = new docker.Image(\"demo-push-image\", {\n build: {\n context: \".\",\n dockerfile: \"Dockerfile\",\n },\n imageName: \"docker.io/username/push-image:tag1\",\n});\nexport const imageName = demoPushImage.imageName;\nexport const repoDigest = demoPushImage.repoDigest;\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\ndemo_push_image = docker.Image(\"demo-push-image\",\n build=docker.DockerBuildArgs(\n context=\".\",\n dockerfile=\"Dockerfile\",\n ),\n image_name=\"docker.io/username/push-image:tag1\")\npulumi.export(\"imageName\", demo_push_image.image_name)\npulumi.export(\"repoDigest\", demo_push_image.repo_digest)\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 demoPushImage = new Docker.Image(\"demo-push-image\", new()\n {\n Build = new Docker.Inputs.DockerBuildArgs\n {\n Context = \".\",\n Dockerfile = \"Dockerfile\",\n },\n ImageName = \"docker.io/username/push-image:tag1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"imageName\"] = demoPushImage.ImageName,\n [\"repoDigest\"] = demoPushImage.RepoDigest,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoPushImage, err := docker.NewImage(ctx, \"demo-push-image\", \u0026docker.ImageArgs{\n\t\t\tBuild: \u0026docker.DockerBuildArgs{\n\t\t\t\tContext: pulumi.String(\".\"),\n\t\t\t\tDockerfile: pulumi.String(\"Dockerfile\"),\n\t\t\t},\n\t\t\tImageName: pulumi.String(\"docker.io/username/push-image:tag1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"imageName\", demoPushImage.ImageName)\n\t\tctx.Export(\"repoDigest\", demoPushImage.RepoDigest)\n\t\treturn nil\n\t})\n}\n```\n```yaml\nconfig: {}\ndescription: A Docker image build and push\nname: image-push-yaml\noutputs:\n imageName: ${demo-push-image.imageName}\n repoDigest: ${demo-push-image.repoDigest}\nresources:\n demo-push-image:\n options:\n version: v4.4.0\n properties:\n build:\n context: .\n dockerfile: Dockerfile\n imageName: docker.io/username/push-image:tag1\n type: docker:Image\nruntime: yaml\nvariables: {}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.Image;\nimport com.pulumi.docker.ImageArgs;\nimport com.pulumi.docker.inputs.DockerBuildArgs;\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 demoPushImage = new Image(\"demoPushImage\", ImageArgs.builder() \n .build(DockerBuildArgs.builder()\n .context(\".\")\n .dockerfile(\"Dockerfile\")\n .build())\n .imageName(\"docker.io/username/push-image:tag1\")\n .build());\n\n ctx.export(\"imageName\", demoPushImage.imageName());\n ctx.export(\"repoDigest\", demoPushImage.repoDigest());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Docker image build using caching with AWS Elastic Container Registry\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\", {name: \"docker-repository\"});\nconst authToken = aws.ecr.getAuthorizationTokenOutput({\n registryId: ecrRepository.registryId,\n});\nconst myAppImage = new docker.Image(\"my-app-image\", {\n build: {\n args: {\n BUILDKIT_INLINE_CACHE: \"1\",\n },\n cacheFrom: {\n images: [pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`],\n },\n context: \"app/\",\n dockerfile: \"Dockerfile\",\n },\n imageName: pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`,\n registry: {\n password: pulumi.secret(authToken.apply(authToken =\u003e authToken.password)),\n server: ecrRepository.repositoryUrl,\n },\n});\nexport const imageName = myAppImage.imageName;\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_docker as docker\n\necr_repository = aws.ecr.Repository(\"ecr-repository\", name=\"docker-repository\")\nauth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id)\nmy_app_image = docker.Image(\"my-app-image\",\n build=docker.DockerBuildArgs(\n args={\n \"BUILDKIT_INLINE_CACHE\": \"1\",\n },\n cache_from=docker.CacheFromArgs(\n images=[ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:latest\")],\n ),\n context=\"app/\",\n dockerfile=\"Dockerfile\",\n ),\n image_name=ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:latest\"),\n registry=docker.RegistryArgs(\n password=pulumi.Output.secret(auth_token.password),\n server=ecr_repository.repository_url,\n ))\npulumi.export(\"imageName\", my_app_image.image_name)\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\", new()\n {\n Name = \"docker-repository\",\n });\n\n var authToken = Aws.Ecr.GetAuthorizationToken.Invoke(new()\n {\n RegistryId = ecrRepository.RegistryId,\n });\n\n var myAppImage = new Docker.Image(\"my-app-image\", new()\n {\n Build = new Docker.Inputs.DockerBuildArgs\n {\n Args = \n {\n { \"BUILDKIT_INLINE_CACHE\", \"1\" },\n },\n CacheFrom = new Docker.Inputs.CacheFromArgs\n {\n Images = new[]\n {\n ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:latest\"),\n },\n },\n Context = \"app/\",\n Dockerfile = \"Dockerfile\",\n },\n ImageName = ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:latest\"),\n Registry = new Docker.Inputs.RegistryArgs\n {\n Password = Output.CreateSecret(authToken.Apply(getAuthorizationTokenResult =\u003e getAuthorizationTokenResult.Password)),\n Server = ecrRepository.RepositoryUrl,\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"imageName\"] = myAppImage.ImageName,\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\"\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\", \u0026ecr.RepositoryArgs{\n\t\t\tName: pulumi.String(\"docker-repository\"),\n\t\t})\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\tmyAppImage, err := docker.NewImage(ctx, \"my-app-image\", \u0026docker.ImageArgs{\n\t\t\tBuild: \u0026docker.DockerBuildArgs{\n\t\t\t\tArgs: pulumi.StringMap{\n\t\t\t\t\t\"BUILDKIT_INLINE_CACHE\": pulumi.String(\"1\"),\n\t\t\t\t},\n\t\t\t\tCacheFrom: \u0026docker.CacheFromArgs{\n\t\t\t\t\tImages: pulumi.StringArray{\n\t\t\t\t\t\tecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"%v:latest\", 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\tContext: pulumi.String(\"app/\"),\n\t\t\t\tDockerfile: pulumi.String(\"Dockerfile\"),\n\t\t\t},\n\t\t\tImageName: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"%v:latest\", repositoryUrl), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tRegistry: \u0026docker.RegistryArgs{\n\t\t\t\tPassword: pulumi.ToSecret(authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {\n\t\t\t\t\treturn \u0026authToken.Password, nil\n\t\t\t\t}).(pulumi.StringPtrOutput)).(*pulumi.StringOutput),\n\t\t\t\tServer: ecrRepository.RepositoryUrl,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"imageName\", myAppImage.ImageName)\n\t\treturn nil\n\t})\n}\n```\n```yaml\nconfig: {}\ndescription: Docker image build using caching with AWS Elastic Container Registry\nname: image-caching-yaml\noutputs:\n imageName: ${my-app-image.imageName}\nresources:\n ecr-repository:\n properties:\n name: docker-repository\n type: aws:ecr:Repository\n my-app-image:\n options:\n version: v4.1.2\n properties:\n build:\n args:\n BUILDKIT_INLINE_CACHE: \"1\"\n cacheFrom:\n images:\n - ${ecr-repository.repositoryUrl}:latest\n context: app/\n dockerfile: Dockerfile\n imageName: ${ecr-repository.repositoryUrl}:latest\n registry:\n password:\n fn::secret: ${authToken.password}\n server: ${ecr-repository.repositoryUrl}\n type: docker:Image\nruntime: yaml\nvariables:\n authToken:\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.RepositoryArgs;\nimport com.pulumi.aws.ecr.EcrFunctions;\nimport com.pulumi.aws.ecr.inputs.GetAuthorizationTokenArgs;\nimport com.pulumi.docker.Image;\nimport com.pulumi.docker.ImageArgs;\nimport com.pulumi.docker.inputs.DockerBuildArgs;\nimport com.pulumi.docker.inputs.CacheFromArgs;\nimport com.pulumi.docker.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\", RepositoryArgs.builder() \n .name(\"docker-repository\")\n .build());\n\n final var authToken = EcrFunctions.getAuthorizationToken(GetAuthorizationTokenArgs.builder()\n .registryId(ecrRepository.registryId())\n .build());\n\n var myAppImage = new Image(\"myAppImage\", ImageArgs.builder() \n .build(DockerBuildArgs.builder()\n .args(Map.of(\"BUILDKIT_INLINE_CACHE\", \"1\"))\n .cacheFrom(CacheFromArgs.builder()\n .images(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:latest\", repositoryUrl)))\n .build())\n .context(\"app/\")\n .dockerfile(\"Dockerfile\")\n .build())\n .imageName(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:latest\", repositoryUrl)))\n .registry(RegistryArgs.builder()\n .password(Output.ofSecret(authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult).applyValue(authToken -\u003e authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult.password()))))\n .server(ecrRepository.repositoryUrl())\n .build())\n .build());\n\n ctx.export(\"imageName\", myAppImage.imageName());\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "`Image` builds a Docker image and pushes it Docker and OCI compatible registries.\nThis resource enables running Docker builds as part of a Pulumi deployment.\n\nNote: This resource does not delete tags, locally or remotely, when destroyed.\n\n## Image name\n\nThe Image resource uses `imageName` to refer to a fully qualified Docker image name, by the format `repository:tag`.\nNote that this does not include any digest information and thus will not cause any updates when passed to dependencies,\neven when using `latest` tag. To trigger such updates, e.g. when referencing pushed images in container orchestration \nand management resources, please use the `repoDigest` Output instead, which is of the format \n`repository@\u003calgorithm\u003e:\u003chash\u003e` and unique per build/push. \nAs of Docker v4.4, `repoDigest` is now available for local Images.\n\n## Cross-platform builds\n\nThe Image resource supports cross-platform builds when the [Docker engine has cross-platform support enabled via emulators](https://docs.docker.com/build/building/multi-platform/#building-multi-platform-images).\nThe Image resource currently supports providing only a single operating system and architecture in the `platform` field, e.g.: `linux/amd64`.\nTo enable this support, you may need to install the emulators in the environment running your Pulumi program.\n\nIf you are using Linux, you may be using Docker Engine or Docker Desktop for Linux, depending on how you have installed Docker. The [FAQ for Docker Desktop for Linux](https://docs.docker.com/desktop/faqs/linuxfaqs/#context) describes the differences and how to select which Docker context is in use.\n\n* For local development using Docker Desktop, this is enabled by default.\n* For systems using Docker Engine, install the QEMU binaries and register them with using the docker image from [github.com/tonistiigi/binfmt](https://github.com/tonistiigi/binfmt):\n\n ```shell\n docker run --privileged --rm tonistiigi/binfmt --install all\n ```\n* In a GitHub Actions workflow, the [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) can be used instead by adding this step to your workflow file. Example workflow usage:\n\n ```yaml\n name: Pulumi\n on:\n push:\n branches:\n - master\n jobs:\n up:\n name: Preview\n runs-on: ubuntu-latest\n steps:\n # This is the step added:\n - name: Set up QEMU\n uses: docker/setup-qemu-action@v2\n # The ordinary pulumi/actions workflow:\n - uses: actions/checkout@v3\n - uses: pulumi/actions@v4\n with:\n command: preview\n stack-name: org-name/stack-name\n env:\n PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}\n ```\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### A Docker image build\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst demoImage = new docker.Image(\"demo-image\", {\n build: {\n context: \".\",\n dockerfile: \"Dockerfile\",\n platform: \"linux/amd64\",\n },\n imageName: \"username/image:tag1\",\n skipPush: true,\n});\nexport const imageName = demoImage.imageName;\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\ndemo_image = docker.Image(\"demo-image\",\n build=docker.DockerBuildArgs(\n context=\".\",\n dockerfile=\"Dockerfile\",\n platform=\"linux/amd64\",\n ),\n image_name=\"username/image:tag1\",\n skip_push=True)\npulumi.export(\"imageName\", demo_image.image_name)\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 demoImage = new Docker.Image(\"demo-image\", new()\n {\n Build = new Docker.Inputs.DockerBuildArgs\n {\n Context = \".\",\n Dockerfile = \"Dockerfile\",\n Platform = \"linux/amd64\",\n },\n ImageName = \"username/image:tag1\",\n SkipPush = true,\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"imageName\"] = demoImage.ImageName,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoImage, err := docker.NewImage(ctx, \"demo-image\", \u0026docker.ImageArgs{\n\t\t\tBuild: \u0026docker.DockerBuildArgs{\n\t\t\t\tContext: pulumi.String(\".\"),\n\t\t\t\tDockerfile: pulumi.String(\"Dockerfile\"),\n\t\t\t\tPlatform: pulumi.String(\"linux/amd64\"),\n\t\t\t},\n\t\t\tImageName: pulumi.String(\"username/image:tag1\"),\n\t\t\tSkipPush: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"imageName\", demoImage.ImageName)\n\t\treturn nil\n\t})\n}\n```\n```yaml\nconfig: {}\ndescription: A Docker image build\nname: image-yaml\noutputs:\n imageName: ${demo-image.imageName}\nresources:\n demo-image:\n options:\n version: v4.4.0\n properties:\n build:\n context: .\n dockerfile: Dockerfile\n platform: linux/amd64\n imageName: username/image:tag1\n skipPush: true\n type: docker:Image\nruntime: yaml\nvariables: {}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.Image;\nimport com.pulumi.docker.ImageArgs;\nimport com.pulumi.docker.inputs.DockerBuildArgs;\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 demoImage = new Image(\"demoImage\", ImageArgs.builder() \n .build(DockerBuildArgs.builder()\n .context(\".\")\n .dockerfile(\"Dockerfile\")\n .platform(\"linux/amd64\")\n .build())\n .imageName(\"username/image:tag1\")\n .skipPush(true)\n .build());\n\n ctx.export(\"imageName\", demoImage.imageName());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### A Docker image build and push\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst demoPushImage = new docker.Image(\"demo-push-image\", {\n build: {\n context: \".\",\n dockerfile: \"Dockerfile\",\n },\n imageName: \"docker.io/username/push-image:tag1\",\n});\nexport const imageName = demoPushImage.imageName;\nexport const repoDigest = demoPushImage.repoDigest;\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\ndemo_push_image = docker.Image(\"demo-push-image\",\n build=docker.DockerBuildArgs(\n context=\".\",\n dockerfile=\"Dockerfile\",\n ),\n image_name=\"docker.io/username/push-image:tag1\")\npulumi.export(\"imageName\", demo_push_image.image_name)\npulumi.export(\"repoDigest\", demo_push_image.repo_digest)\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 demoPushImage = new Docker.Image(\"demo-push-image\", new()\n {\n Build = new Docker.Inputs.DockerBuildArgs\n {\n Context = \".\",\n Dockerfile = \"Dockerfile\",\n },\n ImageName = \"docker.io/username/push-image:tag1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"imageName\"] = demoPushImage.ImageName,\n [\"repoDigest\"] = demoPushImage.RepoDigest,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoPushImage, err := docker.NewImage(ctx, \"demo-push-image\", \u0026docker.ImageArgs{\n\t\t\tBuild: \u0026docker.DockerBuildArgs{\n\t\t\t\tContext: pulumi.String(\".\"),\n\t\t\t\tDockerfile: pulumi.String(\"Dockerfile\"),\n\t\t\t},\n\t\t\tImageName: pulumi.String(\"docker.io/username/push-image:tag1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"imageName\", demoPushImage.ImageName)\n\t\tctx.Export(\"repoDigest\", demoPushImage.RepoDigest)\n\t\treturn nil\n\t})\n}\n```\n```yaml\nconfig: {}\ndescription: A Docker image build and push\nname: image-push-yaml\noutputs:\n imageName: ${demo-push-image.imageName}\n repoDigest: ${demo-push-image.repoDigest}\nresources:\n demo-push-image:\n options:\n version: v4.4.0\n properties:\n build:\n context: .\n dockerfile: Dockerfile\n imageName: docker.io/username/push-image:tag1\n type: docker:Image\nruntime: yaml\nvariables: {}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.Image;\nimport com.pulumi.docker.ImageArgs;\nimport com.pulumi.docker.inputs.DockerBuildArgs;\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 demoPushImage = new Image(\"demoPushImage\", ImageArgs.builder() \n .build(DockerBuildArgs.builder()\n .context(\".\")\n .dockerfile(\"Dockerfile\")\n .build())\n .imageName(\"docker.io/username/push-image:tag1\")\n .build());\n\n ctx.export(\"imageName\", demoPushImage.imageName());\n ctx.export(\"repoDigest\", demoPushImage.repoDigest());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Docker image build using caching with AWS Elastic Container Registry\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\", {name: \"docker-repository\"});\nconst authToken = aws.ecr.getAuthorizationTokenOutput({\n registryId: ecrRepository.registryId,\n});\nconst myAppImage = new docker.Image(\"my-app-image\", {\n build: {\n args: {\n BUILDKIT_INLINE_CACHE: \"1\",\n },\n cacheFrom: {\n images: [pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`],\n },\n context: \"app/\",\n dockerfile: \"Dockerfile\",\n },\n imageName: pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`,\n registry: {\n password: pulumi.secret(authToken.apply(authToken =\u003e authToken.password)),\n server: ecrRepository.repositoryUrl,\n },\n});\nexport const imageName = myAppImage.imageName;\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_docker as docker\n\necr_repository = aws.ecr.Repository(\"ecr-repository\", name=\"docker-repository\")\nauth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id)\nmy_app_image = docker.Image(\"my-app-image\",\n build=docker.DockerBuildArgs(\n args={\n \"BUILDKIT_INLINE_CACHE\": \"1\",\n },\n cache_from=docker.CacheFromArgs(\n images=[ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:latest\")],\n ),\n context=\"app/\",\n dockerfile=\"Dockerfile\",\n ),\n image_name=ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:latest\"),\n registry=docker.RegistryArgs(\n password=pulumi.Output.secret(auth_token.password),\n server=ecr_repository.repository_url,\n ))\npulumi.export(\"imageName\", my_app_image.image_name)\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\", new()\n {\n Name = \"docker-repository\",\n });\n\n var authToken = Aws.Ecr.GetAuthorizationToken.Invoke(new()\n {\n RegistryId = ecrRepository.RegistryId,\n });\n\n var myAppImage = new Docker.Image(\"my-app-image\", new()\n {\n Build = new Docker.Inputs.DockerBuildArgs\n {\n Args = \n {\n { \"BUILDKIT_INLINE_CACHE\", \"1\" },\n },\n CacheFrom = new Docker.Inputs.CacheFromArgs\n {\n Images = new[]\n {\n ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:latest\"),\n },\n },\n Context = \"app/\",\n Dockerfile = \"Dockerfile\",\n },\n ImageName = ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:latest\"),\n Registry = new Docker.Inputs.RegistryArgs\n {\n Password = Output.CreateSecret(authToken.Apply(getAuthorizationTokenResult =\u003e getAuthorizationTokenResult.Password)),\n Server = ecrRepository.RepositoryUrl,\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"imageName\"] = myAppImage.ImageName,\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\"\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\", \u0026ecr.RepositoryArgs{\n\t\t\tName: pulumi.String(\"docker-repository\"),\n\t\t})\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\tmyAppImage, err := docker.NewImage(ctx, \"my-app-image\", \u0026docker.ImageArgs{\n\t\t\tBuild: \u0026docker.DockerBuildArgs{\n\t\t\t\tArgs: pulumi.StringMap{\n\t\t\t\t\t\"BUILDKIT_INLINE_CACHE\": pulumi.String(\"1\"),\n\t\t\t\t},\n\t\t\t\tCacheFrom: \u0026docker.CacheFromArgs{\n\t\t\t\t\tImages: pulumi.StringArray{\n\t\t\t\t\t\tecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"%v:latest\", 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\tContext: pulumi.String(\"app/\"),\n\t\t\t\tDockerfile: pulumi.String(\"Dockerfile\"),\n\t\t\t},\n\t\t\tImageName: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"%v:latest\", repositoryUrl), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tRegistry: \u0026docker.RegistryArgs{\n\t\t\t\tPassword: pulumi.ToSecret(authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {\n\t\t\t\t\treturn \u0026authToken.Password, nil\n\t\t\t\t}).(pulumi.StringPtrOutput)).(pulumi.StringOutput),\n\t\t\t\tServer: ecrRepository.RepositoryUrl,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"imageName\", myAppImage.ImageName)\n\t\treturn nil\n\t})\n}\n```\n```yaml\nconfig: {}\ndescription: Docker image build using caching with AWS Elastic Container Registry\nname: image-caching-yaml\noutputs:\n imageName: ${my-app-image.imageName}\nresources:\n ecr-repository:\n properties:\n name: docker-repository\n type: aws:ecr:Repository\n my-app-image:\n options:\n version: v4.1.2\n properties:\n build:\n args:\n BUILDKIT_INLINE_CACHE: \"1\"\n cacheFrom:\n images:\n - ${ecr-repository.repositoryUrl}:latest\n context: app/\n dockerfile: Dockerfile\n imageName: ${ecr-repository.repositoryUrl}:latest\n registry:\n password:\n fn::secret: ${authToken.password}\n server: ${ecr-repository.repositoryUrl}\n type: docker:Image\nruntime: yaml\nvariables:\n authToken:\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.RepositoryArgs;\nimport com.pulumi.aws.ecr.EcrFunctions;\nimport com.pulumi.aws.ecr.inputs.GetAuthorizationTokenArgs;\nimport com.pulumi.docker.Image;\nimport com.pulumi.docker.ImageArgs;\nimport com.pulumi.docker.inputs.DockerBuildArgs;\nimport com.pulumi.docker.inputs.CacheFromArgs;\nimport com.pulumi.docker.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\", RepositoryArgs.builder() \n .name(\"docker-repository\")\n .build());\n\n final var authToken = EcrFunctions.getAuthorizationToken(GetAuthorizationTokenArgs.builder()\n .registryId(ecrRepository.registryId())\n .build());\n\n var myAppImage = new Image(\"myAppImage\", ImageArgs.builder() \n .build(DockerBuildArgs.builder()\n .args(Map.of(\"BUILDKIT_INLINE_CACHE\", \"1\"))\n .cacheFrom(CacheFromArgs.builder()\n .images(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:latest\", repositoryUrl)))\n .build())\n .context(\"app/\")\n .dockerfile(\"Dockerfile\")\n .build())\n .imageName(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:latest\", repositoryUrl)))\n .registry(RegistryArgs.builder()\n .password(Output.ofSecret(authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult).applyValue(authToken -\u003e authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult.password()))))\n .server(ecrRepository.repositoryUrl())\n .build())\n .build());\n\n ctx.export(\"imageName\", myAppImage.imageName());\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}", "properties": { "baseImageName": { "type": "string", @@ -3715,7 +3715,7 @@ } }, "docker:index/remoteImage:RemoteImage": { - "description": "\u003c!-- Bug: Type and Name are switched --\u003e\nPulls a Docker image to a given Docker host from a Docker Registry.\n This resource will *not* pull new layers of the image automatically unless used in conjunction with docker.RegistryImage data source to update the `pull_triggers` field.\n\n## Example Usage\n\n### Basic\n\nFinds and downloads the latest `ubuntu:precise` image but does not check\nfor further updates of the image\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst ubuntu = new docker.RemoteImage(\"ubuntu\", {name: \"ubuntu:precise\"});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nubuntu = docker.RemoteImage(\"ubuntu\", name=\"ubuntu:precise\")\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 ubuntu = new Docker.RemoteImage(\"ubuntu\", new()\n {\n Name = \"ubuntu:precise\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\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 := docker.NewRemoteImage(ctx, \"ubuntu\", \u0026docker.RemoteImageArgs{\n\t\t\tName: pulumi.String(\"ubuntu:precise\"),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.RemoteImage;\nimport com.pulumi.docker.RemoteImageArgs;\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 ubuntu = new RemoteImage(\"ubuntu\", RemoteImageArgs.builder() \n .name(\"ubuntu:precise\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntu:\n type: docker:RemoteImage\n properties:\n name: ubuntu:precise\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Dynamic updates\n\nTo be able to update an image dynamically when the `sha256` sum changes,\nyou need to use it in combination with `docker.RegistryImage` as follows:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst ubuntuRegistryImage = docker.getRegistryImage({\n name: \"ubuntu:precise\",\n});\nconst ubuntuRemoteImage = new docker.RemoteImage(\"ubuntuRemoteImage\", {\n name: ubuntuRegistryImage.then(ubuntuRegistryImage =\u003e ubuntuRegistryImage.name),\n pullTriggers: [ubuntuRegistryImage.then(ubuntuRegistryImage =\u003e ubuntuRegistryImage.sha256Digest)],\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nubuntu_registry_image = docker.get_registry_image(name=\"ubuntu:precise\")\nubuntu_remote_image = docker.RemoteImage(\"ubuntuRemoteImage\",\n name=ubuntu_registry_image.name,\n pull_triggers=[ubuntu_registry_image.sha256_digest])\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 ubuntuRegistryImage = Docker.GetRegistryImage.Invoke(new()\n {\n Name = \"ubuntu:precise\",\n });\n\n var ubuntuRemoteImage = new Docker.RemoteImage(\"ubuntuRemoteImage\", new()\n {\n Name = ubuntuRegistryImage.Apply(getRegistryImageResult =\u003e getRegistryImageResult.Name),\n PullTriggers = new[]\n {\n ubuntuRegistryImage.Apply(getRegistryImageResult =\u003e getRegistryImageResult.Sha256Digest),\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tubuntuRegistryImage, err := docker.LookupRegistryImage(ctx, \u0026docker.LookupRegistryImageArgs{\n\t\t\tName: \"ubuntu:precise\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = docker.NewRemoteImage(ctx, \"ubuntuRemoteImage\", \u0026docker.RemoteImageArgs{\n\t\t\tName: *pulumi.String(ubuntuRegistryImage.Name),\n\t\t\tPullTriggers: pulumi.StringArray{\n\t\t\t\t*pulumi.String(ubuntuRegistryImage.Sha256Digest),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.DockerFunctions;\nimport com.pulumi.docker.inputs.GetRegistryImageArgs;\nimport com.pulumi.docker.RemoteImage;\nimport com.pulumi.docker.RemoteImageArgs;\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 final var ubuntuRegistryImage = DockerFunctions.getRegistryImage(GetRegistryImageArgs.builder()\n .name(\"ubuntu:precise\")\n .build());\n\n var ubuntuRemoteImage = new RemoteImage(\"ubuntuRemoteImage\", RemoteImageArgs.builder() \n .name(ubuntuRegistryImage.applyValue(getRegistryImageResult -\u003e getRegistryImageResult.name()))\n .pullTriggers(ubuntuRegistryImage.applyValue(getRegistryImageResult -\u003e getRegistryImageResult.sha256Digest()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuRemoteImage:\n type: docker:RemoteImage\n properties:\n name: ${ubuntuRegistryImage.name}\n pullTriggers:\n - ${ubuntuRegistryImage.sha256Digest}\nvariables:\n ubuntuRegistryImage:\n fn::invoke:\n Function: docker:getRegistryImage\n Arguments:\n name: ubuntu:precise\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Build\n\nYou can also use the resource to build an image.\nIn this case the image \"zoo\" and \"zoo:develop\" are built.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst zoo = new docker.RemoteImage(\"zoo\", {\n name: \"zoo\",\n build: {\n context: \".\",\n tags: [\"zoo:develop\"],\n buildArg: {\n foo: \"zoo\",\n },\n label: {\n author: \"zoo\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nzoo = docker.RemoteImage(\"zoo\",\n name=\"zoo\",\n build=docker.RemoteImageBuildArgs(\n context=\".\",\n tags=[\"zoo:develop\"],\n build_arg={\n \"foo\": \"zoo\",\n },\n label={\n \"author\": \"zoo\",\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 zoo = new Docker.RemoteImage(\"zoo\", new()\n {\n Name = \"zoo\",\n Build = new Docker.Inputs.RemoteImageBuildArgs\n {\n Context = \".\",\n Tags = new[]\n {\n \"zoo:develop\",\n },\n BuildArg = \n {\n { \"foo\", \"zoo\" },\n },\n Label = \n {\n { \"author\", \"zoo\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\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 := docker.NewRemoteImage(ctx, \"zoo\", \u0026docker.RemoteImageArgs{\n\t\t\tName: pulumi.String(\"zoo\"),\n\t\t\tBuild: \u0026docker.RemoteImageBuildArgs{\n\t\t\t\tContext: pulumi.String(\".\"),\n\t\t\t\tTags: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"zoo:develop\"),\n\t\t\t\t},\n\t\t\t\tBuildArg: pulumi.StringMap{\n\t\t\t\t\t\"foo\": pulumi.String(\"zoo\"),\n\t\t\t\t},\n\t\t\t\tLabel: pulumi.StringMap{\n\t\t\t\t\t\"author\": pulumi.String(\"zoo\"),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.RemoteImage;\nimport com.pulumi.docker.RemoteImageArgs;\nimport com.pulumi.docker.inputs.RemoteImageBuildArgs;\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 zoo = new RemoteImage(\"zoo\", RemoteImageArgs.builder() \n .name(\"zoo\")\n .build(RemoteImageBuildArgs.builder()\n .context(\".\")\n .tags(\"zoo:develop\")\n .buildArg(Map.of(\"foo\", \"zoo\"))\n .label(Map.of(\"author\", \"zoo\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n zoo:\n type: docker:RemoteImage\n properties:\n name: zoo\n build:\n context: .\n tags:\n - zoo:develop\n buildArg:\n foo: zoo\n label:\n author: zoo\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nYou can use the `triggers` argument to specify when the image should be rebuild. This is for example helpful when you want to rebuild the docker image whenever the source code changes.\n\n", + "description": "\u003c!-- Bug: Type and Name are switched --\u003e\nPulls a Docker image to a given Docker host from a Docker Registry.\n This resource will *not* pull new layers of the image automatically unless used in conjunction with docker.RegistryImage data source to update the `pull_triggers` field.\n\n## Example Usage\n\n### Basic\n\nFinds and downloads the latest `ubuntu:precise` image but does not check\nfor further updates of the image\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst ubuntu = new docker.RemoteImage(\"ubuntu\", {name: \"ubuntu:precise\"});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nubuntu = docker.RemoteImage(\"ubuntu\", name=\"ubuntu:precise\")\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 ubuntu = new Docker.RemoteImage(\"ubuntu\", new()\n {\n Name = \"ubuntu:precise\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\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 := docker.NewRemoteImage(ctx, \"ubuntu\", \u0026docker.RemoteImageArgs{\n\t\t\tName: pulumi.String(\"ubuntu:precise\"),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.RemoteImage;\nimport com.pulumi.docker.RemoteImageArgs;\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 ubuntu = new RemoteImage(\"ubuntu\", RemoteImageArgs.builder() \n .name(\"ubuntu:precise\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntu:\n type: docker:RemoteImage\n properties:\n name: ubuntu:precise\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Dynamic updates\n\nTo be able to update an image dynamically when the `sha256` sum changes,\nyou need to use it in combination with `docker.RegistryImage` as follows:\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst ubuntuRegistryImage = docker.getRegistryImage({\n name: \"ubuntu:precise\",\n});\nconst ubuntuRemoteImage = new docker.RemoteImage(\"ubuntuRemoteImage\", {\n name: ubuntuRegistryImage.then(ubuntuRegistryImage =\u003e ubuntuRegistryImage.name),\n pullTriggers: [ubuntuRegistryImage.then(ubuntuRegistryImage =\u003e ubuntuRegistryImage.sha256Digest)],\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nubuntu_registry_image = docker.get_registry_image(name=\"ubuntu:precise\")\nubuntu_remote_image = docker.RemoteImage(\"ubuntuRemoteImage\",\n name=ubuntu_registry_image.name,\n pull_triggers=[ubuntu_registry_image.sha256_digest])\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 ubuntuRegistryImage = Docker.GetRegistryImage.Invoke(new()\n {\n Name = \"ubuntu:precise\",\n });\n\n var ubuntuRemoteImage = new Docker.RemoteImage(\"ubuntuRemoteImage\", new()\n {\n Name = ubuntuRegistryImage.Apply(getRegistryImageResult =\u003e getRegistryImageResult.Name),\n PullTriggers = new[]\n {\n ubuntuRegistryImage.Apply(getRegistryImageResult =\u003e getRegistryImageResult.Sha256Digest),\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tubuntuRegistryImage, err := docker.LookupRegistryImage(ctx, \u0026docker.LookupRegistryImageArgs{\n\t\t\tName: \"ubuntu:precise\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = docker.NewRemoteImage(ctx, \"ubuntuRemoteImage\", \u0026docker.RemoteImageArgs{\n\t\t\tName: pulumi.String(ubuntuRegistryImage.Name),\n\t\t\tPullTriggers: pulumi.StringArray{\n\t\t\t\tpulumi.String(ubuntuRegistryImage.Sha256Digest),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.DockerFunctions;\nimport com.pulumi.docker.inputs.GetRegistryImageArgs;\nimport com.pulumi.docker.RemoteImage;\nimport com.pulumi.docker.RemoteImageArgs;\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 final var ubuntuRegistryImage = DockerFunctions.getRegistryImage(GetRegistryImageArgs.builder()\n .name(\"ubuntu:precise\")\n .build());\n\n var ubuntuRemoteImage = new RemoteImage(\"ubuntuRemoteImage\", RemoteImageArgs.builder() \n .name(ubuntuRegistryImage.applyValue(getRegistryImageResult -\u003e getRegistryImageResult.name()))\n .pullTriggers(ubuntuRegistryImage.applyValue(getRegistryImageResult -\u003e getRegistryImageResult.sha256Digest()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuRemoteImage:\n type: docker:RemoteImage\n properties:\n name: ${ubuntuRegistryImage.name}\n pullTriggers:\n - ${ubuntuRegistryImage.sha256Digest}\nvariables:\n ubuntuRegistryImage:\n fn::invoke:\n Function: docker:getRegistryImage\n Arguments:\n name: ubuntu:precise\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Build\n\nYou can also use the resource to build an image.\nIn this case the image \"zoo\" and \"zoo:develop\" are built.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst zoo = new docker.RemoteImage(\"zoo\", {\n name: \"zoo\",\n build: {\n context: \".\",\n tags: [\"zoo:develop\"],\n buildArg: {\n foo: \"zoo\",\n },\n label: {\n author: \"zoo\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nzoo = docker.RemoteImage(\"zoo\",\n name=\"zoo\",\n build=docker.RemoteImageBuildArgs(\n context=\".\",\n tags=[\"zoo:develop\"],\n build_arg={\n \"foo\": \"zoo\",\n },\n label={\n \"author\": \"zoo\",\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 zoo = new Docker.RemoteImage(\"zoo\", new()\n {\n Name = \"zoo\",\n Build = new Docker.Inputs.RemoteImageBuildArgs\n {\n Context = \".\",\n Tags = new[]\n {\n \"zoo:develop\",\n },\n BuildArg = \n {\n { \"foo\", \"zoo\" },\n },\n Label = \n {\n { \"author\", \"zoo\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\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 := docker.NewRemoteImage(ctx, \"zoo\", \u0026docker.RemoteImageArgs{\n\t\t\tName: pulumi.String(\"zoo\"),\n\t\t\tBuild: \u0026docker.RemoteImageBuildArgs{\n\t\t\t\tContext: pulumi.String(\".\"),\n\t\t\t\tTags: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"zoo:develop\"),\n\t\t\t\t},\n\t\t\t\tBuildArg: pulumi.StringMap{\n\t\t\t\t\t\"foo\": pulumi.String(\"zoo\"),\n\t\t\t\t},\n\t\t\t\tLabel: pulumi.StringMap{\n\t\t\t\t\t\"author\": pulumi.String(\"zoo\"),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.RemoteImage;\nimport com.pulumi.docker.RemoteImageArgs;\nimport com.pulumi.docker.inputs.RemoteImageBuildArgs;\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 zoo = new RemoteImage(\"zoo\", RemoteImageArgs.builder() \n .name(\"zoo\")\n .build(RemoteImageBuildArgs.builder()\n .context(\".\")\n .tags(\"zoo:develop\")\n .buildArg(Map.of(\"foo\", \"zoo\"))\n .label(Map.of(\"author\", \"zoo\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n zoo:\n type: docker:RemoteImage\n properties:\n name: zoo\n build:\n context: .\n tags:\n - zoo:develop\n buildArg:\n foo: zoo\n label:\n author: zoo\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nYou can use the `triggers` argument to specify when the image should be rebuild. This is for example helpful when you want to rebuild the docker image whenever the source code changes.\n\n", "properties": { "build": { "$ref": "#/types/docker:index/RemoteImageBuild:RemoteImageBuild", @@ -4522,7 +4522,7 @@ } }, "docker:index/getRegistryImage:getRegistryImage": { - "description": "Reads the image metadata from a Docker Registry. Used in conjunction with the docker.RemoteImage resource to keep an image up to date on the latest available version of the tag.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst ubuntuRegistryImage = docker.getRegistryImage({\n name: \"ubuntu:precise\",\n});\nconst ubuntuRemoteImage = new docker.RemoteImage(\"ubuntuRemoteImage\", {\n name: ubuntuRegistryImage.then(ubuntuRegistryImage =\u003e ubuntuRegistryImage.name),\n pullTriggers: [ubuntuRegistryImage.then(ubuntuRegistryImage =\u003e ubuntuRegistryImage.sha256Digest)],\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nubuntu_registry_image = docker.get_registry_image(name=\"ubuntu:precise\")\nubuntu_remote_image = docker.RemoteImage(\"ubuntuRemoteImage\",\n name=ubuntu_registry_image.name,\n pull_triggers=[ubuntu_registry_image.sha256_digest])\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 ubuntuRegistryImage = Docker.GetRegistryImage.Invoke(new()\n {\n Name = \"ubuntu:precise\",\n });\n\n var ubuntuRemoteImage = new Docker.RemoteImage(\"ubuntuRemoteImage\", new()\n {\n Name = ubuntuRegistryImage.Apply(getRegistryImageResult =\u003e getRegistryImageResult.Name),\n PullTriggers = new[]\n {\n ubuntuRegistryImage.Apply(getRegistryImageResult =\u003e getRegistryImageResult.Sha256Digest),\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tubuntuRegistryImage, err := docker.LookupRegistryImage(ctx, \u0026docker.LookupRegistryImageArgs{\n\t\t\tName: \"ubuntu:precise\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = docker.NewRemoteImage(ctx, \"ubuntuRemoteImage\", \u0026docker.RemoteImageArgs{\n\t\t\tName: *pulumi.String(ubuntuRegistryImage.Name),\n\t\t\tPullTriggers: pulumi.StringArray{\n\t\t\t\t*pulumi.String(ubuntuRegistryImage.Sha256Digest),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.DockerFunctions;\nimport com.pulumi.docker.inputs.GetRegistryImageArgs;\nimport com.pulumi.docker.RemoteImage;\nimport com.pulumi.docker.RemoteImageArgs;\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 final var ubuntuRegistryImage = DockerFunctions.getRegistryImage(GetRegistryImageArgs.builder()\n .name(\"ubuntu:precise\")\n .build());\n\n var ubuntuRemoteImage = new RemoteImage(\"ubuntuRemoteImage\", RemoteImageArgs.builder() \n .name(ubuntuRegistryImage.applyValue(getRegistryImageResult -\u003e getRegistryImageResult.name()))\n .pullTriggers(ubuntuRegistryImage.applyValue(getRegistryImageResult -\u003e getRegistryImageResult.sha256Digest()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuRemoteImage:\n type: docker:RemoteImage\n properties:\n name: ${ubuntuRegistryImage.name}\n pullTriggers:\n - ${ubuntuRegistryImage.sha256Digest}\nvariables:\n ubuntuRegistryImage:\n fn::invoke:\n Function: docker:getRegistryImage\n Arguments:\n name: ubuntu:precise\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "description": "Reads the image metadata from a Docker Registry. Used in conjunction with the docker.RemoteImage resource to keep an image up to date on the latest available version of the tag.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst ubuntuRegistryImage = docker.getRegistryImage({\n name: \"ubuntu:precise\",\n});\nconst ubuntuRemoteImage = new docker.RemoteImage(\"ubuntuRemoteImage\", {\n name: ubuntuRegistryImage.then(ubuntuRegistryImage =\u003e ubuntuRegistryImage.name),\n pullTriggers: [ubuntuRegistryImage.then(ubuntuRegistryImage =\u003e ubuntuRegistryImage.sha256Digest)],\n});\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\nubuntu_registry_image = docker.get_registry_image(name=\"ubuntu:precise\")\nubuntu_remote_image = docker.RemoteImage(\"ubuntuRemoteImage\",\n name=ubuntu_registry_image.name,\n pull_triggers=[ubuntu_registry_image.sha256_digest])\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 ubuntuRegistryImage = Docker.GetRegistryImage.Invoke(new()\n {\n Name = \"ubuntu:precise\",\n });\n\n var ubuntuRemoteImage = new Docker.RemoteImage(\"ubuntuRemoteImage\", new()\n {\n Name = ubuntuRegistryImage.Apply(getRegistryImageResult =\u003e getRegistryImageResult.Name),\n PullTriggers = new[]\n {\n ubuntuRegistryImage.Apply(getRegistryImageResult =\u003e getRegistryImageResult.Sha256Digest),\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tubuntuRegistryImage, err := docker.LookupRegistryImage(ctx, \u0026docker.LookupRegistryImageArgs{\n\t\t\tName: \"ubuntu:precise\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = docker.NewRemoteImage(ctx, \"ubuntuRemoteImage\", \u0026docker.RemoteImageArgs{\n\t\t\tName: pulumi.String(ubuntuRegistryImage.Name),\n\t\t\tPullTriggers: pulumi.StringArray{\n\t\t\t\tpulumi.String(ubuntuRegistryImage.Sha256Digest),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.DockerFunctions;\nimport com.pulumi.docker.inputs.GetRegistryImageArgs;\nimport com.pulumi.docker.RemoteImage;\nimport com.pulumi.docker.RemoteImageArgs;\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 final var ubuntuRegistryImage = DockerFunctions.getRegistryImage(GetRegistryImageArgs.builder()\n .name(\"ubuntu:precise\")\n .build());\n\n var ubuntuRemoteImage = new RemoteImage(\"ubuntuRemoteImage\", RemoteImageArgs.builder() \n .name(ubuntuRegistryImage.applyValue(getRegistryImageResult -\u003e getRegistryImageResult.name()))\n .pullTriggers(ubuntuRegistryImage.applyValue(getRegistryImageResult -\u003e getRegistryImageResult.sha256Digest()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuRemoteImage:\n type: docker:RemoteImage\n properties:\n name: ${ubuntuRegistryImage.name}\n pullTriggers:\n - ${ubuntuRegistryImage.sha256Digest}\nvariables:\n ubuntuRegistryImage:\n fn::invoke:\n Function: docker:getRegistryImage\n Arguments:\n name: ubuntu:precise\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", "inputs": { "description": "A collection of arguments for invoking getRegistryImage.\n", "properties": { diff --git a/provider/go.mod b/provider/go.mod index 70e73a0c..3c8c7578 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -13,9 +13,9 @@ require ( github.com/moby/patternmatcher v0.6.0 github.com/opencontainers/go-digest v1.0.0 github.com/pkg/errors v0.9.1 - github.com/pulumi/pulumi-terraform-bridge/v3 v3.77.0 - github.com/pulumi/pulumi/pkg/v3 v3.108.1 - github.com/pulumi/pulumi/sdk/v3 v3.108.1 + github.com/pulumi/pulumi-terraform-bridge/v3 v3.78.0 + github.com/pulumi/pulumi/pkg/v3 v3.111.1 + github.com/pulumi/pulumi/sdk/v3 v3.111.1 github.com/spf13/afero v1.9.5 github.com/stretchr/testify v1.8.4 github.com/terraform-providers/terraform-provider-docker v0.0.0 @@ -228,7 +228,7 @@ require ( github.com/pulumi/esc v0.6.2 // indirect github.com/pulumi/pulumi-java/pkg v0.9.9 // indirect github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.8 // indirect - github.com/pulumi/pulumi-yaml v1.5.0 // indirect + github.com/pulumi/pulumi-yaml v1.6.0 // indirect github.com/pulumi/schema-tools v0.1.2 // indirect github.com/pulumi/terraform-diff-reader v0.0.2 // indirect github.com/rivo/uniseg v0.4.4 // indirect diff --git a/provider/go.sum b/provider/go.sum index d2263651..4b5efedc 100644 --- a/provider/go.sum +++ b/provider/go.sum @@ -2894,16 +2894,16 @@ github.com/pulumi/providertest v0.0.11 h1:mg8MQ7Cq7+9XlHIkBD+aCqQO4mwAJEISngZgVd github.com/pulumi/providertest v0.0.11/go.mod h1:HsxjVsytcMIuNj19w1lT2W0QXY0oReXl1+h6eD2JXP8= github.com/pulumi/pulumi-java/pkg v0.9.9 h1:F3xJUtMFDVrTGCxb7Rh2Q8s6tj7gMfM5pcoUthz7vFY= github.com/pulumi/pulumi-java/pkg v0.9.9/go.mod h1:LVF1zeg3UkToHWxb67V+zEIxQc3EdMnlot5NWSt+FpA= -github.com/pulumi/pulumi-terraform-bridge/v3 v3.77.0 h1:BZhD7yNZz7O5MWeM4WofY6XBLjtiA3qH2UJJTg8+Nts= -github.com/pulumi/pulumi-terraform-bridge/v3 v3.77.0/go.mod h1:OCfjEGPU2fbBlda8UZhN/N3FljW6R08SK6lXPXzahwA= +github.com/pulumi/pulumi-terraform-bridge/v3 v3.78.0 h1:zl1nXrx02X7u/w5kNjIVGVUzccEILcMWsIpg4QQanCI= +github.com/pulumi/pulumi-terraform-bridge/v3 v3.78.0/go.mod h1:WpkN/lgtBrDYGrMyG9cmncy5pN95lnowbmjILHWcm0M= github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.8 h1:mav2tSitA9BPJPLLahKgepHyYsMzwaTm4cvp0dcTMYw= github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.8/go.mod h1:qUYk2c9i/yqMGNj9/bQyXpS39BxNDSXYjVN1njnq0zY= -github.com/pulumi/pulumi-yaml v1.5.0 h1:HfXu+WSFNpycref9CK935cViYJzXwSgHGWM/RepyrW0= -github.com/pulumi/pulumi-yaml v1.5.0/go.mod h1:AvKSmEQv2EkPbpvAQroR1eP1LkJGC8z5NDM34rVWOtg= -github.com/pulumi/pulumi/pkg/v3 v3.108.1 h1:K1UK40v5IpEPIaJ2un3WNOTBbLQaKR26HbLLh5EmMHY= -github.com/pulumi/pulumi/pkg/v3 v3.108.1/go.mod h1:48uCfxkPXUq/XTBqei9VuR0CRWObnSVlqcLkD6DhII8= -github.com/pulumi/pulumi/sdk/v3 v3.108.1 h1:5idjc3JmzToYVizRPbFyjJ5UU4AbExd04pcSP9AhPEc= -github.com/pulumi/pulumi/sdk/v3 v3.108.1/go.mod h1:5A6GHUwAJlRY1SSLZh84aDIbsBShcrfcmHzI50ecSBg= +github.com/pulumi/pulumi-yaml v1.6.0 h1:mb/QkebWXTa1fR+P3ZkCCHGXOYC6iTN8X8By9eNz8xM= +github.com/pulumi/pulumi-yaml v1.6.0/go.mod h1:RyEPo4MhL363sbAiFMVKRsQmXpQPDCY1S8pGv3E6Ij0= +github.com/pulumi/pulumi/pkg/v3 v3.111.1 h1:SrVgQE96T7YlZx/AZoFSlXYwur7ZmQUHyjbPI8sH96Q= +github.com/pulumi/pulumi/pkg/v3 v3.111.1/go.mod h1:ZWsq8Y0EMHZ5E2ju92jC+POz97TEXs3BbQ6r2o0U4SA= +github.com/pulumi/pulumi/sdk/v3 v3.111.1 h1:uOeG/b6YxBuL59xHtmFPspMa8BB6ovjHelL7sVCGJZw= +github.com/pulumi/pulumi/sdk/v3 v3.111.1/go.mod h1:5A6GHUwAJlRY1SSLZh84aDIbsBShcrfcmHzI50ecSBg= github.com/pulumi/schema-tools v0.1.2 h1:Fd9xvUjgck4NA+7/jSk7InqCUT4Kj940+EcnbQKpfZo= github.com/pulumi/schema-tools v0.1.2/go.mod h1:62lgj52Tzq11eqWTIaKd+EVyYAu5dEcDJxMhTjvMO/k= github.com/pulumi/terraform-diff-reader v0.0.2 h1:kTE4nEXU3/SYXESvAIem+wyHMI3abqkI3OhJ0G04LLI= diff --git a/provider/pkg/docs-gen/examples/image.md b/provider/pkg/docs-gen/examples/image.md index 9afe70b7..385b6f52 100755 --- a/provider/pkg/docs-gen/examples/image.md +++ b/provider/pkg/docs-gen/examples/image.md @@ -433,7 +433,7 @@ func main() { Registry: &docker.RegistryArgs{ Password: pulumi.ToSecret(authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) { return &authToken.Password, nil - }).(pulumi.StringPtrOutput)).(*pulumi.StringOutput), + }).(pulumi.StringPtrOutput)).(pulumi.StringOutput), Server: ecrRepository.RepositoryUrl, }, }) diff --git a/sdk/go.mod b/sdk/go.mod index 5461cd23..ef31e159 100644 --- a/sdk/go.mod +++ b/sdk/go.mod @@ -4,7 +4,7 @@ go 1.21 require ( github.com/blang/semver v3.5.1+incompatible - github.com/pulumi/pulumi/sdk/v3 v3.108.1 + github.com/pulumi/pulumi/sdk/v3 v3.111.1 ) require ( diff --git a/sdk/go.sum b/sdk/go.sum index 1331dd60..9ecfa940 100644 --- a/sdk/go.sum +++ b/sdk/go.sum @@ -153,8 +153,8 @@ github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435 github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= github.com/pulumi/esc v0.6.2 h1:+z+l8cuwIauLSwXQS0uoI3rqB+YG4SzsZYtHfNoXBvw= github.com/pulumi/esc v0.6.2/go.mod h1:jNnYNjzsOgVTjCp0LL24NsCk8ZJxq4IoLQdCT0X7l8k= -github.com/pulumi/pulumi/sdk/v3 v3.108.1 h1:5idjc3JmzToYVizRPbFyjJ5UU4AbExd04pcSP9AhPEc= -github.com/pulumi/pulumi/sdk/v3 v3.108.1/go.mod h1:5A6GHUwAJlRY1SSLZh84aDIbsBShcrfcmHzI50ecSBg= +github.com/pulumi/pulumi/sdk/v3 v3.111.1 h1:uOeG/b6YxBuL59xHtmFPspMa8BB6ovjHelL7sVCGJZw= +github.com/pulumi/pulumi/sdk/v3 v3.111.1/go.mod h1:5A6GHUwAJlRY1SSLZh84aDIbsBShcrfcmHzI50ecSBg= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= diff --git a/sdk/go/docker/getRegistryImage.go b/sdk/go/docker/getRegistryImage.go index e423d66d..218dd1d6 100644 --- a/sdk/go/docker/getRegistryImage.go +++ b/sdk/go/docker/getRegistryImage.go @@ -35,9 +35,9 @@ import ( // return err // } // _, err = docker.NewRemoteImage(ctx, "ubuntuRemoteImage", &docker.RemoteImageArgs{ -// Name: *pulumi.String(ubuntuRegistryImage.Name), +// Name: pulumi.String(ubuntuRegistryImage.Name), // PullTriggers: pulumi.StringArray{ -// *pulumi.String(ubuntuRegistryImage.Sha256Digest), +// pulumi.String(ubuntuRegistryImage.Sha256Digest), // }, // }) // if err != nil { diff --git a/sdk/go/docker/image.go b/sdk/go/docker/image.go index 32381e44..dda1040c 100644 --- a/sdk/go/docker/image.go +++ b/sdk/go/docker/image.go @@ -146,7 +146,7 @@ import ( // Registry: &docker.RegistryArgs{ // Password: pulumi.ToSecret(authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) { // return &authToken.Password, nil -// }).(pulumi.StringPtrOutput)).(*pulumi.StringOutput), +// }).(pulumi.StringPtrOutput)).(pulumi.StringOutput), // Server: ecrRepository.RepositoryUrl, // }, // }) diff --git a/sdk/go/docker/remoteImage.go b/sdk/go/docker/remoteImage.go index 6ba27903..44950c1e 100644 --- a/sdk/go/docker/remoteImage.go +++ b/sdk/go/docker/remoteImage.go @@ -75,9 +75,9 @@ import ( // return err // } // _, err = docker.NewRemoteImage(ctx, "ubuntuRemoteImage", &docker.RemoteImageArgs{ -// Name: *pulumi.String(ubuntuRegistryImage.Name), +// Name: pulumi.String(ubuntuRegistryImage.Name), // PullTriggers: pulumi.StringArray{ -// *pulumi.String(ubuntuRegistryImage.Sha256Digest), +// pulumi.String(ubuntuRegistryImage.Sha256Digest), // }, // }) // if err != nil {