diff --git a/.ci-mgmt.yaml b/.ci-mgmt.yaml
index cd348941f18..27110db0fd5 100644
--- a/.ci-mgmt.yaml
+++ b/.ci-mgmt.yaml
@@ -86,6 +86,33 @@ extraTests:
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
+ upstream_lint:
+ name: Run upstream provider-lint
+ runs-on: ubuntu-latest
+ timeout-minutes: 60
+ steps:
+ - name: Free Disk Space (Ubuntu)
+ uses: jlumbroso/free-disk-space@main
+ with:
+ swap-storage: false
+ tool-cache: false
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ env.PR_COMMIT_SHA }}
+ submodules: true
+ - name: Install Go
+ uses: actions/setup-go@v5
+ with:
+ go-version: "1.22.x"
+ cache: false
+ - name: Make upstream
+ run: make upstream
+ - name: upstream lint
+ run: |
+ cd upstream
+ make provider-lint
+
test_oidc:
name: test_oidc
needs: build_sdk
diff --git a/.github/actions/download-bin/action.yml b/.github/actions/download-bin/action.yml
new file mode 100644
index 00000000000..68f0db20837
--- /dev/null
+++ b/.github/actions/download-bin/action.yml
@@ -0,0 +1,16 @@
+name: Download binary assets
+description: Downloads the provider and tfgen binaries to `bin/`.
+
+runs:
+ using: "composite"
+ steps:
+ - name: Download provider + tfgen binaries
+ uses: actions/download-artifact@v4
+ with:
+ name: aws-provider.tar.gz
+ path: ${{ github.workspace }}/bin
+ - name: Untar provider binaries
+ shell: bash
+ run: |
+ tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{ github.workspace}}/bin
+ find ${{ github.workspace }} -name "pulumi-*-aws" -print -exec chmod +x {} \;
diff --git a/.github/actions/download-sdk/action.yml b/.github/actions/download-sdk/action.yml
new file mode 100644
index 00000000000..1fd54841b40
--- /dev/null
+++ b/.github/actions/download-sdk/action.yml
@@ -0,0 +1,19 @@
+name: Download SDK asset
+description: Restores the SDK asset for a language.
+
+inputs:
+ language:
+ required: true
+ description: One of nodejs, python, dotnet, go, java
+
+runs:
+ using: "composite"
+ steps:
+ - name: Download ${{ inputs.language }} SDK
+ uses: actions/download-artifact@v4
+ with:
+ name: ${{ inputs.language }}-sdk.tar.gz
+ path: ${{ github.workspace}}/sdk/
+ - name: Uncompress SDK folder
+ shell: bash
+ run: tar -zxf ${{ github.workspace }}/sdk/${{ inputs.language }}.tar.gz -C ${{ github.workspace }}/sdk/${{ inputs.language }}
diff --git a/.github/actions/setup-tools/action.yml b/.github/actions/setup-tools/action.yml
index a3f170c839b..ec2dddec60f 100644
--- a/.github/actions/setup-tools/action.yml
+++ b/.github/actions/setup-tools/action.yml
@@ -26,6 +26,7 @@ runs:
cache-dependency-path: |
provider/*.sum
upstream/*.sum
+ sdk/*.sum
- name: Install pulumictl
if: inputs.tools == 'all' || contains(inputs.tools, 'pulumictl')
diff --git a/.github/actions/upload-bin/action.yml b/.github/actions/upload-bin/action.yml
new file mode 100644
index 00000000000..89b8a7363f3
--- /dev/null
+++ b/.github/actions/upload-bin/action.yml
@@ -0,0 +1,15 @@
+name: Upload bin assets
+description: Uploads the provider and tfgen binaries to `bin/`.
+
+runs:
+ using: "composite"
+ steps:
+ - name: Tar provider binaries
+ shell: bash
+ run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{ github.workspace }}/bin/ pulumi-resource-aws pulumi-tfgen-aws
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: aws-provider.tar.gz
+ path: ${{ github.workspace }}/bin/provider.tar.gz
+ retention-days: 30
diff --git a/.github/actions/upload-sdk/action.yml b/.github/actions/upload-sdk/action.yml
new file mode 100644
index 00000000000..77d4849426b
--- /dev/null
+++ b/.github/actions/upload-sdk/action.yml
@@ -0,0 +1,20 @@
+name: Upload SDK asset
+description: Upload the SDK for a specific language as an asset for the workflow.
+
+inputs:
+ language:
+ required: true
+ description: One of nodejs, python, dotnet, go, java
+
+runs:
+ using: "composite"
+ steps:
+ - name: Compress SDK folder
+ shell: bash
+ run: tar -zcf sdk/${{ inputs.language }}.tar.gz -C sdk/${{ inputs.language }} .
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: ${{ inputs.language }}-sdk.tar.gz
+ path: ${{ github.workspace}}/sdk/${{ inputs.language }}.tar.gz
+ retention-days: 30
diff --git a/.github/workflows/build_sdk.yml b/.github/workflows/build_sdk.yml
index 1c7f099082b..5e209851e11 100644
--- a/.github/workflows/build_sdk.yml
+++ b/.github/workflows/build_sdk.yml
@@ -26,7 +26,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
PROVIDER_VERSION: ${{ inputs.version }}
@@ -58,17 +57,8 @@ jobs:
uses: ./.github/actions/setup-tools
with:
tools: pulumictl, pulumicli, go, node, dotnet, python, java
- - name: Download provider + tfgen binaries
- uses: actions/download-artifact@v4
- with:
- name: aws-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: Untar provider binaries
- run: >-
- tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
-
- find ${{ github.workspace }} -name "pulumi-*-aws" -print -exec chmod +x {} \;
+ - name: Download bin
+ uses: ./.github/actions/download-bin
- name: Install plugins
run: make install_plugins
- name: Update path
@@ -84,11 +74,7 @@ jobs:
sdk/go/**/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
- - name: Compress SDK folder
- run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- - name: Upload artifacts
- uses: actions/upload-artifact@v4
+ - name: Upload SDK
+ uses: ./.github/actions/upload-sdk
with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
- retention-days: 30
+ language: ${{ matrix.language }}
diff --git a/.github/workflows/check-upstream-upgrade.yml b/.github/workflows/check-upstream-upgrade.yml
index f2de64f81af..d79f5127e2f 100644
--- a/.github/workflows/check-upstream-upgrade.yml
+++ b/.github/workflows/check-upstream-upgrade.yml
@@ -8,16 +8,14 @@ jobs:
name: Check for upstream provider upgrades
runs-on: ubuntu-latest
steps:
- - name: Install Go
- uses: actions/setup-go@v5
- with:
- go-version: "1.21.x"
- cache-dependency-path: |
- sdk/go.sum
- name: Checkout Repo
uses: actions/checkout@v4
with:
submodules: true
+ - name: Setup tools
+ uses: ./.github/actions/setup-tools
+ with:
+ tools: go
- name: Install upgrade-provider
run: go install github.com/pulumi/upgrade-provider@main
shell: bash
@@ -34,17 +32,6 @@ jobs:
env:
REPO: ${{ github.repository }}
shell: bash
- - name: Send Check Version Failure To Slack
- if: failure()
- uses: rtCamp/action-slack-notify@v2
- env:
- SLACK_CHANNEL: provider-upgrade-publish-status
- SLACK_COLOR: "#FF0000"
- SLACK_ICON_EMOJI: ":owl:"
- SLACK_MESSAGE: " Failed to check upstream for a new version "
- SLACK_TITLE: ${{ github.event.repository.name }} upstream version check
- SLACK_USERNAME: provider-bot
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
name: Check upstream upgrade
on:
workflow_dispatch: {} #so we can run this manually if necessary.
diff --git a/.github/workflows/command-dispatch.yml b/.github/workflows/command-dispatch.yml
index a43b28af672..91906bf0d61 100644
--- a/.github/workflows/command-dispatch.yml
+++ b/.github/workflows/command-dispatch.yml
@@ -19,7 +19,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
jobs:
command-dispatch-for-testing:
diff --git a/.github/workflows/license.yml b/.github/workflows/license.yml
index e721c81f262..b146f85e5a1 100644
--- a/.github/workflows/license.yml
+++ b/.github/workflows/license.yml
@@ -26,7 +26,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
jobs:
@@ -38,12 +37,10 @@ jobs:
uses: actions/checkout@v4
with:
ref: ${{ env.PR_COMMIT_SHA }}
- - name: Install Go
- uses: actions/setup-go@v5
+ - name: Setup tools
+ uses: ./.github/actions/setup-tools
with:
- cache-dependency-path: |
- sdk/go.sum
- go-version: "1.21.x"
+ tools: go
- run: make upstream
- uses: pulumi/license-check-action@main
with:
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 533013658a6..f8edde6f8cf 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -25,7 +25,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
jobs:
diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml
index 58becf5eed8..8d082f4782a 100644
--- a/.github/workflows/master.yml
+++ b/.github/workflows/master.yml
@@ -19,7 +19,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
jobs:
prerequisites:
@@ -61,26 +60,10 @@ jobs:
aws-access-key-id: ${{ secrets.AWS_CORP_S3_UPLOAD_ACCESS_KEY_ID }}
aws-region: us-west-2
aws-secret-access-key: ${{ secrets.AWS_CORP_S3_UPLOAD_SECRET_ACCESS_KEY }}
- - name: Install Go
- uses: actions/setup-go@v5
+ - name: Setup tools
+ uses: ./.github/actions/setup-tools
with:
- go-version: "1.21.x"
- cache-dependency-path: |
- sdk/go.sum
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@v1.11.0
- with:
- tag: v0.0.46
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@v5
- with:
- pulumi-version: "dev"
- - if: github.event_name == 'pull_request'
- name: Install Schema Tools
- uses: jaxxstorm/action-install-gh-release@v1.11.0
- with:
- repo: pulumi/schema-tools
+ tools: pulumictl, pulumicli, go, schema-tools
- name: Echo Coverage Output Dir
run: 'echo "Coverage output directory: ${{ env.COVERAGE_OUTPUT_DIR }}"'
- name: Generate Coverage Data
@@ -108,85 +91,17 @@ jobs:
- go_test_shim
- provider_test
- test_oidc
- runs-on: ubuntu-latest
- steps:
- - name: Free Disk Space (Ubuntu)
- uses: jlumbroso/free-disk-space@v1.3.1
- with:
- # this might remove tools that are actually needed,
- # if set to "true" but frees about 6 GB
- tool-cache: false
- swap-storage: false
- - name: Checkout Repo
- uses: actions/checkout@v4
- with:
- submodules: true
- - name: Install Go
- uses: actions/setup-go@v5
- with:
- go-version: "1.21.x"
- cache-dependency-path: |
- sdk/go.sum
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@v1.11.0
- with:
- tag: v0.0.46
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@v5
- with:
- pulumi-version: "dev"
- - name: Configure AWS Credentials
- uses: aws-actions/configure-aws-credentials@v4
- with:
- aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
- aws-region: us-east-2
- aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- role-duration-seconds: 7200
- role-external-id: upload-pulumi-release
- role-session-name: aws@githubActions
- role-to-assume: ${{ secrets.AWS_UPLOAD_ROLE_ARN }}
- - name: Run GoReleaser
- uses: goreleaser/goreleaser-action@v5
- env:
- GORELEASER_CURRENT_TAG: v${{ needs.prerequisites.outputs.version }}
- PROVIDER_VERSION: ${{ needs.prerequisites.outputs.version }}
- with:
- args: -p 1 -f .goreleaser.prerelease.yml --rm-dist --skip-validate --timeout
- 150m0s
- version: latest
-
- publish_sdk:
- name: publish_sdk
- needs:
- - prerequisites
- - publish
- runs-on: ubuntu-latest
- steps:
- - name: Publish SDKs
- uses: pulumi/pulumi-package-publisher@v0.0.18
- with:
- sdk: all
- version: ${{ needs.prerequisites.outputs.version }}
- dotnet-version: "6.0.x"
- java-version: "11"
- node-version: "20.x"
- python-version: "3.11.8"
- - env:
- SLACK_CHANNEL: provider-upgrade-publish-status
- SLACK_COLOR: "#FF0000"
- SLACK_ICON_EMOJI: ":taco:"
- SLACK_MESSAGE: "Publish failed :x:"
- SLACK_TITLE: ${{ github.event.repository.name }} upgrade result
- SLACK_USERNAME: provider-bot
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: failure()
- name: Send Publish Failure To Slack
- uses: rtCamp/action-slack-notify@v2
+ - upstream_lint
+ uses: ./.github/workflows/publish.yml
+ secrets: inherit
+ with:
+ version: ${{ needs.prerequisites.outputs.version }}
+ isPrerelease: true
+ skipGoSdk: true
tag_release_if_labeled_needs_release:
name: Tag release if labeled as needs-release
- needs: publish_sdk
+ needs: publish
runs-on: ubuntu-latest
steps:
- name: check if this commit needs release
@@ -223,64 +138,17 @@ jobs:
uses: actions/checkout@v4
with:
submodules: true
- - name: Install Go
- uses: actions/setup-go@v5
- with:
- go-version: "1.21.x"
- cache-dependency-path: |
- sdk/go.sum
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@v1.11.0
- with:
- tag: v0.0.46
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@v5
- with:
- pulumi-version: "dev"
- - name: Setup Node
- uses: actions/setup-node@v4
- with:
- node-version: "20.x"
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: "6.0.x"
- - name: Setup Python
- uses: actions/setup-python@v5
+ - name: Setup tools
+ uses: ./.github/actions/setup-tools
with:
- python-version: "3.11.8"
- - name: Setup Java
- uses: actions/setup-java@v4
- with:
- cache: gradle
- distribution: temurin
- java-version: "11"
- - name: Setup Gradle
- uses: gradle/gradle-build-action@v3
- with:
- gradle-version: "7.6"
- - name: Download provider + tfgen binaries
- uses: actions/download-artifact@v4
- with:
- name: aws-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: Untar provider binaries
- run: >-
- tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
-
- find ${{ github.workspace }} -name "pulumi-*-aws" -print -exec chmod +x {} \;
+ tools: pulumictl, pulumicli, go, node, dotnet, python, java
+ - name: Download bin
+ uses: ./.github/actions/download-bin
- run: dotnet nuget add source ${{ github.workspace }}/nuget
- name: Download SDK
- uses: actions/download-artifact@v4
+ uses: ./.github/actions/download-sdk
with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress SDK folder
- run: tar -zxf ${{ github.workspace }}/sdk/${{ matrix.language }}.tar.gz -C ${{
- github.workspace }}/sdk/${{ matrix.language }}
+ language: ${{ matrix.language }}
- name: Update path
run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- name: Install Python deps
@@ -508,9 +376,36 @@ jobs:
matrix:
language:
- nodejs
+ upstream_lint:
+ name: Run upstream provider-lint
+ runs-on: ubuntu-latest
+ steps:
+ - name: Free Disk Space (Ubuntu)
+ uses: jlumbroso/free-disk-space@main
+ with:
+ swap-storage: false
+ tool-cache: false
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ env.PR_COMMIT_SHA }}
+ submodules: true
+ - name: Install Go
+ uses: actions/setup-go@v5
+ with:
+ cache: false
+ go-version: 1.22.x
+ - name: Make upstream
+ run: make upstream
+ - name: upstream lint
+ run: |
+ cd upstream
+ make provider-lint
+ timeout-minutes: 60
name: master
on:
+ workflow_dispatch: {}
push:
branches:
- master
diff --git a/.github/workflows/nightly-test.yml b/.github/workflows/nightly-test.yml
index 7f5ec756c08..ef2323bebda 100644
--- a/.github/workflows/nightly-test.yml
+++ b/.github/workflows/nightly-test.yml
@@ -19,7 +19,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
jobs:
prerequisites:
@@ -60,64 +59,17 @@ jobs:
uses: actions/checkout@v4
with:
submodules: true
- - name: Install Go
- uses: actions/setup-go@v5
+ - name: Setup tools
+ uses: ./.github/actions/setup-tools
with:
- go-version: "1.21.x"
- cache-dependency-path: |
- sdk/go.sum
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@v1.11.0
- with:
- tag: v0.0.46
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@v5
- with:
- pulumi-version: "dev"
- - name: Setup Node
- uses: actions/setup-node@v4
- with:
- node-version: "20.x"
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: "6.0.x"
- - name: Setup Python
- uses: actions/setup-python@v5
- with:
- python-version: "3.11.8"
- - name: Setup Java
- uses: actions/setup-java@v4
- with:
- cache: gradle
- distribution: temurin
- java-version: "11"
- - name: Setup Gradle
- uses: gradle/gradle-build-action@v3
- with:
- gradle-version: "7.6"
- - name: Download provider + tfgen binaries
- uses: actions/download-artifact@v4
- with:
- name: aws-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: Untar provider binaries
- run: >-
- tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
-
- find ${{ github.workspace }} -name "pulumi-*-aws" -print -exec chmod +x {} \;
+ tools: pulumictl, pulumicli, go, node, dotnet, python, java
+ - name: Download bin
+ uses: ./.github/actions/download-bin
- run: dotnet nuget add source ${{ github.workspace }}/nuget
- name: Download SDK
- uses: actions/download-artifact@v4
+ uses: ./.github/actions/download-sdk
with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress SDK folder
- run: tar -zxf ${{ github.workspace }}/sdk/${{ matrix.language }}.tar.gz -C ${{
- github.workspace }}/sdk/${{ matrix.language }}
+ language: ${{ matrix.language }}
- name: Update path
run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- name: Install Python deps
diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml
index 0653c571300..a0379e8b99c 100644
--- a/.github/workflows/prerelease.yml
+++ b/.github/workflows/prerelease.yml
@@ -20,7 +20,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
jobs:
prerequisites:
@@ -53,118 +52,13 @@ jobs:
- go_test_shim
- provider_test
- test_oidc
- runs-on: ubuntu-latest
- steps:
- - name: Free Disk Space (Ubuntu)
- uses: jlumbroso/free-disk-space@v1.3.1
- with:
- # this might remove tools that are actually needed,
- # if set to "true" but frees about 6 GB
- tool-cache: false
- swap-storage: false
- - name: Checkout Repo
- uses: actions/checkout@v4
- with:
- submodules: true
- - name: Install Go
- uses: actions/setup-go@v5
- with:
- go-version: "1.21.x"
- cache-dependency-path: |
- sdk/go.sum
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@v1.11.0
- with:
- tag: v0.0.46
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@v5
- with:
- pulumi-version: "dev"
- - name: Configure AWS Credentials
- uses: aws-actions/configure-aws-credentials@v4
- with:
- aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
- aws-region: us-east-2
- aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- role-duration-seconds: 7200
- role-external-id: upload-pulumi-release
- role-session-name: aws@githubActions
- role-to-assume: ${{ secrets.AWS_UPLOAD_ROLE_ARN }}
- - name: Run GoReleaser
- uses: goreleaser/goreleaser-action@v5
- env:
- GORELEASER_CURRENT_TAG: v${{ needs.prerequisites.outputs.version }}
- PROVIDER_VERSION: ${{ needs.prerequisites.outputs.version }}
- with:
- args: -p 1 -f .goreleaser.prerelease.yml --rm-dist --skip-validate --timeout
- 150m0s
- version: latest
- publish_sdk:
- name: publish_sdk
- needs:
- - prerequisites
- - publish
- runs-on: ubuntu-latest
- steps:
- - name: Publish SDKs
- uses: pulumi/pulumi-package-publisher@v0.0.18
- with:
- sdk: all
- version: ${{ needs.prerequisites.outputs.version }}
- dotnet-version: "6.0.x"
- java-version: "11"
- node-version: "20.x"
- python-version: "3.11.8"
- - env:
- SLACK_CHANNEL: provider-upgrade-publish-status
- SLACK_COLOR: "#FF0000"
- SLACK_ICON_EMOJI: ":taco:"
- SLACK_MESSAGE: "Publish failed :x:"
- SLACK_TITLE: ${{ github.event.repository.name }} upgrade result
- SLACK_USERNAME: provider-bot
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: failure()
- name: Send Publish Failure To Slack
- uses: rtCamp/action-slack-notify@v2
- publish_go_sdk:
- name: publish_go_sdk
- needs:
- - prerequisites
- - publish_sdk
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Repo
- uses: actions/checkout@v4
- with:
- submodules: true
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@v1.11.0
- with:
- tag: v0.0.46
- repo: pulumi/pulumictl
- - name: Download Go SDK
- uses: actions/download-artifact@v4
- with:
- name: go-sdk.tar.gz
- path: ${{ github.workspace }}/sdk/
- - name: Uncompress Go SDK
- run: tar -zxf ${{ github.workspace }}/sdk/go.tar.gz -C
- ${{ github.workspace }}/sdk/go
- shell: bash
- - uses: pulumi/publish-go-sdk-action@v1
- with:
- repository: ${{ github.repository }}
- base-ref: ${{ github.sha }}
- source: sdk
- path: sdk
- version: ${{ needs.prerequisites.outputs.version }}
- additive: false
- # Avoid including other language SDKs & artifacts in the commit
- files: |
- go.*
- go/**
- !*.tar.gz
+ - upstream_lint
+ uses: ./.github/workflows/publish.yml
+ secrets: inherit
+ with:
+ version: ${{ needs.prerequisites.outputs.version }}
+ isPrerelease: true
+
test:
name: test
needs:
@@ -187,64 +81,17 @@ jobs:
uses: actions/checkout@v4
with:
submodules: true
- - name: Install Go
- uses: actions/setup-go@v5
- with:
- go-version: "1.21.x"
- cache-dependency-path: |
- sdk/go.sum
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@v1.11.0
- with:
- tag: v0.0.46
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@v5
- with:
- pulumi-version: "dev"
- - name: Setup Node
- uses: actions/setup-node@v4
- with:
- node-version: "20.x"
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: "6.0.x"
- - name: Setup Python
- uses: actions/setup-python@v5
+ - name: Setup tools
+ uses: ./.github/actions/setup-tools
with:
- python-version: "3.11.8"
- - name: Setup Java
- uses: actions/setup-java@v4
- with:
- cache: gradle
- distribution: temurin
- java-version: "11"
- - name: Setup Gradle
- uses: gradle/gradle-build-action@v3
- with:
- gradle-version: "7.6"
- - name: Download provider + tfgen binaries
- uses: actions/download-artifact@v4
- with:
- name: aws-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: Untar provider binaries
- run: >-
- tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
-
- find ${{ github.workspace }} -name "pulumi-*-aws" -print -exec chmod +x {} \;
+ tools: pulumictl, pulumicli, go, node, dotnet, python, java
+ - name: Download bin
+ uses: ./.github/actions/download-bin
- run: dotnet nuget add source ${{ github.workspace }}/nuget
- name: Download SDK
- uses: actions/download-artifact@v4
+ uses: ./.github/actions/download-sdk
with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress SDK folder
- run: tar -zxf ${{ github.workspace }}/sdk/${{ matrix.language }}.tar.gz -C ${{
- github.workspace }}/sdk/${{ matrix.language }}
+ language: ${{ matrix.language }}
- name: Update path
run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- name: Install Python deps
@@ -472,20 +319,33 @@ jobs:
matrix:
language:
- nodejs
+ upstream_lint:
+ name: Run upstream provider-lint
+ runs-on: ubuntu-latest
+ steps:
+ - name: Free Disk Space (Ubuntu)
+ uses: jlumbroso/free-disk-space@main
+ with:
+ swap-storage: false
+ tool-cache: false
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ env.PR_COMMIT_SHA }}
+ submodules: true
+ - name: Install Go
+ uses: actions/setup-go@v5
+ with:
+ cache: false
+ go-version: 1.22.x
+ - name: Make upstream
+ run: make upstream
+ - name: upstream lint
+ run: |
+ cd upstream
+ make provider-lint
+ timeout-minutes: 60
- verify-release:
- name: verify-release
- needs:
- - prerequisites
- - publish
- - publish_sdk
- - publish_go_sdk
- uses: ./.github/workflows/verify-release.yml
- secrets: inherit
- with:
- providerVersion: ${{ needs.prerequisites.outputs.version }}
- # Prelease is run often but we only have 5 concurrent macos runners, so we only test after the stable release.
- enableMacosRunner: false
name: prerelease
on:
diff --git a/.github/workflows/prerequisites.yml b/.github/workflows/prerequisites.yml
index 1769bf0c68e..7190133a88f 100644
--- a/.github/workflows/prerequisites.yml
+++ b/.github/workflows/prerequisites.yml
@@ -36,7 +36,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
jobs:
@@ -103,13 +102,5 @@ jobs:
Maintainer note: consult the [runbook](https://github.com/pulumi/platform-providers-team/blob/main/playbooks/tf-provider-updating.md) for dealing with any breaking changes.
- - name: Tar provider binaries
- run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace }}/bin/ pulumi-resource-aws
- pulumi-tfgen-aws
- - name: Upload artifacts
- uses: actions/upload-artifact@v4
- with:
- name: aws-provider.tar.gz
- path: ${{ github.workspace }}/bin/provider.tar.gz
- retention-days: 30
+ - name: Upload bin
+ uses: ./.github/actions/upload-bin
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 00000000000..4cbebe2f3a8
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,180 @@
+# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
+name: Publish
+
+on:
+ workflow_call:
+ inputs:
+ version:
+ required: true
+ type: string
+ isPrerelease:
+ required: true
+ type: boolean
+ skipGoSdk:
+ default: false
+ type: boolean
+ description: Skip publishing & verifying the Go SDK
+
+env:
+ IS_PRERELEASE: ${{ inputs.isPrerelease }}
+ AWS_REGION: us-west-2
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+ NUGET_PUBLISH_KEY: ${{ secrets.NUGET_PUBLISH_KEY }}
+ OIDC_ROLE_ARN: ${{ secrets.OIDC_ROLE_ARN }}
+ PUBLISH_REPO_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
+ PUBLISH_REPO_USERNAME: ${{ secrets.OSSRH_USERNAME }}
+ PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
+ PULUMI_API: https://api.pulumi-staging.io
+ PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/..
+ PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
+ PULUMI_MISSING_DOCS_ERROR: true
+ PYPI_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
+ PYPI_USERNAME: __token__
+ SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
+ SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
+ SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
+ TF_APPEND_USER_AGENT: pulumi
+
+jobs:
+ publish:
+ name: publish
+ runs-on: ubuntu-latest
+ steps:
+ - name: Validate prerelease
+ if: inputs.isPrerelease == false && (contains(inputs.version, '-') || contains(inputs.version, '+'))
+ run: echo "Can't publish a prerelease version as a stable release. This is likely a bug in the calling workflow." && exit 1
+ - name: Validate skipGoSdk
+ if: inputs.skipGoSdk && inputs.isPrerelease == false
+ run: echo "Can't skip Go SDK for stable releases. This is likely a bug in the calling workflow." && exit 1
+ - name: Free Disk Space (Ubuntu)
+ uses: jlumbroso/free-disk-space@v1.3.1
+ with:
+ # this might remove tools that are actually needed,
+ # if set to "true" but frees about 6 GB
+ tool-cache: false
+ swap-storage: false
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ with:
+ submodules: true
+ - name: Setup tools
+ uses: ./.github/actions/setup-tools
+ with:
+ tools: pulumictl, pulumicli, go
+ - name: Configure AWS Credentials
+ uses: aws-actions/configure-aws-credentials@v4
+ with:
+ aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ aws-region: us-east-2
+ aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ role-duration-seconds: 7200
+ role-external-id: upload-pulumi-release
+ role-session-name: aws@githubActions
+ role-to-assume: ${{ secrets.AWS_UPLOAD_ROLE_ARN }}
+ - name: Run GoReleaser
+ if: inputs.isPrerelease == false
+ uses: goreleaser/goreleaser-action@v5
+ env:
+ GORELEASER_CURRENT_TAG: v${{ inputs.version }}
+ PROVIDER_VERSION: ${{ inputs.version }}
+ with:
+ args: -p 1 release --rm-dist --timeout 150m0s
+ version: latest
+ - name: Run GoReleaser (prerelease)
+ if: inputs.isPrerelease == true
+ uses: goreleaser/goreleaser-action@v5
+ env:
+ GORELEASER_CURRENT_TAG: v${{ inputs.version }}
+ PROVIDER_VERSION: ${{ inputs.version }}
+ with:
+ args: -p 1 -f .goreleaser.prerelease.yml --rm-dist --skip-validate --timeout
+ 150m0s
+ version: latest
+
+ publish_sdk:
+ name: publish_sdk
+ needs: publish
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ with:
+ submodules: true
+ - name: Setup tools
+ uses: ./.github/actions/setup-tools
+ with:
+ tools: pulumictl, pulumicli, go, node, dotnet, python, java
+ - name: Publish SDKs
+ uses: pulumi/pulumi-package-publisher@v0.0.19
+ with:
+ sdk: all
+ version: ${{ inputs.version }}
+ - name: Download Go SDK
+ uses: ./.github/actions/download-sdk
+ with:
+ language: go
+ - uses: pulumi/publish-go-sdk-action@v1
+ if: inputs.skipGoSdk == false
+ with:
+ repository: ${{ github.repository }}
+ base-ref: ${{ github.sha }}
+ source: sdk
+ path: sdk
+ version: ${{ inputs.version }}
+ additive: false
+ # Avoid including other language SDKs & artifacts in the commit
+ files: |
+ go.*
+ go/**
+ !*.tar.gz
+ create_docs_build:
+ name: create_docs_build
+ needs: publish_sdk
+ # Only run for non-prerelease, if the publish_go_sdk job was successful or skipped
+ if: inputs.isPrerelease == false
+ runs-on: ubuntu-latest
+ steps:
+ - name: Dispatch Metadata build
+ uses: peter-evans/repository-dispatch@v3
+ with:
+ token: ${{ secrets.PULUMI_BOT_TOKEN }}
+ repository: pulumi/registry
+ event-type: resource-provider
+ client-payload: |-
+ {
+ "project": "${{ github.repository }}",
+ "project-shortname": "aws",
+ "ref": "${{ github.ref_name }}"
+ }
+
+ clean_up_release_labels:
+ name: Clean up release labels
+ # Only run for non-prerelease, if the publish_go_sdk job was successful or skipped
+ if: inputs.isPrerelease == false
+ needs: create_docs_build
+
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ - name: Clean up release labels
+ uses: pulumi/action-release-by-pr-label@main
+ with:
+ command: "clean-up-release-labels"
+ repo: ${{ github.repository }}
+ commit: ${{ github.sha }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ verify_release:
+ name: verify_release
+ needs: publish_sdk
+ uses: ./.github/workflows/verify-release.yml
+ secrets: inherit
+ with:
+ providerVersion: ${{ inputs.version }}
+ # Prelease is run often but we only have 5 concurrent macos runners, so we only test after the stable release.
+ enableMacosRunner: ${{ inputs.isPrerelease == false }}
+ skipGoSdk: ${{ inputs.skipGoSdk }}
diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml
index b54bb47717f..5b20f8ee261 100644
--- a/.github/workflows/pull-request.yml
+++ b/.github/workflows/pull-request.yml
@@ -19,7 +19,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
jobs:
comment-on-pr:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 75d9a0e3333..aa19c8df880 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -19,7 +19,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
jobs:
prerequisites:
@@ -38,23 +37,6 @@ jobs:
with:
version: ${{ needs.prerequisites.outputs.version }}
- create_docs_build:
- name: create_docs_build
- needs: publish_go_sdk
- runs-on: ubuntu-latest
- steps:
- - name: Dispatch Metadata build
- uses: peter-evans/repository-dispatch@v3
- with:
- token: ${{ secrets.PULUMI_BOT_TOKEN }}
- repository: pulumi/registry
- event-type: resource-provider
- client-payload: |-
- {
- "project": "${{ github.repository }}",
- "project-shortname": "aws",
- "ref": "${{ github.ref_name }}"
- }
license_check:
name: License Check
uses: ./.github/workflows/license.yml
@@ -69,134 +51,12 @@ jobs:
- go_test_shim
- provider_test
- test_oidc
- runs-on: ubuntu-latest
- steps:
- - name: Free Disk Space (Ubuntu)
- uses: jlumbroso/free-disk-space@v1.3.1
- with:
- # this might remove tools that are actually needed,
- # if set to "true" but frees about 6 GB
- tool-cache: false
- swap-storage: false
- - name: Checkout Repo
- uses: actions/checkout@v4
- with:
- submodules: true
- - name: Install Go
- uses: actions/setup-go@v5
- with:
- go-version: "1.21.x"
- cache-dependency-path: |
- sdk/go.sum
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@v1.11.0
- with:
- tag: v0.0.46
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@v5
- with:
- pulumi-version: "dev"
- - name: Configure AWS Credentials
- uses: aws-actions/configure-aws-credentials@v4
- with:
- aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
- aws-region: us-east-2
- aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- role-duration-seconds: 7200
- role-external-id: upload-pulumi-release
- role-session-name: aws@githubActions
- role-to-assume: ${{ secrets.AWS_UPLOAD_ROLE_ARN }}
- - name: Run GoReleaser
- uses: goreleaser/goreleaser-action@v5
- env:
- GORELEASER_CURRENT_TAG: v${{ needs.prerequisites.outputs.version }}
- PROVIDER_VERSION: ${{ needs.prerequisites.outputs.version }}
- with:
- args: -p 1 release --rm-dist --timeout 150m0s
- version: latest
- publish_sdk:
- name: publish_sdk
- needs:
- - prerequisites
- - publish
- runs-on: ubuntu-latest
- steps:
- - name: Publish SDKs
- uses: pulumi/pulumi-package-publisher@v0.0.18
- with:
- sdk: all
- version: ${{ needs.prerequisites.outputs.version }}
- dotnet-version: "6.0.x"
- java-version: "11"
- node-version: "20.x"
- python-version: "3.11.8"
- - env:
- SLACK_CHANNEL: provider-upgrade-publish-status
- SLACK_COLOR: "#FF0000"
- SLACK_ICON_EMOJI: ":taco:"
- SLACK_MESSAGE: "Publish failed :x:"
- SLACK_TITLE: ${{ github.event.repository.name }} upgrade result
- SLACK_USERNAME: provider-bot
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: failure()
- name: Send Publish Failure To Slack
- uses: rtCamp/action-slack-notify@v2
- publish_go_sdk:
- name: publish_go_sdk
- needs:
- - prerequisites
- - publish_sdk
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Repo
- uses: actions/checkout@v4
- with:
- submodules: true
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@v1.11.0
- with:
- tag: v0.0.46
- repo: pulumi/pulumictl
- - name: Download Go SDK
- uses: actions/download-artifact@v4
- with:
- name: go-sdk.tar.gz
- path: ${{ github.workspace }}/sdk/
- - name: Uncompress Go SDK
- run: tar -zxf ${{ github.workspace }}/sdk/go.tar.gz -C
- ${{ github.workspace }}/sdk/go
- shell: bash
- - uses: pulumi/publish-go-sdk-action@v1
- with:
- repository: ${{ github.repository }}
- base-ref: ${{ github.sha }}
- source: sdk
- path: sdk
- version: ${{ needs.prerequisites.outputs.version }}
- additive: false
- # Avoid including other language SDKs & artifacts in the commit
- files: |
- go.*
- go/**
- !*.tar.gz
-
- clean_up_release_labels:
- name: Clean up release labels
- needs: create_docs_build
-
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Repo
- uses: actions/checkout@v4
- - name: Clean up release labels
- uses: pulumi/action-release-by-pr-label@main
- with:
- command: "clean-up-release-labels"
- repo: ${{ github.repository }}
- commit: ${{ github.sha }}
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - upstream_lint
+ uses: ./.github/workflows/publish.yml
+ secrets: inherit
+ with:
+ version: ${{ needs.prerequisites.outputs.version }}
+ isPrerelease: false
test:
name: test
@@ -220,64 +80,17 @@ jobs:
uses: actions/checkout@v4
with:
submodules: true
- - name: Install Go
- uses: actions/setup-go@v5
- with:
- go-version: "1.21.x"
- cache-dependency-path: |
- sdk/go.sum
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@v1.11.0
- with:
- tag: v0.0.46
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@v5
+ - name: Setup tools
+ uses: ./.github/actions/setup-tools
with:
- pulumi-version: "dev"
- - name: Setup Node
- uses: actions/setup-node@v4
- with:
- node-version: "20.x"
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: "6.0.x"
- - name: Setup Python
- uses: actions/setup-python@v5
- with:
- python-version: "3.11.8"
- - name: Setup Java
- uses: actions/setup-java@v4
- with:
- cache: gradle
- distribution: temurin
- java-version: "11"
- - name: Setup Gradle
- uses: gradle/gradle-build-action@v3
- with:
- gradle-version: "7.6"
- - name: Download provider + tfgen binaries
- uses: actions/download-artifact@v4
- with:
- name: aws-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: Untar provider binaries
- run: >-
- tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
-
- find ${{ github.workspace }} -name "pulumi-*-aws" -print -exec chmod +x {} \;
+ tools: pulumictl, pulumicli, go, node, dotnet, python, java
+ - name: Download bin
+ uses: ./.github/actions/download-bin
- run: dotnet nuget add source ${{ github.workspace }}/nuget
- name: Download SDK
- uses: actions/download-artifact@v4
+ uses: ./.github/actions/download-sdk
with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress SDK folder
- run: tar -zxf ${{ github.workspace }}/sdk/${{ matrix.language }}.tar.gz -C ${{
- github.workspace }}/sdk/${{ matrix.language }}
+ language: ${{ matrix.language }}
- name: Update path
run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- name: Install Python deps
@@ -505,19 +318,33 @@ jobs:
matrix:
language:
- nodejs
+ upstream_lint:
+ name: Run upstream provider-lint
+ runs-on: ubuntu-latest
+ steps:
+ - name: Free Disk Space (Ubuntu)
+ uses: jlumbroso/free-disk-space@main
+ with:
+ swap-storage: false
+ tool-cache: false
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ env.PR_COMMIT_SHA }}
+ submodules: true
+ - name: Install Go
+ uses: actions/setup-go@v5
+ with:
+ cache: false
+ go-version: 1.22.x
+ - name: Make upstream
+ run: make upstream
+ - name: upstream lint
+ run: |
+ cd upstream
+ make provider-lint
+ timeout-minutes: 60
- verify-release:
- name: verify-release
- needs:
- - prerequisites
- - publish
- - publish_sdk
- - publish_go_sdk
- uses: ./.github/workflows/verify-release.yml
- secrets: inherit
- with:
- providerVersion: ${{ needs.prerequisites.outputs.version }}
- enableMacosRunner: true
name: release
on:
diff --git a/.github/workflows/resync-build.yml b/.github/workflows/resync-build.yml
index e463a7fbdbb..21cd27e98a4 100644
--- a/.github/workflows/resync-build.yml
+++ b/.github/workflows/resync-build.yml
@@ -21,7 +21,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
jobs:
resync_build:
@@ -40,34 +39,10 @@ jobs:
- id: run-url
name: Create URL to the run output
run: echo "run-url=https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" >> "$GITHUB_OUTPUT"
- - name: Install Go
- uses: actions/setup-go@v5
+ - name: Setup tools
+ uses: ./.github/actions/setup-tools
with:
- go-version: "1.21.x"
- cache-dependency-path: |
- sdk/go.sum
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@v1.11.0
- with:
- tag: v0.0.46
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@v5
- with:
- pulumi-version: "dev"
- - name: Setup DotNet
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: "6.0.x"
- - name: Setup Node
- uses: actions/setup-node@v4
- with:
- node-version: "20.x"
- registry-url: https://registry.npmjs.org
- - name: Setup Python
- uses: actions/setup-python@v5
- with:
- python-version: "3.11.8"
+ tools: pulumictl, pulumicli, go, node, dotnet, python
- name: Sync with ci-mgmt
run: cp -r "ci-mgmt/provider-ci/providers/$PROVIDER/repo/." .
- name: Remove ci-mgmt directory
diff --git a/.github/workflows/run-acceptance-tests.yml b/.github/workflows/run-acceptance-tests.yml
index 9d0be6d6895..4e78ade105a 100644
--- a/.github/workflows/run-acceptance-tests.yml
+++ b/.github/workflows/run-acceptance-tests.yml
@@ -20,7 +20,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
# This should cancel any previous runs of the same workflow on the same branch which are still running.
@@ -73,6 +72,7 @@ jobs:
- go_test_shim
- provider_test
- test_oidc
+ - upstream_lint
runs-on: ubuntu-latest
steps:
- uses: guibranco/github-status-action-v2@0849440ec82c5fa69b2377725b9b7852a3977e76
@@ -122,26 +122,13 @@ jobs:
uses: ./.github/actions/setup-tools
with:
tools: pulumictl, pulumicli, go, node, dotnet, python, java
- - name: Download provider + tfgen binaries
- uses: actions/download-artifact@v4
- with:
- name: aws-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: Untar provider binaries
- run: >-
- tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
-
- find ${{ github.workspace }} -name "pulumi-*-aws" -print -exec chmod +x {} \;
+ - name: Download bin
+ uses: ./.github/actions/download-bin
- run: dotnet nuget add source ${{ github.workspace }}/nuget
- name: Download SDK
- uses: actions/download-artifact@v4
+ uses: ./.github/actions/download-sdk
with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress SDK folder
- run: tar -zxf ${{ github.workspace }}/sdk/${{ matrix.language }}.tar.gz -C ${{
- github.workspace }}/sdk/${{ matrix.language }}
+ language: ${{ matrix.language }}
- name: Update path
run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- name: Install Python deps
@@ -379,6 +366,32 @@ jobs:
matrix:
language:
- nodejs
+ upstream_lint:
+ name: Run upstream provider-lint
+ runs-on: ubuntu-latest
+ steps:
+ - name: Free Disk Space (Ubuntu)
+ uses: jlumbroso/free-disk-space@main
+ with:
+ swap-storage: false
+ tool-cache: false
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ env.PR_COMMIT_SHA }}
+ submodules: true
+ - name: Install Go
+ uses: actions/setup-go@v5
+ with:
+ cache: false
+ go-version: 1.22.x
+ - name: Make upstream
+ run: make upstream
+ - name: upstream lint
+ run: |
+ cd upstream
+ make provider-lint
+ timeout-minutes: 60
name: run-acceptance-tests
on:
diff --git a/.github/workflows/upgrade-bridge.yml b/.github/workflows/upgrade-bridge.yml
index 3a840722873..69c476ffbca 100644
--- a/.github/workflows/upgrade-bridge.yml
+++ b/.github/workflows/upgrade-bridge.yml
@@ -83,27 +83,3 @@ jobs:
pr-reviewers: ${{ github.event.client_payload.pr-reviewers }}
pr-description: ${{ github.event.client_payload.pr-description }}
pr-title-prefix: ${{ github.event.client_payload.pr-title-prefix }}
- - env:
- SLACK_CHANNEL: provider-upgrade-publish-status
- SLACK_COLOR: "#7CFC00"
- SLACK_ICON_EMOJI: ":taco:"
- SLACK_MESSAGE: >-
- Upgrade succeeded :heart_decoration:
-
- PR opened at github.com/pulumi/${{ github.event.repository.name }}/pulls
- SLACK_TITLE: ${{ github.event.repository.name }} upgrade result
- SLACK_USERNAME: provider-bot
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- name: Send Upgrade Success To Slack
- uses: rtCamp/action-slack-notify@v2
- - env:
- SLACK_CHANNEL: provider-upgrade-publish-status
- SLACK_COLOR: "#FF0000"
- SLACK_ICON_EMOJI: ":taco:"
- SLACK_MESSAGE: " Upgrade failed :x:"
- SLACK_TITLE: ${{ github.event.repository.name }} upgrade result
- SLACK_USERNAME: provider-bot
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: failure()
- name: Send Upgrade Failure To Slack
- uses: rtCamp/action-slack-notify@v2
diff --git a/.github/workflows/upgrade-provider.yml b/.github/workflows/upgrade-provider.yml
index 04f7d6aba1e..02437beb9dc 100644
--- a/.github/workflows/upgrade-provider.yml
+++ b/.github/workflows/upgrade-provider.yml
@@ -15,30 +15,6 @@ jobs:
kind: all
email: bot@pulumi.com
username: pulumi-bot
- - env:
- SLACK_CHANNEL: provider-upgrade-publish-status
- SLACK_COLOR: "#7CFC00"
- SLACK_ICON_EMOJI: ":taco:"
- SLACK_MESSAGE: >-
- Upgrade succeeded :heart_decoration:
-
- PR opened at github.com/pulumi/${{ github.event.repository.name }}/pulls
- SLACK_TITLE: ${{ github.event.repository.name }} upgrade result
- SLACK_USERNAME: provider-bot
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- name: Send Upgrade Success To Slack
- uses: rtCamp/action-slack-notify@v2
- - env:
- SLACK_CHANNEL: provider-upgrade-publish-status
- SLACK_COLOR: "#FF0000"
- SLACK_ICON_EMOJI: ":taco:"
- SLACK_MESSAGE: " Upgrade failed :x:"
- SLACK_TITLE: ${{ github.event.repository.name }} upgrade result
- SLACK_USERNAME: provider-bot
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: failure()
- name: Send Upgrade Failure To Slack
- uses: rtCamp/action-slack-notify@v2
name: Upgrade provider
on:
issues:
diff --git a/.github/workflows/verify-release.yml b/.github/workflows/verify-release.yml
index 9ebd3f6b764..c9c7dbe8055 100644
--- a/.github/workflows/verify-release.yml
+++ b/.github/workflows/verify-release.yml
@@ -22,6 +22,11 @@ on:
required: false
type: boolean
default: false
+ skipGoSdk:
+ description: "Skip the Go SDK verification. Defaults to 'false'. This is used when we're not publishing a Go SDK on the default branch build."
+ required: false
+ type: boolean
+ default: false
env:
AWS_REGION: us-west-2
@@ -42,7 +47,6 @@ env:
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
TF_APPEND_USER_AGENT: pulumi
jobs:
@@ -66,3 +70,5 @@ jobs:
uses: actions/checkout@v4
- name: Setup tools
uses: ./.github/actions/setup-tools
+ with:
+ tools: pulumicli, go, node, dotnet, python, java
diff --git a/.upgrade-config.yml b/.upgrade-config.yml
index 749c6fa2eeb..1c2df133e15 100644
--- a/.upgrade-config.yml
+++ b/.upgrade-config.yml
@@ -4,4 +4,3 @@
upstream-provider-name: terraform-provider-aws
pulumi-infer-version: true
remove-plugins: true
-pr-reviewers: iwahbe # Team: pulumi/Providers
diff --git a/examples/go.mod b/examples/go.mod
index 3459dcd5e49..6b153fe3fae 100644
--- a/examples/go.mod
+++ b/examples/go.mod
@@ -1,6 +1,6 @@
module github.com/pulumi/pulumi-aws/examples/v6
-go 1.22.4
+go 1.22.5
require (
github.com/aws/aws-sdk-go v1.54.8
@@ -8,7 +8,7 @@ require (
github.com/aws/aws-sdk-go-v2/service/iam v1.33.1
github.com/pulumi/providertest v0.0.11
github.com/pulumi/pulumi-aws/provider/v6 v6.0.0-00010101000000-000000000000
- github.com/pulumi/pulumi-terraform-bridge/pf v0.38.0
+ github.com/pulumi/pulumi-terraform-bridge/pf v0.39.0
github.com/pulumi/pulumi-terraform-bridge/testing v0.0.2-0.20230927165309-e3fd9503f2d3
github.com/pulumi/pulumi/pkg/v3 v3.121.0
github.com/stretchr/testify v1.9.0
@@ -376,7 +376,7 @@ require (
github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect
github.com/pulumi/esc v0.9.1 // indirect
github.com/pulumi/inflector v0.1.1 // indirect
- github.com/pulumi/pulumi-terraform-bridge/v3 v3.85.0 // indirect
+ github.com/pulumi/pulumi-terraform-bridge/v3 v3.86.0 // indirect
github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.8 // indirect
github.com/pulumi/pulumi/sdk/v3 v3.121.0 // indirect
github.com/pulumi/terraform-diff-reader v0.0.2 // indirect
diff --git a/examples/go.sum b/examples/go.sum
index 5637f160cba..709b2363998 100644
--- a/examples/go.sum
+++ b/examples/go.sum
@@ -1992,8 +1992,8 @@ github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBM
github.com/hashicorp/go-cty v1.4.1-0.20200723130312-85980079f637 h1:Ud/6/AdmJ1R7ibdS0Wo5MWPj0T1R0fkpaD087bBaW8I=
github.com/hashicorp/go-cty v1.4.1-0.20200723130312-85980079f637/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs=
github.com/hashicorp/go-getter v1.4.0/go.mod h1:7qxyCd8rBfcShwsvxgIguu4KbS3l8bUCwg2Umn7RjeY=
-github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY=
-github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744=
+github.com/hashicorp/go-getter v1.7.5 h1:dT58k9hQ/vbxNMwoI5+xFYAJuv6152UNvdHokfI5wE4=
+github.com/hashicorp/go-getter v1.7.5/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744=
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
@@ -2321,12 +2321,12 @@ github.com/pulumi/inflector v0.1.1 h1:dvlxlWtXwOJTUUtcYDvwnl6Mpg33prhK+7mzeF+Sob
github.com/pulumi/inflector v0.1.1/go.mod h1:HUFCjcPTz96YtTuUlwG3i3EZG4WlniBvR9bd+iJxCUY=
github.com/pulumi/providertest v0.0.11 h1:mg8MQ7Cq7+9XlHIkBD+aCqQO4mwAJEISngZgVdnQUe8=
github.com/pulumi/providertest v0.0.11/go.mod h1:HsxjVsytcMIuNj19w1lT2W0QXY0oReXl1+h6eD2JXP8=
-github.com/pulumi/pulumi-terraform-bridge/pf v0.38.0 h1:0+A+ZkoZWy5EOd4zcnM7tjoQ4V1jV/koR8YvWJ8TK/E=
-github.com/pulumi/pulumi-terraform-bridge/pf v0.38.0/go.mod h1:JGOlvwSWY+jEt1V9sI/L8HAP9DBr74aXD10oi5nUJaI=
+github.com/pulumi/pulumi-terraform-bridge/pf v0.39.0 h1:yV5LHLTF878wKMQcHVTqKRShaeJTX7ee36pL3cVvCLs=
+github.com/pulumi/pulumi-terraform-bridge/pf v0.39.0/go.mod h1:teMSjww/2MdNvGTbtLNrjMDkGXteRJso/1iViv8AnCI=
github.com/pulumi/pulumi-terraform-bridge/testing v0.0.2-0.20230927165309-e3fd9503f2d3 h1:bBWWeAtSPPYpKYlPZr2h0BiYgWQpHRIk0HO/MQmB+jc=
github.com/pulumi/pulumi-terraform-bridge/testing v0.0.2-0.20230927165309-e3fd9503f2d3/go.mod h1:vAQ7DeddebQ7FHdRaSG6ijuS28FS9PC4j8Y9wUuue0c=
-github.com/pulumi/pulumi-terraform-bridge/v3 v3.85.0 h1:Zv6OPQdkGERufe2Mq9D92xbTm5mg3uhllh0ryrcrrds=
-github.com/pulumi/pulumi-terraform-bridge/v3 v3.85.0/go.mod h1:a7t2qe4smtB7HlbHlelQxjJQn8DFNB3Gbe5Ot2W7GZU=
+github.com/pulumi/pulumi-terraform-bridge/v3 v3.86.0 h1:55ydBXwbNpL+eAPExJSfL1pSDUuPNSGCU08EamVh3qg=
+github.com/pulumi/pulumi-terraform-bridge/v3 v3.86.0/go.mod h1:jyywJUc4gFP5vWOar8qSQWzSrpwht7XDrYQtVvneza4=
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/pkg/v3 v3.121.0 h1:cLUQJYGJKfgCY0ubJo8dVwmsIm2WcgTprb9Orc/yiFg=
diff --git a/patches/0009-Add-ECR-credentials_data_source.patch b/patches/0009-Add-ECR-credentials_data_source.patch
index fec572dc4f7..eb9d9144c68 100644
--- a/patches/0009-Add-ECR-credentials_data_source.patch
+++ b/patches/0009-Add-ECR-credentials_data_source.patch
@@ -31,10 +31,10 @@ index 650a8e25fb..81babf4a9c 100644
},
diff --git a/internal/service/ecr/credentials_data_source.go b/internal/service/ecr/credentials_data_source.go
new file mode 100644
-index 0000000000..572754846f
+index 0000000000..b6e19a7283
--- /dev/null
+++ b/internal/service/ecr/credentials_data_source.go
-@@ -0,0 +1,69 @@
+@@ -0,0 +1,68 @@
+package ecr
+
+import (
@@ -57,7 +57,6 @@ index 0000000000..572754846f
+ "registry_id": {
+ Type: schema.TypeString,
+ Required: true,
-+ ForceNew: true,
+ },
+ "authorization_token": {
+ Type: schema.TypeString,
diff --git a/patches/0023-Provide-context-to-conns.patch b/patches/0023-Provide-context-to-conns.patch
index baa5e0aa6cc..f1e7cafb996 100644
--- a/patches/0023-Provide-context-to-conns.patch
+++ b/patches/0023-Provide-context-to-conns.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Provide context to conns
diff --git a/internal/service/ecr/credentials_data_source.go b/internal/service/ecr/credentials_data_source.go
-index 572754846f..9dd9fd0e8c 100644
+index b6e19a7283..9176fa0a16 100644
--- a/internal/service/ecr/credentials_data_source.go
+++ b/internal/service/ecr/credentials_data_source.go
@@ -1,6 +1,7 @@
@@ -16,7 +16,7 @@ index 572754846f..9dd9fd0e8c 100644
"log"
"time"
-@@ -39,7 +40,8 @@ func DataSourceCredentials() *schema.Resource {
+@@ -38,7 +39,8 @@ func DataSourceCredentials() *schema.Resource {
}
func dataSourceAwsEcrCredentialsRead(d *schema.ResourceData, meta interface{}) error {
diff --git a/patches/0030-Optimize-startup-performance.patch b/patches/0030-Optimize-startup-performance.patch
index 1b199abebf6..92523030f4a 100644
--- a/patches/0030-Optimize-startup-performance.patch
+++ b/patches/0030-Optimize-startup-performance.patch
@@ -28,10 +28,10 @@ index 92763850ac..ef67582664 100644
// Ensure that the schema look OK.
diff --git a/internal/provider/provider_tagcheck.go b/internal/provider/provider_tagcheck.go
new file mode 100644
-index 0000000000..35202ebd58
+index 0000000000..8cea6059ba
--- /dev/null
+++ b/internal/provider/provider_tagcheck.go
-@@ -0,0 +1,28 @@
+@@ -0,0 +1,37 @@
+package provider
+
+import (
@@ -52,9 +52,18 @@ index 0000000000..35202ebd58
+ switch flag := flag.(type) {
+ case bool:
+ if flag {
++ //lintignore:S013
+ return map[string]*schema.Schema{
-+ names.AttrTags: &schema.Schema{Computed: tagsComputed},
-+ names.AttrTagsAll: &schema.Schema{Computed: true},
++ names.AttrTags: {
++ Type: schema.TypeMap,
++ Computed: tagsComputed,
++ Elem: &schema.Schema{Type: schema.TypeString},
++ },
++ names.AttrTagsAll: {
++ Type: schema.TypeMap,
++ Computed: true,
++ Elem: &schema.Schema{Type: schema.TypeString},
++ },
+ }
+ }
+ }
diff --git a/patches/0034-Fail-fast-when-PF-resources-are-dropped.patch b/patches/0034-Fail-fast-when-PF-resources-are-dropped.patch
index 3d18e814a65..649566006d0 100644
--- a/patches/0034-Fail-fast-when-PF-resources-are-dropped.patch
+++ b/patches/0034-Fail-fast-when-PF-resources-are-dropped.patch
@@ -5,16 +5,17 @@ Subject: [PATCH] Fail fast when PF resources are dropped
diff --git a/internal/provider/fwprovider/provider.go b/internal/provider/fwprovider/provider.go
-index 257f831fbb..2d28d90310 100644
+index 257f831fbb..d9930aee64 100644
--- a/internal/provider/fwprovider/provider.go
+++ b/internal/provider/fwprovider/provider.go
-@@ -448,9 +448,7 @@ func (p *fwprovider) Resources(ctx context.Context) []func() resource.Resource {
+@@ -448,9 +448,8 @@ func (p *fwprovider) Resources(ctx context.Context) []func() resource.Resource {
}
if err := errors.Join(errs...); err != nil {
- tflog.Warn(ctx, "registering resources", map[string]interface{}{
- "error": err.Error(),
- })
++ //lintignore:R009
+ panic(err)
}
diff --git a/patches/0050-Normalize-retentionDays-in-aws_controltower_landing_.patch b/patches/0050-Normalize-retentionDays-in-aws_controltower_landing_.patch
index 23e2d54d6aa..6e89198d09e 100644
--- a/patches/0050-Normalize-retentionDays-in-aws_controltower_landing_.patch
+++ b/patches/0050-Normalize-retentionDays-in-aws_controltower_landing_.patch
@@ -134,7 +134,7 @@ index c2f2830b9c..299e7653c1 100644
+}
diff --git a/internal/service/controltower/landing_zone_internals_test.go b/internal/service/controltower/landing_zone_internals_test.go
new file mode 100644
-index 0000000000..a8bb57939e
+index 0000000000..7c97e09ce2
--- /dev/null
+++ b/internal/service/controltower/landing_zone_internals_test.go
@@ -0,0 +1,50 @@
@@ -151,7 +151,7 @@ index 0000000000..a8bb57939e
+ actual, err := resourceLandingZoneNormalizeManifest(`
+ {
+ "governedRegions": [
-+ "ap-southeast-2"
++ "REGION"
+ ],
+ "organizationStructure": {
+ "security": {
@@ -164,7 +164,7 @@ index 0000000000..a8bb57939e
+ "accessLoggingBucket": {
+ "retentionDays": "3650"
+ },
-+ "kmsKeyArn": "arn:aws:kms:ap-southeast-2:89XXXXXXXX25:key/10e27ec4-5555-4444-b408-777777777777",
++ "kmsKeyArn": "arn:PARTITION:kms:REGION:89XXXXXXXX25:key/10e27ec4-5555-4444-b408-777777777777",
+ "loggingBucket": {
+ "retentionDays": "365"
+ }
@@ -181,7 +181,7 @@ index 0000000000..a8bb57939e
+ if err != nil {
+ t.Error(err)
+ }
-+ expected := `{"accessManagement":{"enabled":true},"centralizedLogging":{"accountId":"89XXXXXXXX39","configurations":{"accessLoggingBucket":{"retentionDays":3650},"kmsKeyArn":"arn:aws:kms:ap-southeast-2:89XXXXXXXX25:key/10e27ec4-5555-4444-b408-777777777777","loggingBucket":{"retentionDays":365}},"enabled":true},"governedRegions":["ap-southeast-2"],"organizationStructure":{"security":{"name":"Security"}},"securityRoles":{"accountId":"89XXXXXXXX42"}}`
++ expected := `{"accessManagement":{"enabled":true},"centralizedLogging":{"accountId":"89XXXXXXXX39","configurations":{"accessLoggingBucket":{"retentionDays":3650},"kmsKeyArn":"arn:PARTITION:kms:REGION:89XXXXXXXX25:key/10e27ec4-5555-4444-b408-777777777777","loggingBucket":{"retentionDays":365}},"enabled":true},"governedRegions":["REGION"],"organizationStructure":{"security":{"name":"Security"}},"securityRoles":{"accountId":"89XXXXXXXX42"}}`
+ if expected != actual {
+ t.Logf("Expected: %s", expected)
+ t.Logf("Actual: %s", actual)
diff --git a/provider/cmd/pulumi-resource-aws/bridge-metadata.json b/provider/cmd/pulumi-resource-aws/bridge-metadata.json
index c4e4c8c35e1..e15cf3e2fc8 100644
--- a/provider/cmd/pulumi-resource-aws/bridge-metadata.json
+++ b/provider/cmd/pulumi-resource-aws/bridge-metadata.json
@@ -4011,7 +4011,21 @@
"elem": {
"fields": {
"prompt_configurations": {
- "maxItemsOne": false
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "inference_configuration": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "stop_sequences": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ }
+ }
+ }
}
}
}
@@ -221408,7 +221422,55 @@
"elem": {
"fields": {
"pod_properties": {
- "maxItemsOne": false
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "containers": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "args": {
+ "maxItemsOne": false
+ },
+ "command": {
+ "maxItemsOne": false
+ },
+ "env": {
+ "maxItemsOne": false
+ },
+ "resources": {
+ "maxItemsOne": false
+ },
+ "security_context": {
+ "maxItemsOne": false
+ },
+ "volume_mounts": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ },
+ "metadata": {
+ "maxItemsOne": false
+ },
+ "volumes": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "empty_dir": {
+ "maxItemsOne": false
+ },
+ "host_path": {
+ "maxItemsOne": false
+ },
+ "secret": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ }
+ }
+ }
}
}
}
@@ -221418,7 +221480,105 @@
"elem": {
"fields": {
"node_range_properties": {
- "maxItemsOne": false
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "container": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "command": {
+ "maxItemsOne": false
+ },
+ "environment": {
+ "maxItemsOne": false
+ },
+ "ephemeral_storage": {
+ "maxItemsOne": false
+ },
+ "fargate_platform_configuration": {
+ "maxItemsOne": false
+ },
+ "linux_parameters": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "devices": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "permissions": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ },
+ "tmpfs": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "mount_options": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "log_configuration": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "secret_options": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ },
+ "mount_points": {
+ "maxItemsOne": false
+ },
+ "network_configuration": {
+ "maxItemsOne": false
+ },
+ "resource_requirements": {
+ "maxItemsOne": false
+ },
+ "runtime_platform": {
+ "maxItemsOne": false
+ },
+ "secrets": {
+ "maxItemsOne": false
+ },
+ "ulimits": {
+ "maxItemsOne": false
+ },
+ "volumes": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "efs_volume_configuration": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "authorization_config": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ },
+ "host": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
}
}
}
@@ -230106,13 +230266,44 @@
"maxItemsOne": false
},
"monthly_settings": {
- "maxItemsOne": false
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "hand_off_time": {
+ "maxItemsOne": false
+ }
+ }
+ }
},
"shift_coverages": {
- "maxItemsOne": false
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "coverage_times": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "end": {
+ "maxItemsOne": false
+ },
+ "start": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ }
+ }
+ }
},
"weekly_settings": {
- "maxItemsOne": false
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "hand_off_time": {
+ "maxItemsOne": false
+ }
+ }
+ }
}
}
}
diff --git a/provider/cmd/pulumi-resource-aws/schema.json b/provider/cmd/pulumi-resource-aws/schema.json
index 05be7c5c942..b4e3bf40598 100644
--- a/provider/cmd/pulumi-resource-aws/schema.json
+++ b/provider/cmd/pulumi-resource-aws/schema.json
@@ -19359,7 +19359,7 @@
"podProperties": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:batch/getJobDefinitionEksPropertyPodProperty:getJobDefinitionEksPropertyPodProperty"
},
"description": "The properties for the Kubernetes pod resources of a job.\n"
}
@@ -19374,6 +19374,367 @@
}
}
},
+ "aws:batch/getJobDefinitionEksPropertyPodProperty:getJobDefinitionEksPropertyPodProperty": {
+ "properties": {
+ "containers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionEksPropertyPodPropertyContainer:getJobDefinitionEksPropertyPodPropertyContainer"
+ },
+ "description": "The properties of the container that's used on the Amazon EKS pod. Array of EksContainer objects.\n"
+ },
+ "dnsPolicy": {
+ "type": "string",
+ "description": "The DNS policy for the pod. The default value is ClusterFirst. If the hostNetwork parameter is not specified, the default is ClusterFirstWithHostNet. ClusterFirst indicates that any DNS query that does not match the configured cluster domain suffix is forwarded to the upstream nameserver inherited from the node.\n"
+ },
+ "hostNetwork": {
+ "type": "boolean",
+ "description": "Indicates if the pod uses the hosts' network IP address. The default value is true. Setting this to false enables the Kubernetes pod networking model. Most AWS Batch workloads are egress-only and don't require the overhead of IP allocation for each pod for incoming connections.\n"
+ },
+ "metadatas": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionEksPropertyPodPropertyMetadata:getJobDefinitionEksPropertyPodPropertyMetadata"
+ },
+ "description": "Metadata about the Kubernetes pod.\n"
+ },
+ "serviceAccountName": {
+ "type": "boolean",
+ "description": "The name of the service account that's used to run the pod.\n"
+ },
+ "volumes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionEksPropertyPodPropertyVolume:getJobDefinitionEksPropertyPodPropertyVolume"
+ },
+ "description": "A list of data volumes used in a job.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "containers",
+ "dnsPolicy",
+ "hostNetwork",
+ "metadatas",
+ "serviceAccountName",
+ "volumes"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionEksPropertyPodPropertyContainer:getJobDefinitionEksPropertyPodPropertyContainer": {
+ "properties": {
+ "args": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "An array of arguments to the entrypoint\n"
+ },
+ "commands": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The command that's passed to the container.\n"
+ },
+ "envs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionEksPropertyPodPropertyContainerEnv:getJobDefinitionEksPropertyPodPropertyContainerEnv"
+ },
+ "description": "The environment variables to pass to a container. Array of EksContainerEnvironmentVariable objects.\n"
+ },
+ "image": {
+ "type": "string",
+ "description": "The image used to start a container.\n"
+ },
+ "imagePullPolicy": {
+ "type": "string",
+ "description": "The image pull policy for the container.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).\n"
+ },
+ "resources": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionEksPropertyPodPropertyContainerResource:getJobDefinitionEksPropertyPodPropertyContainerResource"
+ },
+ "description": "The type and amount of resources to assign to a container.\n"
+ },
+ "securityContexts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionEksPropertyPodPropertyContainerSecurityContext:getJobDefinitionEksPropertyPodPropertyContainerSecurityContext"
+ },
+ "description": "The security context for a job.\n"
+ },
+ "volumeMounts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionEksPropertyPodPropertyContainerVolumeMount:getJobDefinitionEksPropertyPodPropertyContainerVolumeMount"
+ },
+ "description": "The volume mounts for the container.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "args",
+ "commands",
+ "envs",
+ "image",
+ "imagePullPolicy",
+ "name",
+ "resources",
+ "securityContexts",
+ "volumeMounts"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionEksPropertyPodPropertyContainerEnv:getJobDefinitionEksPropertyPodPropertyContainerEnv": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).\n"
+ },
+ "value": {
+ "type": "string",
+ "description": "The quantity of the specified resource to reserve for the container.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "value"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionEksPropertyPodPropertyContainerResource:getJobDefinitionEksPropertyPodPropertyContainerResource": {
+ "properties": {
+ "limits": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "pulumi.json#/Any"
+ },
+ "description": "The type and quantity of the resources to reserve for the container.\n"
+ },
+ "requests": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "pulumi.json#/Any"
+ },
+ "description": "The type and quantity of the resources to request for the container.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "limits",
+ "requests"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionEksPropertyPodPropertyContainerSecurityContext:getJobDefinitionEksPropertyPodPropertyContainerSecurityContext": {
+ "properties": {
+ "privileged": {
+ "type": "boolean",
+ "description": "When this parameter is true, the container is given elevated permissions on the host container instance (similar to the root user).\n"
+ },
+ "readOnlyRootFileSystem": {
+ "type": "boolean"
+ },
+ "runAsGroup": {
+ "type": "integer",
+ "description": "When this parameter is specified, the container is run as the specified group ID (gid). If this parameter isn't specified, the default is the group that's specified in the image metadata.\n"
+ },
+ "runAsNonRoot": {
+ "type": "boolean",
+ "description": "When this parameter is specified, the container is run as a user with a uid other than 0. If this parameter isn't specified, so such rule is enforced.\n"
+ },
+ "runAsUser": {
+ "type": "integer",
+ "description": "When this parameter is specified, the container is run as the specified user ID (uid). If this parameter isn't specified, the default is the user that's specified in the image metadata.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "privileged",
+ "readOnlyRootFileSystem",
+ "runAsGroup",
+ "runAsNonRoot",
+ "runAsUser"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionEksPropertyPodPropertyContainerVolumeMount:getJobDefinitionEksPropertyPodPropertyContainerVolumeMount": {
+ "properties": {
+ "mountPath": {
+ "type": "string",
+ "description": "The path on the container where the volume is mounted.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).\n"
+ },
+ "readOnly": {
+ "type": "boolean",
+ "description": "If this value is true, the container has read-only access to the volume.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "mountPath",
+ "name",
+ "readOnly"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionEksPropertyPodPropertyMetadata:getJobDefinitionEksPropertyPodPropertyMetadata": {
+ "properties": {
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "pulumi.json#/Any"
+ },
+ "description": "Key-value pairs used to identify, sort, and organize cube resources.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "labels"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionEksPropertyPodPropertyVolume:getJobDefinitionEksPropertyPodPropertyVolume": {
+ "properties": {
+ "emptyDirs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionEksPropertyPodPropertyVolumeEmptyDir:getJobDefinitionEksPropertyPodPropertyVolumeEmptyDir"
+ },
+ "description": "Specifies the configuration of a Kubernetes emptyDir volume.\n"
+ },
+ "hostPaths": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionEksPropertyPodPropertyVolumeHostPath:getJobDefinitionEksPropertyPodPropertyVolumeHostPath"
+ },
+ "description": "The path for the device on the host container instance.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).\n"
+ },
+ "secrets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionEksPropertyPodPropertyVolumeSecret:getJobDefinitionEksPropertyPodPropertyVolumeSecret"
+ },
+ "description": "Specifies the configuration of a Kubernetes secret volume.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "emptyDirs",
+ "hostPaths",
+ "name",
+ "secrets"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionEksPropertyPodPropertyVolumeEmptyDir:getJobDefinitionEksPropertyPodPropertyVolumeEmptyDir": {
+ "properties": {
+ "medium": {
+ "type": "string",
+ "description": "The medium to store the volume.\n"
+ },
+ "sizeLimit": {
+ "type": "string",
+ "description": "The maximum size of the volume. By default, there's no maximum size defined.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "medium",
+ "sizeLimit"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionEksPropertyPodPropertyVolumeHostPath:getJobDefinitionEksPropertyPodPropertyVolumeHostPath": {
+ "properties": {
+ "path": {
+ "type": "string",
+ "description": "The path of the file or directory on the host to mount into containers on the pod.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "path"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionEksPropertyPodPropertyVolumeSecret:getJobDefinitionEksPropertyPodPropertyVolumeSecret": {
+ "properties": {
+ "optional": {
+ "type": "boolean",
+ "description": "Specifies whether the secret or the secret's keys must be defined.\n"
+ },
+ "secretName": {
+ "type": "string",
+ "description": "The name of the secret. The name must be allowed as a DNS subdomain name\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "optional",
+ "secretName"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"aws:batch/getJobDefinitionNodeProperty:getJobDefinitionNodeProperty": {
"properties": {
"mainNode": {
@@ -19383,7 +19744,7 @@
"nodeRangeProperties": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangeProperty:getJobDefinitionNodePropertyNodeRangeProperty"
},
"description": "A list of node ranges and their properties that are associated with a multi-node parallel job.\n"
},
@@ -19404,6 +19765,649 @@
}
}
},
+ "aws:batch/getJobDefinitionNodePropertyNodeRangeProperty:getJobDefinitionNodePropertyNodeRangeProperty": {
+ "properties": {
+ "containers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainer:getJobDefinitionNodePropertyNodeRangePropertyContainer"
+ },
+ "description": "The container details for the node range.\n"
+ },
+ "targetNodes": {
+ "type": "string",
+ "description": "The range of nodes, using node index values. A range of 0:3 indicates nodes with index values of 0 through 3. I\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "containers",
+ "targetNodes"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainer:getJobDefinitionNodePropertyNodeRangePropertyContainer": {
+ "properties": {
+ "commands": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The command that's passed to the container.\n"
+ },
+ "environments": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerEnvironment:getJobDefinitionNodePropertyNodeRangePropertyContainerEnvironment"
+ },
+ "description": "The environment variables to pass to a container.\n"
+ },
+ "ephemeralStorages": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerEphemeralStorage:getJobDefinitionNodePropertyNodeRangePropertyContainerEphemeralStorage"
+ },
+ "description": "The amount of ephemeral storage to allocate for the task. This parameter is used to expand the total amount of ephemeral storage available, beyond the default amount, for tasks hosted on AWS Fargate.\n"
+ },
+ "executionRoleArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the execution role that AWS Batch can assume. For jobs that run on Fargate resources, you must provide an execution role.\n"
+ },
+ "fargatePlatformConfigurations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerFargatePlatformConfiguration:getJobDefinitionNodePropertyNodeRangePropertyContainerFargatePlatformConfiguration"
+ },
+ "description": "The platform configuration for jobs that are running on Fargate resources. Jobs that are running on EC2 resources must not specify this parameter.\n"
+ },
+ "image": {
+ "type": "string",
+ "description": "The image used to start a container.\n"
+ },
+ "instanceType": {
+ "type": "string",
+ "description": "The instance type to use for a multi-node parallel job.\n"
+ },
+ "jobRoleArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the IAM role that the container can assume for AWS permissions.\n"
+ },
+ "linuxParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerLinuxParameter:getJobDefinitionNodePropertyNodeRangePropertyContainerLinuxParameter"
+ },
+ "description": "Linux-specific modifications that are applied to the container.\n"
+ },
+ "logConfigurations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerLogConfiguration:getJobDefinitionNodePropertyNodeRangePropertyContainerLogConfiguration"
+ },
+ "description": "The log configuration specification for the container.\n"
+ },
+ "mountPoints": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerMountPoint:getJobDefinitionNodePropertyNodeRangePropertyContainerMountPoint"
+ },
+ "description": "The mount points for data volumes in your container.\n"
+ },
+ "networkConfigurations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerNetworkConfiguration:getJobDefinitionNodePropertyNodeRangePropertyContainerNetworkConfiguration"
+ },
+ "description": "The network configuration for jobs that are running on Fargate resources.\n"
+ },
+ "privileged": {
+ "type": "boolean",
+ "description": "When this parameter is true, the container is given elevated permissions on the host container instance (similar to the root user).\n"
+ },
+ "readonlyRootFilesystem": {
+ "type": "boolean",
+ "description": "When this parameter is true, the container is given read-only access to its root file system.\n"
+ },
+ "resourceRequirements": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerResourceRequirement:getJobDefinitionNodePropertyNodeRangePropertyContainerResourceRequirement"
+ },
+ "description": "The type and amount of resources to assign to a container.\n"
+ },
+ "runtimePlatforms": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerRuntimePlatform:getJobDefinitionNodePropertyNodeRangePropertyContainerRuntimePlatform"
+ },
+ "description": "An object that represents the compute environment architecture for AWS Batch jobs on Fargate.\n"
+ },
+ "secrets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerSecret:getJobDefinitionNodePropertyNodeRangePropertyContainerSecret"
+ },
+ "description": "The secrets for the container.\n"
+ },
+ "ulimits": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerUlimit:getJobDefinitionNodePropertyNodeRangePropertyContainerUlimit"
+ },
+ "description": "A list of ulimits to set in the container.\n"
+ },
+ "user": {
+ "type": "string",
+ "description": "The user name to use inside the container.\n"
+ },
+ "volumes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerVolume:getJobDefinitionNodePropertyNodeRangePropertyContainerVolume"
+ },
+ "description": "A list of data volumes used in a job.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "commands",
+ "environments",
+ "ephemeralStorages",
+ "executionRoleArn",
+ "fargatePlatformConfigurations",
+ "image",
+ "instanceType",
+ "jobRoleArn",
+ "linuxParameters",
+ "logConfigurations",
+ "mountPoints",
+ "networkConfigurations",
+ "privileged",
+ "readonlyRootFilesystem",
+ "resourceRequirements",
+ "runtimePlatforms",
+ "secrets",
+ "ulimits",
+ "user",
+ "volumes"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerEnvironment:getJobDefinitionNodePropertyNodeRangePropertyContainerEnvironment": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).\n"
+ },
+ "value": {
+ "type": "string",
+ "description": "The quantity of the specified resource to reserve for the container.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "value"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerEphemeralStorage:getJobDefinitionNodePropertyNodeRangePropertyContainerEphemeralStorage": {
+ "properties": {
+ "sizeInGib": {
+ "type": "integer"
+ }
+ },
+ "type": "object",
+ "required": [
+ "sizeInGib"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerFargatePlatformConfiguration:getJobDefinitionNodePropertyNodeRangePropertyContainerFargatePlatformConfiguration": {
+ "properties": {
+ "platformVersion": {
+ "type": "string",
+ "description": "The AWS Fargate platform version where the jobs are running. A platform version is specified only for jobs that are running on Fargate resources.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "platformVersion"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerLinuxParameter:getJobDefinitionNodePropertyNodeRangePropertyContainerLinuxParameter": {
+ "properties": {
+ "devices": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerLinuxParameterDevice:getJobDefinitionNodePropertyNodeRangePropertyContainerLinuxParameterDevice"
+ },
+ "description": "Any of the host devices to expose to the container.\n"
+ },
+ "initProcessEnabled": {
+ "type": "boolean",
+ "description": "If true, run an init process inside the container that forwards signals and reaps processes.\n"
+ },
+ "maxSwap": {
+ "type": "integer",
+ "description": "The total amount of swap memory (in MiB) a container can use.\n"
+ },
+ "sharedMemorySize": {
+ "type": "integer",
+ "description": "The value for the size (in MiB) of the `/dev/shm` volume.\n"
+ },
+ "swappiness": {
+ "type": "integer",
+ "description": "You can use this parameter to tune a container's memory swappiness behavior.\n"
+ },
+ "tmpfs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerLinuxParameterTmpf:getJobDefinitionNodePropertyNodeRangePropertyContainerLinuxParameterTmpf"
+ },
+ "description": "The container path, mount options, and size (in MiB) of the tmpfs mount.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "devices",
+ "initProcessEnabled",
+ "maxSwap",
+ "sharedMemorySize",
+ "swappiness",
+ "tmpfs"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerLinuxParameterDevice:getJobDefinitionNodePropertyNodeRangePropertyContainerLinuxParameterDevice": {
+ "properties": {
+ "containerPath": {
+ "type": "string",
+ "description": "The absolute file path in the container where the tmpfs volume is mounted.\n"
+ },
+ "hostPath": {
+ "type": "string",
+ "description": "The path for the device on the host container instance.\n"
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The explicit permissions to provide to the container for the device.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "containerPath",
+ "hostPath",
+ "permissions"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerLinuxParameterTmpf:getJobDefinitionNodePropertyNodeRangePropertyContainerLinuxParameterTmpf": {
+ "properties": {
+ "containerPath": {
+ "type": "string",
+ "description": "The absolute file path in the container where the tmpfs volume is mounted.\n"
+ },
+ "mountOptions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The list of tmpfs volume mount options.\n"
+ },
+ "size": {
+ "type": "integer",
+ "description": "The size (in MiB) of the tmpfs volume.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "containerPath",
+ "mountOptions",
+ "size"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerLogConfiguration:getJobDefinitionNodePropertyNodeRangePropertyContainerLogConfiguration": {
+ "properties": {
+ "logDriver": {
+ "type": "string",
+ "description": "The log driver to use for the container.\n"
+ },
+ "options": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "pulumi.json#/Any"
+ },
+ "description": "The configuration options to send to the log driver.\n"
+ },
+ "secretOptions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerLogConfigurationSecretOption:getJobDefinitionNodePropertyNodeRangePropertyContainerLogConfigurationSecretOption"
+ },
+ "description": "The secrets to pass to the log configuration.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "logDriver",
+ "options",
+ "secretOptions"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerLogConfigurationSecretOption:getJobDefinitionNodePropertyNodeRangePropertyContainerLogConfigurationSecretOption": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).\n"
+ },
+ "valueFrom": {
+ "type": "string",
+ "description": "The secret to expose to the container. The supported values are either the full Amazon Resource Name (ARN) of the AWS Secrets Manager secret or the full ARN of the parameter in the AWS Systems Manager Parameter Store.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "valueFrom"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerMountPoint:getJobDefinitionNodePropertyNodeRangePropertyContainerMountPoint": {
+ "properties": {
+ "containerPath": {
+ "type": "string",
+ "description": "The absolute file path in the container where the tmpfs volume is mounted.\n"
+ },
+ "readOnly": {
+ "type": "boolean",
+ "description": "If this value is true, the container has read-only access to the volume.\n"
+ },
+ "sourceVolume": {
+ "type": "string",
+ "description": "The name of the volume to mount.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "containerPath",
+ "readOnly",
+ "sourceVolume"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerNetworkConfiguration:getJobDefinitionNodePropertyNodeRangePropertyContainerNetworkConfiguration": {
+ "properties": {
+ "assignPublicIp": {
+ "type": "boolean",
+ "description": "Indicates whether the job has a public IP address.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "assignPublicIp"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerResourceRequirement:getJobDefinitionNodePropertyNodeRangePropertyContainerResourceRequirement": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "description": "The type of resource to assign to a container. The supported resources include `GPU`, `MEMORY`, and `VCPU`.\n"
+ },
+ "value": {
+ "type": "string",
+ "description": "The quantity of the specified resource to reserve for the container.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "type",
+ "value"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerRuntimePlatform:getJobDefinitionNodePropertyNodeRangePropertyContainerRuntimePlatform": {
+ "properties": {
+ "cpuArchitecture": {
+ "type": "string",
+ "description": "The vCPU architecture. The default value is X86_64. Valid values are X86_64 and ARM64.\n"
+ },
+ "operatingSystemFamily": {
+ "type": "string",
+ "description": "The operating system for the compute environment. V\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "cpuArchitecture",
+ "operatingSystemFamily"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerSecret:getJobDefinitionNodePropertyNodeRangePropertyContainerSecret": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).\n"
+ },
+ "valueFrom": {
+ "type": "string",
+ "description": "The secret to expose to the container. The supported values are either the full Amazon Resource Name (ARN) of the AWS Secrets Manager secret or the full ARN of the parameter in the AWS Systems Manager Parameter Store.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "valueFrom"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerUlimit:getJobDefinitionNodePropertyNodeRangePropertyContainerUlimit": {
+ "properties": {
+ "hardLimit": {
+ "type": "integer",
+ "description": "The hard limit for the ulimit type.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).\n"
+ },
+ "softLimit": {
+ "type": "integer",
+ "description": "The soft limit for the ulimit type.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "hardLimit",
+ "name",
+ "softLimit"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerVolume:getJobDefinitionNodePropertyNodeRangePropertyContainerVolume": {
+ "properties": {
+ "efsVolumeConfigurations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerVolumeEfsVolumeConfiguration:getJobDefinitionNodePropertyNodeRangePropertyContainerVolumeEfsVolumeConfiguration"
+ },
+ "description": "This parameter is specified when you're using an Amazon Elastic File System file system for job storage.\n"
+ },
+ "hosts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerVolumeHost:getJobDefinitionNodePropertyNodeRangePropertyContainerVolumeHost"
+ },
+ "description": "The contents of the host parameter determine whether your data volume persists on the host container instance and where it's stored.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "efsVolumeConfigurations",
+ "hosts",
+ "name"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerVolumeEfsVolumeConfiguration:getJobDefinitionNodePropertyNodeRangePropertyContainerVolumeEfsVolumeConfiguration": {
+ "properties": {
+ "authorizationConfigs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerVolumeEfsVolumeConfigurationAuthorizationConfig:getJobDefinitionNodePropertyNodeRangePropertyContainerVolumeEfsVolumeConfigurationAuthorizationConfig"
+ },
+ "description": "The authorization configuration details for the Amazon EFS file system.\n"
+ },
+ "fileSystemId": {
+ "type": "string",
+ "description": "The Amazon EFS file system ID to use.\n"
+ },
+ "rootDirectory": {
+ "type": "string",
+ "description": "The directory within the Amazon EFS file system to mount as the root directory inside the host.\n"
+ },
+ "transitEncryption": {
+ "type": "string",
+ "description": "Determines whether to enable encryption for Amazon EFS data in transit between the Amazon ECS host and the Amazon EFS server\n"
+ },
+ "transitEncryptionPort": {
+ "type": "integer",
+ "description": "The port to use when sending encrypted data between the Amazon ECS host and the Amazon EFS server.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "authorizationConfigs",
+ "fileSystemId",
+ "rootDirectory",
+ "transitEncryption",
+ "transitEncryptionPort"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerVolumeEfsVolumeConfigurationAuthorizationConfig:getJobDefinitionNodePropertyNodeRangePropertyContainerVolumeEfsVolumeConfigurationAuthorizationConfig": {
+ "properties": {
+ "accessPointId": {
+ "type": "string",
+ "description": "The Amazon EFS access point ID to use.\n"
+ },
+ "iam": {
+ "type": "string",
+ "description": "Whether or not to use the AWS Batch job IAM role defined in a job definition when mounting the Amazon EFS file system.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "accessPointId",
+ "iam"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:batch/getJobDefinitionNodePropertyNodeRangePropertyContainerVolumeHost:getJobDefinitionNodePropertyNodeRangePropertyContainerVolumeHost": {
+ "properties": {
+ "sourcePath": {
+ "type": "string",
+ "description": "The path on the host container instance that's presented to the container.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "sourcePath"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"aws:batch/getJobDefinitionRetryStrategy:getJobDefinitionRetryStrategy": {
"properties": {
"attempts": {
@@ -19413,7 +20417,7 @@
"evaluateOnExits": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:batch/getJobDefinitionRetryStrategyEvaluateOnExit:getJobDefinitionRetryStrategyEvaluateOnExit"
},
"description": "Array of up to 5 objects that specify the conditions where jobs are retried or failed.\n"
}
@@ -19429,6 +20433,38 @@
}
}
},
+ "aws:batch/getJobDefinitionRetryStrategyEvaluateOnExit:getJobDefinitionRetryStrategyEvaluateOnExit": {
+ "properties": {
+ "action": {
+ "type": "string",
+ "description": "Specifies the action to take if all of the specified conditions (onStatusReason, onReason, and onExitCode) are met. The values aren't case sensitive.\n"
+ },
+ "onExitCode": {
+ "type": "string",
+ "description": "Contains a glob pattern to match against the decimal representation of the ExitCode returned for a job.\n"
+ },
+ "onReason": {
+ "type": "string",
+ "description": "Contains a glob pattern to match against the Reason returned for a job.\n"
+ },
+ "onStatusReason": {
+ "type": "string",
+ "description": "Contains a glob pattern to match against the StatusReason returned for a job.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "action",
+ "onExitCode",
+ "onReason",
+ "onStatusReason"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"aws:batch/getJobDefinitionTimeout:getJobDefinitionTimeout": {
"properties": {
"attemptDurationSeconds": {
@@ -19754,7 +20790,7 @@
"promptConfigurations": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:bedrock/AgentAgentPromptOverrideConfigurationPromptConfiguration:AgentAgentPromptOverrideConfigurationPromptConfiguration"
},
"description": "Configurations to override a prompt template in one part of an agent sequence. See `prompt_configurations` block for details.\n"
}
@@ -19765,6 +20801,81 @@
"promptConfigurations"
]
},
+ "aws:bedrock/AgentAgentPromptOverrideConfigurationPromptConfiguration:AgentAgentPromptOverrideConfigurationPromptConfiguration": {
+ "properties": {
+ "basePromptTemplate": {
+ "type": "string",
+ "description": "prompt template with which to replace the default prompt template. You can use placeholder variables in the base prompt template to customize the prompt. For more information, see [Prompt template placeholder variables](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-placeholders.html).\n"
+ },
+ "inferenceConfigurations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:bedrock/AgentAgentPromptOverrideConfigurationPromptConfigurationInferenceConfiguration:AgentAgentPromptOverrideConfigurationPromptConfigurationInferenceConfiguration"
+ },
+ "description": "Inference parameters to use when the agent invokes a foundation model in the part of the agent sequence defined by the `prompt_type`. For more information, see [Inference parameters for foundation models](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html). See `inference_configuration` block for details.\n"
+ },
+ "parserMode": {
+ "type": "string",
+ "description": "Whether to override the default parser Lambda function when parsing the raw foundation model output in the part of the agent sequence defined by the `prompt_type`. If you set the argument as `OVERRIDDEN`, the `override_lambda` argument in the `prompt_override_configuration` block must be specified with the ARN of a Lambda function. Valid values: `DEFAULT`, `OVERRIDDEN`.\n"
+ },
+ "promptCreationMode": {
+ "type": "string",
+ "description": "Whether to override the default prompt template for this `prompt_type`. Set this argument to `OVERRIDDEN` to use the prompt that you provide in the `base_prompt_template`. If you leave it as `DEFAULT`, the agent uses a default prompt template. Valid values: `DEFAULT`, `OVERRIDDEN`.\n"
+ },
+ "promptState": {
+ "type": "string",
+ "description": "Whether to allow the agent to carry out the step specified in the `prompt_type`. If you set this argument to `DISABLED`, the agent skips that step. Valid Values: `ENABLED`, `DISABLED`.\n"
+ },
+ "promptType": {
+ "type": "string",
+ "description": "Step in the agent sequence that this prompt configuration applies to. Valid values: `PRE_PROCESSING`, `ORCHESTRATION`, `POST_PROCESSING`, `KNOWLEDGE_BASE_RESPONSE_GENERATION`.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "basePromptTemplate",
+ "inferenceConfigurations",
+ "parserMode",
+ "promptCreationMode",
+ "promptState",
+ "promptType"
+ ]
+ },
+ "aws:bedrock/AgentAgentPromptOverrideConfigurationPromptConfigurationInferenceConfiguration:AgentAgentPromptOverrideConfigurationPromptConfigurationInferenceConfiguration": {
+ "properties": {
+ "maxLength": {
+ "type": "integer",
+ "description": "Maximum number of tokens to allow in the generated response.\n"
+ },
+ "stopSequences": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "List of stop sequences. A stop sequence is a sequence of characters that causes the model to stop generating the response.\n"
+ },
+ "temperature": {
+ "type": "number",
+ "description": "Likelihood of the model selecting higher-probability options while generating a response. A lower value makes the model more likely to choose higher-probability options, while a higher value makes the model more likely to choose lower-probability options.\n"
+ },
+ "topK": {
+ "type": "integer",
+ "description": "Number of top most-likely candidates, between 0 and 500, from which the model chooses the next token in the sequence.\n"
+ },
+ "topP": {
+ "type": "number",
+ "description": "Top percentage of the probability distribution of next tokens, between 0 and 1 (denoting 0% and 100%), from which the model chooses the next token in the sequence.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "maxLength",
+ "stopSequences",
+ "temperature",
+ "topK",
+ "topP"
+ ]
+ },
"aws:bedrock/AgentAgentTimeouts:AgentAgentTimeouts": {
"properties": {
"create": {
@@ -20305,7 +21416,7 @@
"validators": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:bedrock/getCustomModelValidationDataConfigValidator:getCustomModelValidationDataConfigValidator"
},
"description": "Information about the validators.\n"
}
@@ -20320,6 +21431,23 @@
}
}
},
+ "aws:bedrock/getCustomModelValidationDataConfigValidator:getCustomModelValidationDataConfigValidator": {
+ "properties": {
+ "s3Uri": {
+ "type": "string",
+ "description": "The S3 URI where the validation data is stored..\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "s3Uri"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"aws:bedrock/getCustomModelValidationMetric:getCustomModelValidationMetric": {
"properties": {
"validationLoss": {
@@ -20369,21 +21497,21 @@
"customizationsSupporteds": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "type": "string"
},
"description": "Customizations that the model supports.\n"
},
"inferenceTypesSupporteds": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "type": "string"
},
"description": "Inference types that the model supports.\n"
},
"inputModalities": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "type": "string"
},
"description": "Input modalities that the model supports.\n"
},
@@ -20402,7 +21530,7 @@
"outputModalities": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "type": "string"
},
"description": "Output modalities that the model supports.\n"
},
@@ -27133,7 +28261,7 @@
"latestAggregatedProfiles": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:codeguruprofiler/getProfilingGroupProfilingStatusLatestAggregatedProfile:getProfilingGroupProfilingStatusLatestAggregatedProfile"
}
}
},
@@ -27149,6 +28277,26 @@
}
}
},
+ "aws:codeguruprofiler/getProfilingGroupProfilingStatusLatestAggregatedProfile:getProfilingGroupProfilingStatusLatestAggregatedProfile": {
+ "properties": {
+ "period": {
+ "type": "string"
+ },
+ "start": {
+ "type": "string"
+ }
+ },
+ "type": "object",
+ "required": [
+ "period",
+ "start"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"aws:codegurureviewer/RepositoryAssociationKmsKeyDetails:RepositoryAssociationKmsKeyDetails": {
"properties": {
"encryptionOption": {
@@ -67725,7 +68873,7 @@
"taggings": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:guardduty/MalwareProtectionPlanActionTagging:MalwareProtectionPlanActionTagging"
},
"description": "Indicates whether the scanned S3 object will have tags about the scan result. See `tagging` below.\n"
}
@@ -67735,6 +68883,18 @@
"taggings"
]
},
+ "aws:guardduty/MalwareProtectionPlanActionTagging:MalwareProtectionPlanActionTagging": {
+ "properties": {
+ "status": {
+ "type": "string",
+ "description": "Indicates whether or not the tags will added. Valid values are `DISABLED` and `ENABLED`. Defaults to `DISABLED`\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "status"
+ ]
+ },
"aws:guardduty/MalwareProtectionPlanProtectedResource:MalwareProtectionPlanProtectedResource": {
"properties": {
"s3Bucket": {
@@ -73413,7 +74573,7 @@
"externalIds": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:identitystore/getGroupsGroupExternalId:getGroupsGroupExternalId"
},
"description": "List of identifiers issued to this resource by an external identity provider.\n"
},
@@ -73440,6 +74600,28 @@
}
}
},
+ "aws:identitystore/getGroupsGroupExternalId:getGroupsGroupExternalId": {
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "Identifier issued to this resource by an external identity provider.\n"
+ },
+ "issuer": {
+ "type": "string",
+ "description": "Issuer for an external identifier.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "id",
+ "issuer"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"aws:identitystore/getUserAddress:getUserAddress": {
"properties": {
"country": {
@@ -103820,7 +105002,7 @@
"subSlots": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:lex/V2modelsSlotTypeCompositeSlotTypeSettingSubSlot:V2modelsSlotTypeCompositeSlotTypeSettingSubSlot"
},
"description": "Subslots in the composite slot. Contains filtered or unexported fields. See [`sub_slot_type_composition` argument reference] below.\n"
}
@@ -103830,6 +105012,22 @@
"subSlots"
]
},
+ "aws:lex/V2modelsSlotTypeCompositeSlotTypeSettingSubSlot:V2modelsSlotTypeCompositeSlotTypeSettingSubSlot": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the slot type\n\nThe following arguments are optional:\n"
+ },
+ "subSlotId": {
+ "type": "string"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "subSlotId"
+ ]
+ },
"aws:lex/V2modelsSlotTypeExternalSourceSetting:V2modelsSlotTypeExternalSourceSetting": {
"properties": {
"grammarSlotTypeSetting": {
@@ -103872,7 +105070,7 @@
"slotTypeValues": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:lex/V2modelsSlotTypeSlotTypeValuesSlotTypeValue:V2modelsSlotTypeSlotTypeValuesSlotTypeValue"
},
"description": "List of SlotTypeValue objects that defines the values that the slot type can take. Each value can have a list of synonyms, additional values that help train the machine learning model about the values that it resolves for a slot. See `slot_type_values` argument reference below.\n"
},
@@ -103889,6 +105087,17 @@
"slotTypeValues"
]
},
+ "aws:lex/V2modelsSlotTypeSlotTypeValuesSlotTypeValue:V2modelsSlotTypeSlotTypeValuesSlotTypeValue": {
+ "properties": {
+ "value": {
+ "type": "string"
+ }
+ },
+ "type": "object",
+ "required": [
+ "value"
+ ]
+ },
"aws:lex/V2modelsSlotTypeSlotTypeValuesSynonym:V2modelsSlotTypeSlotTypeValuesSynonym": {
"properties": {
"value": {
@@ -111042,7 +112251,7 @@
"vpcs": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:medialive/getInputDestinationVpc:getInputDestinationVpc"
}
}
},
@@ -111059,6 +112268,26 @@
}
}
},
+ "aws:medialive/getInputDestinationVpc:getInputDestinationVpc": {
+ "properties": {
+ "availabilityZone": {
+ "type": "string"
+ },
+ "networkInterfaceId": {
+ "type": "string"
+ }
+ },
+ "type": "object",
+ "required": [
+ "availabilityZone",
+ "networkInterfaceId"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"aws:medialive/getInputInputDevice:getInputInputDevice": {
"properties": {
"id": {
@@ -126236,7 +127465,7 @@
"properties": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:resourceexplorer/SearchResourceProperty:SearchResourceProperty"
},
"description": "Structure with additional type-specific details about the resource. See `properties` below.\n"
},
@@ -126291,6 +127520,33 @@
}
}
},
+ "aws:resourceexplorer/SearchResourceProperty:SearchResourceProperty": {
+ "properties": {
+ "data": {
+ "type": "string",
+ "description": "Details about this property. The content of this field is a JSON object that varies based on the resource type.\n"
+ },
+ "lastReportedAt": {
+ "type": "string",
+ "description": "The date and time that the information about this resource property was last updated.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Name of this property of the resource.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data",
+ "lastReportedAt",
+ "name"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"aws:resourceexplorer/ViewFilters:ViewFilters": {
"properties": {
"filterString": {
@@ -141733,13 +142989,13 @@
"dailySettings": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:ssm/getContactsRotationRecurrenceDailySetting:getContactsRotationRecurrenceDailySetting"
}
},
"monthlySettings": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:ssm/getContactsRotationRecurrenceMonthlySetting:getContactsRotationRecurrenceMonthlySetting"
}
},
"numberOfOnCalls": {
@@ -141751,13 +143007,13 @@
"shiftCoverages": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:ssm/getContactsRotationRecurrenceShiftCoverage:getContactsRotationRecurrenceShiftCoverage"
}
},
"weeklySettings": {
"type": "array",
"items": {
- "$ref": "pulumi.json#/Any"
+ "$ref": "#/types/aws:ssm/getContactsRotationRecurrenceWeeklySetting:getContactsRotationRecurrenceWeeklySetting"
}
}
},
@@ -141776,6 +143032,201 @@
}
}
},
+ "aws:ssm/getContactsRotationRecurrenceDailySetting:getContactsRotationRecurrenceDailySetting": {
+ "properties": {
+ "hourOfDay": {
+ "type": "integer"
+ },
+ "minuteOfHour": {
+ "type": "integer"
+ }
+ },
+ "type": "object",
+ "required": [
+ "hourOfDay",
+ "minuteOfHour"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:ssm/getContactsRotationRecurrenceMonthlySetting:getContactsRotationRecurrenceMonthlySetting": {
+ "properties": {
+ "dayOfMonth": {
+ "type": "integer"
+ },
+ "handOffTimes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:ssm/getContactsRotationRecurrenceMonthlySettingHandOffTime:getContactsRotationRecurrenceMonthlySettingHandOffTime"
+ }
+ }
+ },
+ "type": "object",
+ "required": [
+ "dayOfMonth",
+ "handOffTimes"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:ssm/getContactsRotationRecurrenceMonthlySettingHandOffTime:getContactsRotationRecurrenceMonthlySettingHandOffTime": {
+ "properties": {
+ "hourOfDay": {
+ "type": "integer"
+ },
+ "minuteOfHour": {
+ "type": "integer"
+ }
+ },
+ "type": "object",
+ "required": [
+ "hourOfDay",
+ "minuteOfHour"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:ssm/getContactsRotationRecurrenceShiftCoverage:getContactsRotationRecurrenceShiftCoverage": {
+ "properties": {
+ "coverageTimes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:ssm/getContactsRotationRecurrenceShiftCoverageCoverageTime:getContactsRotationRecurrenceShiftCoverageCoverageTime"
+ }
+ },
+ "mapBlockKey": {
+ "type": "string"
+ }
+ },
+ "type": "object",
+ "required": [
+ "coverageTimes",
+ "mapBlockKey"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:ssm/getContactsRotationRecurrenceShiftCoverageCoverageTime:getContactsRotationRecurrenceShiftCoverageCoverageTime": {
+ "properties": {
+ "ends": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:ssm/getContactsRotationRecurrenceShiftCoverageCoverageTimeEnd:getContactsRotationRecurrenceShiftCoverageCoverageTimeEnd"
+ }
+ },
+ "starts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:ssm/getContactsRotationRecurrenceShiftCoverageCoverageTimeStart:getContactsRotationRecurrenceShiftCoverageCoverageTimeStart"
+ }
+ }
+ },
+ "type": "object",
+ "required": [
+ "ends",
+ "starts"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:ssm/getContactsRotationRecurrenceShiftCoverageCoverageTimeEnd:getContactsRotationRecurrenceShiftCoverageCoverageTimeEnd": {
+ "properties": {
+ "hourOfDay": {
+ "type": "integer"
+ },
+ "minuteOfHour": {
+ "type": "integer"
+ }
+ },
+ "type": "object",
+ "required": [
+ "hourOfDay",
+ "minuteOfHour"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:ssm/getContactsRotationRecurrenceShiftCoverageCoverageTimeStart:getContactsRotationRecurrenceShiftCoverageCoverageTimeStart": {
+ "properties": {
+ "hourOfDay": {
+ "type": "integer"
+ },
+ "minuteOfHour": {
+ "type": "integer"
+ }
+ },
+ "type": "object",
+ "required": [
+ "hourOfDay",
+ "minuteOfHour"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:ssm/getContactsRotationRecurrenceWeeklySetting:getContactsRotationRecurrenceWeeklySetting": {
+ "properties": {
+ "dayOfWeek": {
+ "type": "string"
+ },
+ "handOffTimes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/aws:ssm/getContactsRotationRecurrenceWeeklySettingHandOffTime:getContactsRotationRecurrenceWeeklySettingHandOffTime"
+ }
+ }
+ },
+ "type": "object",
+ "required": [
+ "dayOfWeek",
+ "handOffTimes"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "aws:ssm/getContactsRotationRecurrenceWeeklySettingHandOffTime:getContactsRotationRecurrenceWeeklySettingHandOffTime": {
+ "properties": {
+ "hourOfDay": {
+ "type": "integer"
+ },
+ "minuteOfHour": {
+ "type": "integer"
+ }
+ },
+ "type": "object",
+ "required": [
+ "hourOfDay",
+ "minuteOfHour"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"aws:ssm/getInstancesFilter:getInstancesFilter": {
"properties": {
"name": {
@@ -377588,8 +379039,7 @@
"description": "A collection of arguments for invoking getCredentials.\n",
"properties": {
"registryId": {
- "type": "string",
- "willReplaceOnChanges": true
+ "type": "string"
}
},
"type": "object",
diff --git a/provider/go.mod b/provider/go.mod
index d2662d70963..84a5ccd401d 100644
--- a/provider/go.mod
+++ b/provider/go.mod
@@ -1,6 +1,6 @@
module github.com/pulumi/pulumi-aws/provider/v6
-go 1.22.4
+go 1.22.5
require (
github.com/aws/aws-sdk-go-v2/config v1.27.21
@@ -12,8 +12,8 @@ require (
github.com/hashicorp/terraform-provider-aws v1.60.1-0.20220923175450-ca71523cdc36
github.com/mitchellh/go-homedir v1.1.0
github.com/pulumi/providertest v0.0.11
- github.com/pulumi/pulumi-terraform-bridge/pf v0.38.0
- github.com/pulumi/pulumi-terraform-bridge/v3 v3.85.0
+ github.com/pulumi/pulumi-terraform-bridge/pf v0.39.0
+ github.com/pulumi/pulumi-terraform-bridge/v3 v3.86.0
github.com/pulumi/pulumi/pkg/v3 v3.121.0
github.com/pulumi/pulumi/sdk/v3 v3.121.0
github.com/stretchr/testify v1.9.0
@@ -44,7 +44,7 @@ require (
cloud.google.com/go/storage v1.39.1 // indirect
dario.cat/mergo v1.0.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect
@@ -65,12 +65,12 @@ require (
github.com/armon/go-radix v1.0.0 // indirect
github.com/atotto/clipboard v0.1.4 // indirect
github.com/aws/aws-sdk-go v1.54.8 // indirect
- github.com/aws/aws-sdk-go-v2 v1.30.0 // indirect
+ github.com/aws/aws-sdk-go-v2 v1.30.1 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.17.21 // indirect
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.1 // indirect
- github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.12 // indirect
- github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.12 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.13 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.13 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.12 // indirect
github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.31.1 // indirect
@@ -81,7 +81,7 @@ require (
github.com/aws/aws-sdk-go-v2/service/amplify v1.22.1 // indirect
github.com/aws/aws-sdk-go-v2/service/apigateway v1.24.1 // indirect
github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.21.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/appconfig v1.30.1 // indirect
+ github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.1 // indirect
github.com/aws/aws-sdk-go-v2/service/appfabric v1.8.1 // indirect
github.com/aws/aws-sdk-go-v2/service/appflow v1.42.1 // indirect
github.com/aws/aws-sdk-go-v2/service/appintegrations v1.26.1 // indirect
@@ -263,7 +263,7 @@ require (
github.com/aws/aws-sdk-go-v2/service/workspaces v1.40.1 // indirect
github.com/aws/aws-sdk-go-v2/service/workspacesweb v1.20.0 // indirect
github.com/aws/aws-sdk-go-v2/service/xray v1.26.1 // indirect
- github.com/aws/smithy-go v1.20.2 // indirect
+ github.com/aws/smithy-go v1.20.3 // indirect
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/beevik/etree v1.4.0 // indirect
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
@@ -318,7 +318,7 @@ require (
github.com/hashicorp/go-checkpoint v0.5.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-cty v1.4.1-0.20200723130312-85980079f637 // indirect
- github.com/hashicorp/go-getter v1.7.1 // indirect
+ github.com/hashicorp/go-getter v1.7.5 // indirect
github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-plugin v1.6.0 // indirect
diff --git a/provider/go.sum b/provider/go.sum
index db6b102d2fa..23b70b4eba6 100644
--- a/provider/go.sum
+++ b/provider/go.sum
@@ -1154,8 +1154,8 @@ gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zum
git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 h1:E+OJmp2tPvt1W+amx48v1eqbjDYsgN+RzP4q16yV5eM=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1/go.mod h1:a6xsAQUZg+VsS3TJ05SRp524Hs4pZ/AeFSr5ENf0Yjo=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 h1:U2rTu3Ef+7w9FHKIAXM6ZyqF3UOWJZ12zIm8zECAFfg=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 h1:jBQA3cKT4L2rWMpgE7Yt3Hwh2aUj8KXjIGLxjHeYNNo=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0/go.mod h1:4OG6tQ9EOP/MT0NMjDlRzWoVFxfu9rN9B2X+tlSVktg=
github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2htVQTBY8nOZpyajYztF0vUvSZTuM=
@@ -1238,6 +1238,8 @@ github.com/aws/aws-sdk-go v1.54.8 h1:+soIjaRsuXfEJ9ts9poJD2fIIzSSRwfx+T69DrTtL2M
github.com/aws/aws-sdk-go v1.54.8/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
github.com/aws/aws-sdk-go-v2 v1.30.0 h1:6qAwtzlfcTtcL8NHtbDQAqgM5s6NDipQTkPxyH/6kAA=
github.com/aws/aws-sdk-go-v2 v1.30.0/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=
+github.com/aws/aws-sdk-go-v2 v1.30.1 h1:4y/5Dvfrhd1MxRDD77SrfsDaj8kUkkljU7XE83NPV+o=
+github.com/aws/aws-sdk-go-v2 v1.30.1/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg=
github.com/aws/aws-sdk-go-v2/config v1.27.21 h1:yPX3pjGCe2hJsetlmGNB4Mngu7UPmvWPzzWCv1+boeM=
@@ -1250,8 +1252,12 @@ github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.1 h1:D9VqWMuw7lJAX6d5eINfR
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.1/go.mod h1:ckvBx7codI4wzc5inOfDp5ZbK7TjMFa7eXwmLvXQrRk=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.12 h1:SJ04WXGTwnHlWIODtC5kJzKbeuHt+OUNOgKg7nfnUGw=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.12/go.mod h1:FkpvXhA92gb3GE9LD6Og0pHHycTxW7xGpnEh5E7Opwo=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.13 h1:5SAoZ4jYpGH4721ZNoS1znQrhOfZinOhc4XuTXx/nVc=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.13/go.mod h1:+rdA6ZLpaSeM7tSg/B0IEDinCIBJGmW8rKDFkYpP04g=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.12 h1:hb5KgeYfObi5MHkSSZMEudnIvX30iB+E21evI4r6BnQ=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.12/go.mod h1:CroKe/eWJdyfy9Vx4rljP5wTUjNJfb+fPz1uMYUhEGM=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.13 h1:WIijqeaAO7TYFLbhsZmi2rgLEAtWOC1LhxCAVTJlSKw=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.13/go.mod h1:i+kbfa76PQbWw/ULoWnp51EYVWH4ENln76fLQE3lXT8=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.12 h1:DXFWyt7ymx/l1ygdyTTS0X923e+Q2wXIxConJzrgwc0=
@@ -1274,6 +1280,8 @@ github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.21.1 h1:qbbxz47vQdGzvLeHS8x
github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.21.1/go.mod h1:3tgssMs7RA6rZoI6K9w6Nc6gCmhadTFAOU+OXh4tPkQ=
github.com/aws/aws-sdk-go-v2/service/appconfig v1.30.1 h1:h2JzyyqbvuXD2I0HombM5CsbmFbB3jcVeF/WhX8AjCk=
github.com/aws/aws-sdk-go-v2/service/appconfig v1.30.1/go.mod h1:rOJ1yTzhpIWjgop8XniA+nanxF4jpyUnLcX1s0gaShg=
+github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.1 h1:7nXZS7lmKza7FI8vz1ZAywf8AcGt+CxGY1E9tvb7/po=
+github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.1/go.mod h1:FUfSBXhPn3pV5m69Rkn3jwOIdA2UppNgkILeR3e42Jg=
github.com/aws/aws-sdk-go-v2/service/appfabric v1.8.1 h1:TbZ4cm8Mvw+auu0xQk7m6iFg9p+uFC97cUzYKZObt/s=
github.com/aws/aws-sdk-go-v2/service/appfabric v1.8.1/go.mod h1:9QTxY84kkzjBDUHp8mErDspSgpA6e8A/1AvU2AvYJ7I=
github.com/aws/aws-sdk-go-v2/service/appflow v1.42.1 h1:zxPjTkoh8wIgVg/R7NCG9t5X7UhZjAf+RrL49J9uv3g=
@@ -1642,6 +1650,8 @@ github.com/aws/aws-sdk-go-v2/service/xray v1.26.1 h1:HYDnKTBHT0bDROhdSvrBOWO/hR3
github.com/aws/aws-sdk-go-v2/service/xray v1.26.1/go.mod h1:hzagwUFkLbUYjoG391sGdiWWfZacwrwp5GZQQLz1sxg=
github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
+github.com/aws/smithy-go v1.20.3 h1:ryHwveWzPV5BIof6fyDvor6V3iUL7nTfiTKXHiW05nE=
+github.com/aws/smithy-go v1.20.3/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
github.com/beevik/etree v1.4.0 h1:oz1UedHRepuY3p4N5OjE0nK1WLCqtzHf25bxplKOHLs=
@@ -1999,8 +2009,8 @@ github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBM
github.com/hashicorp/go-cty v1.4.1-0.20200723130312-85980079f637 h1:Ud/6/AdmJ1R7ibdS0Wo5MWPj0T1R0fkpaD087bBaW8I=
github.com/hashicorp/go-cty v1.4.1-0.20200723130312-85980079f637/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs=
github.com/hashicorp/go-getter v1.4.0/go.mod h1:7qxyCd8rBfcShwsvxgIguu4KbS3l8bUCwg2Umn7RjeY=
-github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY=
-github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744=
+github.com/hashicorp/go-getter v1.7.5 h1:dT58k9hQ/vbxNMwoI5+xFYAJuv6152UNvdHokfI5wE4=
+github.com/hashicorp/go-getter v1.7.5/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744=
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
@@ -2337,10 +2347,10 @@ 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.11.0 h1:Jw9gBvyfmfOMq/EkYDm9+zGPxsDAA8jfeMpHmtZ+1oA=
github.com/pulumi/pulumi-java/pkg v0.11.0/go.mod h1:sXAk25P47AQVQL6ilAbFmRNgZykC7og/+87ihnqzFTc=
-github.com/pulumi/pulumi-terraform-bridge/pf v0.38.0 h1:0+A+ZkoZWy5EOd4zcnM7tjoQ4V1jV/koR8YvWJ8TK/E=
-github.com/pulumi/pulumi-terraform-bridge/pf v0.38.0/go.mod h1:JGOlvwSWY+jEt1V9sI/L8HAP9DBr74aXD10oi5nUJaI=
-github.com/pulumi/pulumi-terraform-bridge/v3 v3.85.0 h1:Zv6OPQdkGERufe2Mq9D92xbTm5mg3uhllh0ryrcrrds=
-github.com/pulumi/pulumi-terraform-bridge/v3 v3.85.0/go.mod h1:a7t2qe4smtB7HlbHlelQxjJQn8DFNB3Gbe5Ot2W7GZU=
+github.com/pulumi/pulumi-terraform-bridge/pf v0.39.0 h1:yV5LHLTF878wKMQcHVTqKRShaeJTX7ee36pL3cVvCLs=
+github.com/pulumi/pulumi-terraform-bridge/pf v0.39.0/go.mod h1:teMSjww/2MdNvGTbtLNrjMDkGXteRJso/1iViv8AnCI=
+github.com/pulumi/pulumi-terraform-bridge/v3 v3.86.0 h1:55ydBXwbNpL+eAPExJSfL1pSDUuPNSGCU08EamVh3qg=
+github.com/pulumi/pulumi-terraform-bridge/v3 v3.86.0/go.mod h1:jyywJUc4gFP5vWOar8qSQWzSrpwht7XDrYQtVvneza4=
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.8.0 h1:bhmidiCMMuzsJao5FE0UR69iF3WVKPCFrRkzjotFNn4=
diff --git a/provider/provider_python_test.go b/provider/provider_python_test.go
index 353c7acff4e..7c59091820e 100644
--- a/provider/provider_python_test.go
+++ b/provider/provider_python_test.go
@@ -6,16 +6,12 @@
package provider
import (
- "bytes"
- "context"
- "fmt"
"path/filepath"
"strings"
"testing"
"time"
"github.com/pulumi/pulumi/pkg/v3/testing/integration"
- "github.com/stretchr/testify/require"
)
func TestRegress3196(t *testing.T) {
@@ -61,7 +57,6 @@ func TestRegress3887(t *testing.T) {
// Make sure that importing an AWS targetGroup succeeds.
func TestRegress2534(t *testing.T) {
- ctx := context.Background()
ptest := pulumiTest(t, filepath.Join("test-programs", "regress-2534"))
upResult := ptest.Up()
targetGroupArn := upResult.Outputs["targetGroupArn"].Value.(string)
@@ -71,24 +66,8 @@ func TestRegress2534(t *testing.T) {
workdir := workspace.WorkDir()
t.Logf("workdir = %s", workdir)
- exec := func(args ...string) {
- var env []string
- for k, v := range workspace.GetEnvVars() {
- env = append(env, fmt.Sprintf("%s=%s", k, v))
- }
- stdin := bytes.NewReader([]byte{})
- var arguments []string
- arguments = append(arguments, args...)
- arguments = append(arguments, "-s", ptest.CurrentStack().Name())
- s1, s2, code, err := workspace.PulumiCommand().Run(ctx, workdir, stdin, nil, nil, env, arguments...)
- t.Logf("import stdout: %s", s1)
- t.Logf("import stderr: %s", s2)
- t.Logf("code=%v", code)
- require.NoError(t, err)
- }
-
- exec("import", "aws:lb/targetGroup:TargetGroup", "newtg", targetGroupArn, "--yes")
- exec("state", "unprotect", strings.ReplaceAll(targetGroupUrn, "::test", "::newtg"), "--yes")
+ execPulumi(t, ptest, workdir, "import", "aws:lb/targetGroup:TargetGroup", "newtg", targetGroupArn, "--yes")
+ execPulumi(t, ptest, workdir, "state", "unprotect", strings.ReplaceAll(targetGroupUrn, "::test", "::newtg"), "--yes")
}
func getPythonBaseOptions(t *testing.T) integration.ProgramTestOptions {
diff --git a/provider/provider_test.go b/provider/provider_test.go
index e7885ab2980..8d33202ff7f 100644
--- a/provider/provider_test.go
+++ b/provider/provider_test.go
@@ -2,6 +2,8 @@
package provider
import (
+ "bytes"
+ "context"
"encoding/json"
"fmt"
"os"
@@ -34,6 +36,24 @@ func getEnvRegion(t *testing.T) string {
return envRegion
}
+func execPulumi(t *testing.T, ptest *pulumitest.PulumiTest, workdir string, args ...string) {
+ ctx := context.Background()
+ var env []string
+ workspace := ptest.CurrentStack().Workspace()
+ for k, v := range workspace.GetEnvVars() {
+ env = append(env, fmt.Sprintf("%s=%s", k, v))
+ }
+ stdin := bytes.NewReader([]byte{})
+ var arguments []string
+ arguments = append(arguments, args...)
+ arguments = append(arguments, "-s", ptest.CurrentStack().Name())
+ s1, s2, code, err := workspace.PulumiCommand().Run(ctx, workdir, stdin, nil, nil, env, arguments...)
+ t.Logf("import stdout: %s", s1)
+ t.Logf("import stderr: %s", s2)
+ t.Logf("code=%v", code)
+ require.NoError(t, err)
+}
+
type testProviderUpgradeOptions struct {
baselineVersion string
linkNodeSDK bool
diff --git a/provider/provider_yaml_test.go b/provider/provider_yaml_test.go
index 571fec4aa22..bcadb5f1330 100644
--- a/provider/provider_yaml_test.go
+++ b/provider/provider_yaml_test.go
@@ -14,16 +14,25 @@ import (
"os/exec"
"path/filepath"
"runtime"
+ "sort"
"strings"
"testing"
+ "github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
+ appconfigsdk "github.com/aws/aws-sdk-go-v2/service/appconfig"
s3sdk "github.com/aws/aws-sdk-go-v2/service/s3"
+ "github.com/aws/aws-sdk-go-v2/service/s3/types"
"github.com/pulumi/providertest/pulumitest"
"github.com/pulumi/providertest/pulumitest/assertpreview"
"github.com/pulumi/providertest/pulumitest/opttest"
+ "github.com/pulumi/pulumi/sdk/v3/go/auto"
+ "github.com/pulumi/pulumi/sdk/v3/go/auto/optpreview"
+ "github.com/pulumi/pulumi/sdk/v3/go/auto/optrefresh"
+ "github.com/pulumi/pulumi/sdk/v3/go/auto/optup"
"github.com/pulumi/pulumi/sdk/v3/go/common/apitype"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
+ "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@@ -459,7 +468,431 @@ func TestS3BucketObjectDeprecation(t *testing.T) {
require.NotContains(t, result.StdOut+result.StdErr, "aws_s3_object")
}
-func configureS3() *s3sdk.Client {
+type tagsTestStep struct {
+ // The name of the Pulumi program
+ name string
+
+ // The type token of the resource, i.e. aws:s3:Bucket
+ token string
+
+ // The pulumi type of the resource, i.e. aws:s3/bucket:Bucket
+ typ string
+
+ // Constant properties for the primary resource under test.
+ //
+ // This cannot include the tags property, which will be adjusted by the test.
+ properties map[string]interface{}
+
+ // List of tags to add to the resource
+ tags map[string]interface{}
+
+ // List of default tags to add to the provider
+ defaultTags map[string]interface{}
+
+ // List of tag keys to add to the provider `ignoreTags.Keys` property
+ ignoreTagKeys []string
+
+ // Function to run prior to _any_ import step
+ preImportHook func(t *testing.T, outputs auto.OutputMap)
+
+ // Function to run after running the first up. This can be used to
+ // run extra validation
+ postUpHook func(t *testing.T, outputs auto.OutputMap)
+
+ // Other is a string that is inserted into the test program. It is intended to be
+ // used to provision supporting resources in tests.
+ other string
+
+ // If skip is non-empty, the test will be skipped with `skip` as the given reason.
+ skip string
+}
+
+// TestAccDefaultTags tries to test all the scenarios that might affect provider defaultTags / resource tags
+// i.e. up, refresh, preview, import, etc
+func TestAccDefaultTags(t *testing.T) {
+ t.Parallel()
+ if testing.Short() {
+ t.Skipf("Skipping in testing.Short() mode, assuming this is a CI run without credentials")
+ }
+
+ isNil := func(val interface{}) bool {
+ if val == nil {
+ return true
+ }
+ v, ok := val.(map[string]interface{})
+ return ok && len(v) == 0
+ }
+ validateOutputTags := func(outputs auto.OutputMap, expectedTags map[string]interface{}) {
+ stackOutputTags := outputs["actual"]
+ if !isNil(expectedTags) || !isNil(stackOutputTags) {
+ assert.Equal(t, expectedTags, stackOutputTags.Value)
+ }
+ }
+
+ steps := []tagsTestStep{
+ // Pulumi maintains it's own version of aws:s3:Bucket in
+ // `s3legacy/bucket_legacy.go`. Because we don't have any
+ // terraform-provider-aws maintainers to ensure our tagging works the same
+ // way as other resource's tagging, we give our own bucket special testing
+ // to make sure that tags work.
+ {
+ name: "legacy", token: "aws:s3:Bucket", typ: "aws:s3/bucket:Bucket",
+ tags: map[string]interface{}{
+ "LocalTag": "foo",
+ },
+ defaultTags: map[string]interface{}{
+ "GlobalTag": "bar",
+ },
+ postUpHook: func(t *testing.T, outputs auto.OutputMap) {
+ validateOutputTags(outputs, map[string]interface{}{
+ "LocalTag": "foo",
+ "GlobalTag": "bar",
+ })
+ bucketName := outputs["id"].Value.(string)
+ tags := getBucketTagging(context.Background(), bucketName)
+ assert.Subset(t, tags, []types.Tag{
+ {
+ Key: pulumi.StringRef("LocalTag"),
+ Value: pulumi.StringRef("foo"),
+ },
+ {
+ Key: pulumi.StringRef("GlobalTag"),
+ Value: pulumi.StringRef("bar"),
+ },
+ })
+ },
+ },
+ {
+ name: "legacy_ignore_tags", token: "aws:s3:Bucket", typ: "aws:s3/bucket:Bucket",
+ tags: map[string]interface{}{
+ "LocalTag": "foo",
+ },
+ ignoreTagKeys: []string{"IgnoreKey"},
+ preImportHook: func(t *testing.T, outputs auto.OutputMap) {
+ t.Helper()
+ resArn := outputs["id"].Value.(string)
+ addBucketTags(context.Background(), resArn, map[string]string{
+ "IgnoreKey": "foo",
+ })
+ },
+ defaultTags: map[string]interface{}{
+ "GlobalTag": "bar",
+ },
+ postUpHook: func(t *testing.T, outputs auto.OutputMap) {
+ validateOutputTags(outputs, map[string]interface{}{
+ "LocalTag": "foo",
+ "GlobalTag": "bar",
+ })
+ },
+ },
+
+ // Both aws:cognito:UserPool and aws:s3:BucketV2 are full SDKv2 resources managed
+ // by Terraform, but they have different requirements for successful tag
+ // interactions. That is why we have tests for both resources.
+ {
+ name: "bucket", token: "aws:s3:BucketV2", typ: "aws:s3/bucketV2:BucketV2",
+ tags: map[string]interface{}{
+ "LocalTag": "foo",
+ },
+ postUpHook: func(t *testing.T, outputs auto.OutputMap) {
+ validateOutputTags(outputs, map[string]interface{}{
+ "LocalTag": "foo",
+ "GlobalTag": "bar",
+ })
+ },
+ defaultTags: map[string]interface{}{
+ "GlobalTag": "bar",
+ },
+ },
+ {
+ name: "bucket_ignore_tags", token: "aws:s3:BucketV2", typ: "aws:s3/bucketV2:BucketV2",
+ tags: map[string]interface{}{
+ "LocalTag": "foo",
+ },
+ postUpHook: func(t *testing.T, outputs auto.OutputMap) {
+ validateOutputTags(outputs, map[string]interface{}{
+ "LocalTag": "foo",
+ "GlobalTag": "bar",
+ })
+ },
+ defaultTags: map[string]interface{}{
+ "GlobalTag": "bar",
+ },
+ ignoreTagKeys: []string{"IgnoreKey"},
+ preImportHook: func(t *testing.T, outputs auto.OutputMap) {
+ t.Helper()
+ resArn := outputs["id"].Value.(string)
+ addBucketTags(context.Background(), resArn, map[string]string{
+ "IgnoreKey": "foo",
+ })
+ },
+ },
+ {
+ name: "sdkv2", token: "aws:cognito:UserPool", typ: "aws:cognito/userPool:UserPool",
+ tags: map[string]interface{}{
+ "LocalTag": "foo",
+ },
+ defaultTags: map[string]interface{}{
+ "GlobalTag": "bar",
+ },
+ postUpHook: func(t *testing.T, outputs auto.OutputMap) {
+ validateOutputTags(outputs, map[string]interface{}{
+ "LocalTag": "foo",
+ "GlobalTag": "bar",
+ })
+ },
+ properties: map[string]interface{}{
+ // aliasAttributes is necessary because otherwise we don't
+ // see a clean initial refresh
+ "aliasAttributes": []interface{}{"email"},
+ },
+ },
+
+ // A PF resource (appconfig:Environment)
+ // PF resources deal with tags differently
+ {
+ name: "pf", token: "aws:appconfig:Environment", typ: "aws:appconfig/environment:Environment",
+ tags: map[string]interface{}{
+ "LocalTag": "foo",
+ },
+ defaultTags: map[string]interface{}{
+ "GlobalTag": "bar",
+ },
+ postUpHook: func(t *testing.T, outputs auto.OutputMap) {
+ validateOutputTags(outputs, map[string]interface{}{
+ "LocalTag": "foo",
+ "GlobalTag": "bar",
+ })
+ },
+ other: `
+ app:
+ type: aws:appconfig:Application`,
+ properties: map[string]interface{}{
+ "applicationId": "${app.id}",
+ },
+ },
+ {
+ name: "pf_ignore_tags", token: "aws:appconfig:Environment", typ: "aws:appconfig/environment:Environment",
+ tags: map[string]interface{}{
+ "LocalTag": "foo",
+ },
+ ignoreTagKeys: []string{"IgnoreKey"},
+ preImportHook: func(t *testing.T, outputs auto.OutputMap) {
+ t.Helper()
+ resArn := outputs["resArn"].Value.(string)
+ addAppconfigEnvironmentTags(context.Background(), resArn, map[string]string{
+ "IgnoreKey": "foo",
+ })
+ },
+ defaultTags: map[string]interface{}{
+ "GlobalTag": "bar",
+ },
+ postUpHook: func(t *testing.T, outputs auto.OutputMap) {
+ validateOutputTags(outputs, map[string]interface{}{
+ "LocalTag": "foo",
+ "GlobalTag": "bar",
+ })
+ },
+ other: `
+ app:
+ type: aws:appconfig:Application`,
+ properties: map[string]interface{}{
+ "applicationId": "${app.id}",
+ },
+ },
+ }
+
+ for _, step := range steps {
+ step := step
+ t.Run(step.name, func(t *testing.T) {
+ t.Parallel()
+ if reason := step.skip; reason != "" {
+ t.Skipf(reason)
+ }
+ testTagsPulumiLifecycle(t, step)
+ })
+ }
+}
+
+// testTagsPulumiLifecycle tests the complete lifecycle of a pulumi program
+// Scenarios that this tests:
+// 1. `Up` with both provider `defaultTags`/`ignoreTags` and resource level `tags`
+// 1a. Run validations on result
+// 2. `Refresh` with no changes
+// 3. `Import` using the resource option. Ensures resource can be successfully imported
+// 3a. Allows for a hook to be run prior to import being run. e.g. Add tags remotely
+// 4. `Import` using the CLI. Ensures resources can be successfully imported
+// 4a. Allows for a hook to be run prior to import being run. e.g. Add tags remotely
+// 5. `Refresh` with no changes
+func testTagsPulumiLifecycle(t *testing.T, step tagsTestStep) {
+ t.Helper()
+ ctx := context.Background()
+
+ stepDir, err := os.MkdirTemp(os.TempDir(), step.name)
+ assert.NoError(t, err)
+ fpath := filepath.Join(stepDir, "Pulumi.yaml")
+
+ generateTagsTest(t, step, fpath, "")
+ ptest := pulumiTest(t, stepDir, opttest.TestInPlace())
+ stack := ptest.CurrentStack()
+
+ t.Log("Initial deployment...")
+ upRes, err := stack.Up(ctx)
+ assert.NoError(t, err)
+ outputs := upRes.Outputs
+ urn := outputs["urn"].Value.(string)
+ id := outputs["id"].Value.(string)
+ providerUrn := outputs["providerUrn"].Value.(string)
+ if step.postUpHook != nil {
+ step.postUpHook(t, outputs)
+ }
+
+ t.Log("refresh...")
+ _, err = stack.Refresh(ctx, optrefresh.ExpectNoChanges())
+ assert.NoError(t, err)
+
+ t.Log("delete state...")
+ execPulumi(t, ptest, stepDir, "state", "delete", urn)
+
+ // import using the import resource option
+ t.Log("up with import...")
+ if step.preImportHook != nil {
+ step.preImportHook(t, outputs)
+ }
+ generateTagsTest(t, step, fpath, id)
+ upRes, err = stack.Up(ctx, optup.Diff())
+ assert.NoError(t, err)
+ changes := *upRes.Summary.ResourceChanges
+ assert.Equal(t, 1, changes["import"])
+
+ t.Log("delete state...")
+ execPulumi(t, ptest, stepDir, "state", "delete", urn)
+
+ t.Log("import from cli...")
+ if step.preImportHook != nil {
+ step.preImportHook(t, outputs)
+ }
+ generateTagsTest(t, step, fpath, "")
+ execPulumi(t, ptest, stepDir, "import", step.typ, "res", id, "--provider", fmt.Sprintf("aws-provider=%s", providerUrn), "--yes")
+ execPulumi(t, ptest, stepDir, "state", "unprotect", urn, "--yes")
+
+ // need to run an up to fix the state. It should be a no-op
+ // re https://github.com/pulumi/pulumi-aws/issues/4204
+ upRes, err = stack.Up(ctx)
+ assert.NoError(t, err)
+ for k := range *upRes.Summary.ResourceChanges {
+ if k != "same" {
+ t.Fatal("expected no changes")
+ }
+ }
+
+ t.Log("preview with refresh...")
+ _, err = stack.Preview(ctx, optpreview.Refresh(), optpreview.ExpectNoChanges())
+ assert.NoError(t, err)
+}
+
+// generateTagsTest generates a pulumi program for the given test step
+// and writes it to the test directory
+func generateTagsTest(t *testing.T, step tagsTestStep, testPath string, importId string) {
+ template := `name: test-aws-%s
+runtime: yaml
+resources:
+ aws-provider:
+ type: pulumi:providers:aws%s%s
+ res:
+ type: %s%s%s
+outputs:
+ actual: ${res.tags}
+ urn: ${res.urn}
+ id: ${res.id}
+ resArn: ${res.arn}
+ providerUrn: ${aws-provider.urn}`
+
+ options := map[string]interface{}{
+ "provider": "${aws-provider}",
+ }
+
+ if importId != "" {
+ options["import"] = importId
+ }
+
+ var expandMap func(level int, v interface{}) string
+ expandMap = func(level int, v interface{}) string {
+ indent := "\n" + strings.Repeat(" ", level)
+
+ var body string
+ switch v := v.(type) {
+ case nil:
+ return ""
+ case string:
+ body = v
+ case []string:
+ for _, v := range v {
+ body += indent + "- " + strings.TrimSpace(expandMap(level+1, v))
+ }
+ case []interface{}:
+ for _, v := range v {
+ body += indent + "- " + strings.TrimSpace(expandMap(level+1, v))
+ }
+ case map[string]interface{}:
+ sortedKeys := make([]string, len(v))
+ for k := range v {
+ sortedKeys = append(sortedKeys, k)
+ }
+ sort.Strings(sortedKeys)
+ for _, k := range sortedKeys {
+ v := v[k]
+
+ val := expandMap(level+1, v)
+ if val == "" {
+ continue
+ }
+ body += indent + k + ": " + val
+ }
+ default:
+ t.Logf("Unknown value type %T", v)
+ t.FailNow()
+ }
+
+ return body
+ }
+
+ expandProps := func(key string, props ...map[string]interface{}) string {
+ a := map[string]interface{}{}
+ for _, arg := range props {
+ for k, v := range arg {
+ a[k] = v
+ }
+ }
+
+ return expandMap(2, map[string]interface{}{
+ key: a,
+ })
+ }
+
+ providerProps := map[string]interface{}{
+ "defaultTags": map[string]interface{}{
+ "tags": step.defaultTags,
+ },
+ }
+ if step.ignoreTagKeys != nil {
+ providerProps["ignoreTags"] = map[string]interface{}{
+ "keys": step.ignoreTagKeys,
+ }
+ }
+
+ body := fmt.Sprintf(template, step.name,
+ expandProps("properties", providerProps), step.other, step.token,
+ expandProps("options", options),
+ expandProps("properties", map[string]interface{}{
+ "tags": step.tags,
+ }, step.properties))
+
+ t.Logf("template for %s: \n%s", step.name, body)
+ require.NoError(t, os.WriteFile(testPath, []byte(body), 0600))
+}
+
+func loadAwsDefaultConfig() aws.Config {
loadOpts := []func(*config.LoadOptions) error{}
if p, ok := os.LookupEnv("AWS_PROFILE"); ok {
loadOpts = append(loadOpts, config.WithSharedConfigProfile(p))
@@ -469,9 +902,77 @@ func configureS3() *s3sdk.Client {
}
cfg, err := config.LoadDefaultConfig(context.TODO(), loadOpts...)
contract.AssertNoErrorf(err, "failed to load AWS config")
+
+ return cfg
+}
+
+func configureS3() *s3sdk.Client {
+ cfg := loadAwsDefaultConfig()
return s3sdk.NewFromConfig(cfg)
}
+func configureAppconfig() *appconfigsdk.Client {
+ cfg := loadAwsDefaultConfig()
+ return appconfigsdk.NewFromConfig(cfg)
+}
+
+func addAppconfigEnvironmentTags(ctx context.Context, envArn string, tags map[string]string) {
+ appconfig := configureAppconfig()
+ existingTags, err := appconfig.ListTagsForResource(ctx, &appconfigsdk.ListTagsForResourceInput{
+ ResourceArn: &envArn,
+ })
+ contract.AssertNoErrorf(err, "failed to list tags for appconfig env")
+
+ for k, v := range existingTags.Tags {
+ if _, exists := tags[k]; !exists {
+ tags[k] = v
+ }
+ }
+
+ _, err = appconfig.TagResource(ctx, &appconfigsdk.TagResourceInput{
+ ResourceArn: &envArn,
+ Tags: tags,
+ })
+ contract.AssertNoErrorf(err, "error tagging appconfig env")
+}
+
+func getBucketTagging(ctx context.Context, awsBucket string) []types.Tag {
+ s3 := configureS3()
+ tagging, err := s3.GetBucketTagging(ctx, &s3sdk.GetBucketTaggingInput{
+ Bucket: &awsBucket,
+ })
+ contract.AssertNoErrorf(err, "failed to get bucket tagging")
+ return tagging.TagSet
+}
+
+func addBucketTags(ctx context.Context, bucketName string, tags map[string]string) {
+ s3 := configureS3()
+ existingTags := getBucketTagging(ctx, bucketName)
+
+ newTags := []types.Tag{}
+
+ for k, v := range tags {
+ newTags = append(newTags, types.Tag{
+ Key: &k,
+ Value: &v,
+ })
+ }
+
+ for _, v := range existingTags {
+ if _, exists := tags[*v.Key]; !exists {
+ newTags = append(newTags, v)
+ }
+ }
+
+ _, err := s3.PutBucketTagging(ctx, &s3sdk.PutBucketTaggingInput{
+ Bucket: &bucketName,
+ Tagging: &types.Tagging{
+ TagSet: newTags,
+ },
+ })
+ contract.AssertNoErrorf(err, "error putting bucket tags")
+}
+
func deleteBucketTagging(ctx context.Context, awsBucket string) {
s3 := configureS3()
_, err := s3.DeleteBucketTagging(ctx, &s3sdk.DeleteBucketTaggingInput{
@@ -479,3 +980,12 @@ func deleteBucketTagging(ctx context.Context, awsBucket string) {
})
contract.AssertNoErrorf(err, "failed to delete bucket tagging")
}
+
+func getCwd(t *testing.T) string {
+ cwd, err := os.Getwd()
+ if err != nil {
+ t.FailNow()
+ }
+
+ return cwd
+}
diff --git a/provider/resources.go b/provider/resources.go
index 16662a73317..22a59cc154b 100644
--- a/provider/resources.go
+++ b/provider/resources.go
@@ -5945,6 +5945,19 @@ compatibility shim in favor of the new "name" field.`)
prov.Resources[key].PreCheckCallback = applyTags
}
+ // also override read so that it works during import
+ if transform := prov.Resources[key].TransformOutputs; transform != nil {
+ prov.Resources[key].TransformOutputs = func(ctx context.Context, pm resource.PropertyMap) (resource.PropertyMap, error) {
+ config, err := transform(ctx, pm)
+ if err != nil {
+ return nil, err
+ }
+ return applyTagsOutputs(ctx, config)
+ }
+ } else {
+ prov.Resources[key].TransformOutputs = applyTagsOutputs
+ }
+
if prov.Resources[key].GetFields() == nil {
prov.Resources[key].Fields = map[string]*tfbridge.SchemaInfo{}
}
diff --git a/provider/tags.go b/provider/tags.go
index 40b1ef8307a..9925af8807e 100644
--- a/provider/tags.go
+++ b/provider/tags.go
@@ -57,6 +57,40 @@ func applyTags(
}
if allTags.IsNull() {
delete(ret, "tags")
+ delete(ret, "tagsAll")
+ return ret, nil
+ }
+ ret["tags"] = allTags
+ ret["tagsAll"] = allTags
+
+ return ret, nil
+}
+
+// similar to applyTags, but applied to the `TransformOutputs` method that is run
+// during Read
+func applyTagsOutputs(
+ ctx context.Context, config resource.PropertyMap,
+) (resource.PropertyMap, error) {
+ ret := config.Copy()
+ configTags := resource.NewObjectProperty(resource.PropertyMap{})
+ if t, ok := config["tags"]; ok {
+ configTags = t
+ }
+
+ meta := resource.PropertyMap{}
+ if at, ok := config["tagsAll"]; ok {
+ meta["defaultTags"] = resource.NewObjectProperty(resource.PropertyMap{
+ "tags": at,
+ })
+ }
+
+ allTags, err := mergeTags(ctx, configTags, meta)
+ if err != nil {
+ return nil, err
+ }
+ if allTags.IsNull() {
+ delete(ret, "tags")
+ delete(ret, "tagsAll")
return ret, nil
}
ret["tags"] = allTags
diff --git a/provider/tags_test.go b/provider/tags_test.go
index 6612883ba1f..8912740f8b8 100644
--- a/provider/tags_test.go
+++ b/provider/tags_test.go
@@ -220,6 +220,187 @@ func TestApplyTags(t *testing.T) {
}
}
+func TestApplyTagsOutputs(t *testing.T) {
+ ctx := context.Background()
+
+ type gen = *rapid.Generator[resource.PropertyValue]
+ type pk = resource.PropertyKey
+ type pv = resource.PropertyValue
+ type pm = resource.PropertyMap
+
+ maybeNullOrUnknown := func(x gen) gen {
+ return rapid.OneOf(
+ rapid.Just(resource.NewNullProperty()),
+ x,
+ rapid.Map(x, resource.MakeComputed),
+ )
+ }
+
+ str := maybeNullOrUnknown(rapid.OneOf(
+ rapid.Just(resource.NewStringProperty("")),
+ rapid.Just(resource.NewStringProperty("foo")),
+ rapid.Just(resource.NewStringProperty("bar")),
+ ))
+
+ keys := rapid.Map(rapid.OneOf[string](
+ rapid.Just(""),
+ rapid.Just("a"),
+ rapid.Just("b"),
+ ), func(s string) pk {
+ return resource.PropertyKey(s)
+ })
+
+ makeObj := func(m map[pk]resource.PropertyValue) resource.PropertyValue {
+ return resource.NewObjectProperty(resource.PropertyMap(m))
+ }
+
+ keyValueTags := maybeNullOrUnknown(
+ rapid.Map(rapid.MapOfN[pk, pv](keys, str, 0, 3), makeObj))
+
+ config := rapid.Map(keyValueTags, func(tags pv) pm {
+ return resource.PropertyMap{
+ "tags": tags,
+ }
+ })
+
+ defaultConfig := maybeNullOrUnknown(rapid.Map(config,
+ resource.NewObjectProperty))
+
+ ignoreConfig := rapid.Custom[pv](func(t *rapid.T) pv {
+ keys := keyValueTags.Draw(t, "keys")
+ keyPrefixes := keyValueTags.Draw(t, "keyPrefixes")
+ m := resource.PropertyMap{}
+ if !keys.IsNull() {
+ m["keys"] = keys
+ }
+ if !keyPrefixes.IsNull() {
+ m["keyPrefixes"] = keyPrefixes
+ }
+ return resource.NewObjectProperty(m)
+ })
+
+ meta := rapid.Custom[pm](func(t *rapid.T) pm {
+ i := ignoreConfig.Draw(t, "ignoreConfig")
+ d := defaultConfig.Draw(t, "defaultConfig")
+ m := resource.PropertyMap{}
+ if !i.IsNull() {
+ m["ignoreConfig"] = i
+ }
+ if !d.IsNull() {
+ m["defaultConfig"] = d
+ }
+ return m
+ })
+
+ type args struct {
+ meta resource.PropertyMap
+ config resource.PropertyMap
+ }
+
+ argsGen := rapid.Custom[args](func(t *rapid.T) args {
+ m := meta.Draw(t, "meta")
+ c := config.Draw(t, "config")
+ return args{meta: m, config: c}
+ })
+
+ t.Run("no panics", func(t *testing.T) {
+ rapid.Check(t, func(t *rapid.T) {
+ args := argsGen.Draw(t, "args")
+ _, err := applyTags(ctx, args.config, args.meta)
+ require.NoError(t, err)
+ })
+ })
+
+ type testCase struct {
+ name string
+ config resource.PropertyMap
+ expect resource.PropertyMap
+ }
+
+ testCases := []testCase{
+ {
+ name: "resource tags propagate",
+ config: resource.PropertyMap{
+ "tags": resource.NewObjectProperty(resource.PropertyMap{
+ "tag1": resource.NewStringProperty("tag1v"),
+ }),
+ },
+ expect: resource.PropertyMap{
+ "tags": resource.NewObjectProperty(resource.PropertyMap{
+ "tag1": resource.NewStringProperty("tag1v"),
+ }),
+ },
+ },
+ {
+ name: "provier sets a tag",
+ config: resource.PropertyMap{
+ "tagsAll": resource.NewObjectProperty(resource.PropertyMap{
+ "tag2": resource.NewStringProperty("tag2v"),
+ }),
+ },
+ expect: resource.PropertyMap{
+ "tags": resource.NewObjectProperty(resource.PropertyMap{
+ "tag2": resource.NewStringProperty("tag2v"),
+ }),
+ },
+ },
+ {
+ name: "provider adds a tag to resource tags",
+ config: resource.PropertyMap{
+ "tags": resource.NewObjectProperty(resource.PropertyMap{
+ "tag1": resource.NewStringProperty("tag1v"),
+ }),
+ "tagsAll": resource.NewObjectProperty(resource.PropertyMap{
+ "tag2": resource.NewStringProperty("tag2v"),
+ }),
+ },
+ expect: resource.PropertyMap{
+ "tags": resource.NewObjectProperty(resource.PropertyMap{
+ "tag1": resource.NewStringProperty("tag1v"),
+ "tag2": resource.NewStringProperty("tag2v"),
+ }),
+ },
+ },
+ {
+ name: "provider cannot change a resource tag",
+ config: resource.PropertyMap{
+ "tags": resource.NewObjectProperty(resource.PropertyMap{
+ "tag1": resource.NewStringProperty("tag1v"),
+ }),
+ "tagsAll": resource.NewObjectProperty(resource.PropertyMap{
+ "tag1": resource.NewStringProperty("tag2v"),
+ }),
+ },
+ expect: resource.PropertyMap{
+ "tags": resource.NewObjectProperty(resource.PropertyMap{
+ "tag1": resource.NewStringProperty("tag1v"),
+ }),
+ },
+ },
+ {
+ name: "unknowns mark the entire computation unknown",
+ config: resource.PropertyMap{
+ "tags": resource.NewObjectProperty(resource.PropertyMap{
+ "tag1": resource.MakeComputed(resource.PropertyValue{}),
+ }),
+ },
+ expect: resource.PropertyMap{
+ "tags": resource.NewOutputProperty(resource.Output{Known: false}),
+ },
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ r, err := applyTagsOutputs(ctx, tc.config)
+ require.NoError(t, err)
+ // Expect tagsAll to be copied from tags.
+ tc.expect["tagsAll"] = tc.expect["tags"]
+ require.Equal(t, tc.expect, r)
+ })
+ }
+}
+
func TestAddingEmptyTagProducesChangeDiff(t *testing.T) {
replayEvent := `
[
diff --git a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerEnvResult.cs b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerEnvResult.cs
new file mode 100644
index 00000000000..d1df58e0c43
--- /dev/null
+++ b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerEnvResult.cs
@@ -0,0 +1,35 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Aws.Batch.Outputs
+{
+
+ [OutputType]
+ public sealed class GetJobDefinitionEksPropertyPodPropertyContainerEnvResult
+ {
+ ///
+ /// The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).
+ ///
+ public readonly string Name;
+ ///
+ /// The quantity of the specified resource to reserve for the container.
+ ///
+ public readonly string Value;
+
+ [OutputConstructor]
+ private GetJobDefinitionEksPropertyPodPropertyContainerEnvResult(
+ string name,
+
+ string value)
+ {
+ Name = name;
+ Value = value;
+ }
+ }
+}
diff --git a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerResourceResult.cs b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerResourceResult.cs
new file mode 100644
index 00000000000..6d80565c519
--- /dev/null
+++ b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerResourceResult.cs
@@ -0,0 +1,35 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Aws.Batch.Outputs
+{
+
+ [OutputType]
+ public sealed class GetJobDefinitionEksPropertyPodPropertyContainerResourceResult
+ {
+ ///
+ /// The type and quantity of the resources to reserve for the container.
+ ///
+ public readonly ImmutableDictionary Limits;
+ ///
+ /// The type and quantity of the resources to request for the container.
+ ///
+ public readonly ImmutableDictionary Requests;
+
+ [OutputConstructor]
+ private GetJobDefinitionEksPropertyPodPropertyContainerResourceResult(
+ ImmutableDictionary limits,
+
+ ImmutableDictionary requests)
+ {
+ Limits = limits;
+ Requests = requests;
+ }
+ }
+}
diff --git a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerResult.cs b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerResult.cs
new file mode 100644
index 00000000000..5d5f95c59c4
--- /dev/null
+++ b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerResult.cs
@@ -0,0 +1,84 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Aws.Batch.Outputs
+{
+
+ [OutputType]
+ public sealed class GetJobDefinitionEksPropertyPodPropertyContainerResult
+ {
+ ///
+ /// An array of arguments to the entrypoint
+ ///
+ public readonly ImmutableArray Args;
+ ///
+ /// The command that's passed to the container.
+ ///
+ public readonly ImmutableArray Commands;
+ ///
+ /// The environment variables to pass to a container. Array of EksContainerEnvironmentVariable objects.
+ ///
+ public readonly ImmutableArray Envs;
+ ///
+ /// The image used to start a container.
+ ///
+ public readonly string Image;
+ ///
+ /// The image pull policy for the container.
+ ///
+ public readonly string ImagePullPolicy;
+ ///
+ /// The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).
+ ///
+ public readonly string Name;
+ ///
+ /// The type and amount of resources to assign to a container.
+ ///
+ public readonly ImmutableArray Resources;
+ ///
+ /// The security context for a job.
+ ///
+ public readonly ImmutableArray SecurityContexts;
+ ///
+ /// The volume mounts for the container.
+ ///
+ public readonly ImmutableArray VolumeMounts;
+
+ [OutputConstructor]
+ private GetJobDefinitionEksPropertyPodPropertyContainerResult(
+ ImmutableArray args,
+
+ ImmutableArray commands,
+
+ ImmutableArray envs,
+
+ string image,
+
+ string imagePullPolicy,
+
+ string name,
+
+ ImmutableArray resources,
+
+ ImmutableArray securityContexts,
+
+ ImmutableArray volumeMounts)
+ {
+ Args = args;
+ Commands = commands;
+ Envs = envs;
+ Image = image;
+ ImagePullPolicy = imagePullPolicy;
+ Name = name;
+ Resources = resources;
+ SecurityContexts = securityContexts;
+ VolumeMounts = volumeMounts;
+ }
+ }
+}
diff --git a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerSecurityContextResult.cs b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerSecurityContextResult.cs
new file mode 100644
index 00000000000..1e148f12950
--- /dev/null
+++ b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerSecurityContextResult.cs
@@ -0,0 +1,53 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Aws.Batch.Outputs
+{
+
+ [OutputType]
+ public sealed class GetJobDefinitionEksPropertyPodPropertyContainerSecurityContextResult
+ {
+ ///
+ /// When this parameter is true, the container is given elevated permissions on the host container instance (similar to the root user).
+ ///
+ public readonly bool Privileged;
+ public readonly bool ReadOnlyRootFileSystem;
+ ///
+ /// When this parameter is specified, the container is run as the specified group ID (gid). If this parameter isn't specified, the default is the group that's specified in the image metadata.
+ ///
+ public readonly int RunAsGroup;
+ ///
+ /// When this parameter is specified, the container is run as a user with a uid other than 0. If this parameter isn't specified, so such rule is enforced.
+ ///
+ public readonly bool RunAsNonRoot;
+ ///
+ /// When this parameter is specified, the container is run as the specified user ID (uid). If this parameter isn't specified, the default is the user that's specified in the image metadata.
+ ///
+ public readonly int RunAsUser;
+
+ [OutputConstructor]
+ private GetJobDefinitionEksPropertyPodPropertyContainerSecurityContextResult(
+ bool privileged,
+
+ bool readOnlyRootFileSystem,
+
+ int runAsGroup,
+
+ bool runAsNonRoot,
+
+ int runAsUser)
+ {
+ Privileged = privileged;
+ ReadOnlyRootFileSystem = readOnlyRootFileSystem;
+ RunAsGroup = runAsGroup;
+ RunAsNonRoot = runAsNonRoot;
+ RunAsUser = runAsUser;
+ }
+ }
+}
diff --git a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerVolumeMountResult.cs b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerVolumeMountResult.cs
new file mode 100644
index 00000000000..ffa32599f29
--- /dev/null
+++ b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyContainerVolumeMountResult.cs
@@ -0,0 +1,42 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Aws.Batch.Outputs
+{
+
+ [OutputType]
+ public sealed class GetJobDefinitionEksPropertyPodPropertyContainerVolumeMountResult
+ {
+ ///
+ /// The path on the container where the volume is mounted.
+ ///
+ public readonly string MountPath;
+ ///
+ /// The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).
+ ///
+ public readonly string Name;
+ ///
+ /// If this value is true, the container has read-only access to the volume.
+ ///
+ public readonly bool ReadOnly;
+
+ [OutputConstructor]
+ private GetJobDefinitionEksPropertyPodPropertyContainerVolumeMountResult(
+ string mountPath,
+
+ string name,
+
+ bool readOnly)
+ {
+ MountPath = mountPath;
+ Name = name;
+ ReadOnly = readOnly;
+ }
+ }
+}
diff --git a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyMetadataResult.cs b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyMetadataResult.cs
new file mode 100644
index 00000000000..86ff7d39b67
--- /dev/null
+++ b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyMetadataResult.cs
@@ -0,0 +1,27 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Aws.Batch.Outputs
+{
+
+ [OutputType]
+ public sealed class GetJobDefinitionEksPropertyPodPropertyMetadataResult
+ {
+ ///
+ /// Key-value pairs used to identify, sort, and organize cube resources.
+ ///
+ public readonly ImmutableDictionary Labels;
+
+ [OutputConstructor]
+ private GetJobDefinitionEksPropertyPodPropertyMetadataResult(ImmutableDictionary labels)
+ {
+ Labels = labels;
+ }
+ }
+}
diff --git a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyResult.cs b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyResult.cs
new file mode 100644
index 00000000000..5647bb74294
--- /dev/null
+++ b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyResult.cs
@@ -0,0 +1,63 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Aws.Batch.Outputs
+{
+
+ [OutputType]
+ public sealed class GetJobDefinitionEksPropertyPodPropertyResult
+ {
+ ///
+ /// The properties of the container that's used on the Amazon EKS pod. Array of EksContainer objects.
+ ///
+ public readonly ImmutableArray Containers;
+ ///
+ /// The DNS policy for the pod. The default value is ClusterFirst. If the hostNetwork parameter is not specified, the default is ClusterFirstWithHostNet. ClusterFirst indicates that any DNS query that does not match the configured cluster domain suffix is forwarded to the upstream nameserver inherited from the node.
+ ///
+ public readonly string DnsPolicy;
+ ///
+ /// Indicates if the pod uses the hosts' network IP address. The default value is true. Setting this to false enables the Kubernetes pod networking model. Most AWS Batch workloads are egress-only and don't require the overhead of IP allocation for each pod for incoming connections.
+ ///
+ public readonly bool HostNetwork;
+ ///
+ /// Metadata about the Kubernetes pod.
+ ///
+ public readonly ImmutableArray Metadatas;
+ ///
+ /// The name of the service account that's used to run the pod.
+ ///
+ public readonly bool ServiceAccountName;
+ ///
+ /// A list of data volumes used in a job.
+ ///
+ public readonly ImmutableArray Volumes;
+
+ [OutputConstructor]
+ private GetJobDefinitionEksPropertyPodPropertyResult(
+ ImmutableArray containers,
+
+ string dnsPolicy,
+
+ bool hostNetwork,
+
+ ImmutableArray metadatas,
+
+ bool serviceAccountName,
+
+ ImmutableArray volumes)
+ {
+ Containers = containers;
+ DnsPolicy = dnsPolicy;
+ HostNetwork = hostNetwork;
+ Metadatas = metadatas;
+ ServiceAccountName = serviceAccountName;
+ Volumes = volumes;
+ }
+ }
+}
diff --git a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyVolumeEmptyDirResult.cs b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyVolumeEmptyDirResult.cs
new file mode 100644
index 00000000000..891109b3d74
--- /dev/null
+++ b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyVolumeEmptyDirResult.cs
@@ -0,0 +1,35 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Aws.Batch.Outputs
+{
+
+ [OutputType]
+ public sealed class GetJobDefinitionEksPropertyPodPropertyVolumeEmptyDirResult
+ {
+ ///
+ /// The medium to store the volume.
+ ///
+ public readonly string Medium;
+ ///
+ /// The maximum size of the volume. By default, there's no maximum size defined.
+ ///
+ public readonly string SizeLimit;
+
+ [OutputConstructor]
+ private GetJobDefinitionEksPropertyPodPropertyVolumeEmptyDirResult(
+ string medium,
+
+ string sizeLimit)
+ {
+ Medium = medium;
+ SizeLimit = sizeLimit;
+ }
+ }
+}
diff --git a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyVolumeHostPathResult.cs b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyVolumeHostPathResult.cs
new file mode 100644
index 00000000000..cdd79363487
--- /dev/null
+++ b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyVolumeHostPathResult.cs
@@ -0,0 +1,27 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Aws.Batch.Outputs
+{
+
+ [OutputType]
+ public sealed class GetJobDefinitionEksPropertyPodPropertyVolumeHostPathResult
+ {
+ ///
+ /// The path of the file or directory on the host to mount into containers on the pod.
+ ///
+ public readonly string Path;
+
+ [OutputConstructor]
+ private GetJobDefinitionEksPropertyPodPropertyVolumeHostPathResult(string path)
+ {
+ Path = path;
+ }
+ }
+}
diff --git a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyVolumeResult.cs b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyVolumeResult.cs
new file mode 100644
index 00000000000..87c23c937a2
--- /dev/null
+++ b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyVolumeResult.cs
@@ -0,0 +1,49 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Aws.Batch.Outputs
+{
+
+ [OutputType]
+ public sealed class GetJobDefinitionEksPropertyPodPropertyVolumeResult
+ {
+ ///
+ /// Specifies the configuration of a Kubernetes emptyDir volume.
+ ///
+ public readonly ImmutableArray EmptyDirs;
+ ///
+ /// The path for the device on the host container instance.
+ ///
+ public readonly ImmutableArray HostPaths;
+ ///
+ /// The name of the job definition to register. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).
+ ///
+ public readonly string Name;
+ ///
+ /// Specifies the configuration of a Kubernetes secret volume.
+ ///
+ public readonly ImmutableArray Secrets;
+
+ [OutputConstructor]
+ private GetJobDefinitionEksPropertyPodPropertyVolumeResult(
+ ImmutableArray emptyDirs,
+
+ ImmutableArray hostPaths,
+
+ string name,
+
+ ImmutableArray secrets)
+ {
+ EmptyDirs = emptyDirs;
+ HostPaths = hostPaths;
+ Name = name;
+ Secrets = secrets;
+ }
+ }
+}
diff --git a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyVolumeSecretResult.cs b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyVolumeSecretResult.cs
new file mode 100644
index 00000000000..523c39ae66c
--- /dev/null
+++ b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyPodPropertyVolumeSecretResult.cs
@@ -0,0 +1,35 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Aws.Batch.Outputs
+{
+
+ [OutputType]
+ public sealed class GetJobDefinitionEksPropertyPodPropertyVolumeSecretResult
+ {
+ ///
+ /// Specifies whether the secret or the secret's keys must be defined.
+ ///
+ public readonly bool Optional;
+ ///
+ /// The name of the secret. The name must be allowed as a DNS subdomain name
+ ///
+ public readonly string SecretName;
+
+ [OutputConstructor]
+ private GetJobDefinitionEksPropertyPodPropertyVolumeSecretResult(
+ bool optional,
+
+ string secretName)
+ {
+ Optional = optional;
+ SecretName = secretName;
+ }
+ }
+}
diff --git a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyResult.cs b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyResult.cs
index 8f7260ebade..8d4290bd44b 100644
--- a/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyResult.cs
+++ b/sdk/dotnet/Batch/Outputs/GetJobDefinitionEksPropertyResult.cs
@@ -16,10 +16,10 @@ public sealed class GetJobDefinitionEksPropertyResult
///
/// The properties for the Kubernetes pod resources of a job.
///
- public readonly ImmutableArray